哈希表教学课件.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
处理冲突的方法 即:产生的 Hi 均不相同,且所产生的 m-1个 Hi 值能覆盖哈希表中所有地址。 则要求: 注意:增量 di 应具有“完备性” ※ 随机探测时的 m 和 di 没有公因子。 ※ 平方探测时的表长 m 必为形如 4j+3 的素数(如: 7, 11, 19, 23, … 等); 处理冲突的方法 H2(key) 是另设定的一个哈希函数,它的函数值应和 m 互为素数。 若 m 为素数,则 H2(key) 可以是 1 至 m-1 之间的任意数; 若 m 为 2 的幂次,则 H2(key) 应是 1 至 m-1 之间的任意奇数。 处理冲突的方法 例如,当 m=11时, 可设 H2(key)=(3 key) MOD 10+1 19 01 23 14 55 68 11 82 36 1 1 1 1 2 1 1 2 2 处理冲突的方法 2. 再哈希法 Hi=RHi(key) i=1,2,3,……,k RHi均是不同的哈希函数,在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。 缺点:增加了计算时间。 处理冲突的方法 3. 链地址法 所有关键字为同义词的记录存储在同一线性链表中。 定义指针型向量Chain ChainHash[m]; 凡是哈希地址为i的记录都插入到头指针为ChainHash[i]的链表中。 处理冲突的方法 例如: 关键字集合 { 19, 01, 23, 14, 55, 68, 11, 82, 36 } 采用链地址法来构造哈希表。 哈希函数为 H(key)=key MOD 7 ? 11 ? 19 82 68 ? 55 ? 14 ? 01 36 ? 23 ? 19 01 23 14 55 68 11 82 36 0 1 2 3 4 5 6 ASL=(6×1+2×2+3×1)/9=13/9 处理冲突的方法 4. 建立一个公共溢出区 哈希函数的值域[0,m-1] 向量HashTable[0..m-1]为基本表,每个分量存放一个记录 向量OverTable[0..v]为溢出表 对于关键字和基本表HashTable中关键字为同义词的记录,只要发生冲突,都填入溢出表。 哈希表的查找算法 查找过程和造表过程一致。假设采用开放定址处理冲突,则查找过程为: 1.对于给定值 K, 计算哈希地址 i = H(K) 2.若 r[i] = NULL 则查找不成功 3.若 r[i].key = K 则查找成功 4.否则 “求下一地址 Hi” ,直至 r[Hi] = NULL (查找不成功)或 r[Hi].key = K (查找成功) 为止。 哈希表的查找算法 int hashsize[] = { 997, ... }; typedef struct { ElemType *elem; int count; // 当前数据元素个数 int sizeindex; // 为当前容量 } HashTable; #define SUCCESS 1 #define UNSUCCESS 0 #define DUPLICATE -1 //--- 开放定址哈希表的存储结构 ---// 哈希表的查找算法 Status SearchHash (HashTable H, KeyType K, int p, int c) { // 在开放定址哈希表H中查找关键码为K的记录 } // SearchHash p = Hash(K); // 求得哈希地址 while ( H.elem[p].key != NULLKEY !EQ(K, H.elem[p].key)) collision(p, ++c); // 求得下一探查地址 p if (EQ(K, H.elem[p].key)) return SUCCESS; // 查找成功,返回待查数据元素位置 p else return UNSUCCESS; // 查找不成功 哈希表的维护算法 Status InsertHash (HashTable H, Elemtype e){ } // InsertHash c = 0; if ( SearchHash ( H, e.key, p, c ) =

文档评论(0)

177****6330 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档