数据结构第的7章查找.ppt

  1. 1、本文档共121页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第的7章查找

* 数据结构讲义 * 1. 开放定址法 开放定址法解决冲突的思想是:由关键码得到的散列地址一旦产生了冲突,也就是说该地址已经存放了数据元素,就按照一个探测序列去寻找下一个空的散列地址空间,只要散列表足够大,空的散列地址总能找到,并将数据元素存入。 用开放定址法解决冲突建立的散列表也叫闭散列表。 闭散列表的存储结构一般采用具有m个数据元素空间的向量。 7.4.3 处理冲突的方法及散列表的构造 散列表的构建和解决冲突的策略是分不开的。通常有三种解决冲突的方法,分别是:开放定址法,拉链法和建立公共溢出区的方法。 * 数据结构讲义 * 形成探测序列的方法有很多种,下面介绍3种: (1) 线性探测法 发生冲突后的探测序列为: Hi=(Hash(key)+di) mod m ( 1≤i m ) 其中: Hash(key)为哈希函数 m为哈希表长度 di 为增量序列 1,2,……,m-1,且di=I Hash(key)+1、Hash(key)+2、… * 数据结构讲义 * 【例7-8】关键码集为:{47,7,29,11,16,92,22,8,3}, 设哈希表表长为11,哈希函数用Hash(key)=key mod 11,用线性探测法处理冲突,构建哈希表。 首先求得各个哈希地址: 关键码 47 7 29 11 16 92 22 8 3 散列地址 3 7 7 0 5 4 0 8 3 * 数据结构讲义 * 0 1 2 3 4 5 6 7 8 9 10 11 22 47 92 16 3 7 29 8 其中22,29,8存入时有冲突,探测下一个地址为空就存入了。 而关键码3是经过3次探测才存入的 Hash(3)=3,哈希地址上冲突; H1=(Hash(3)+1) mod 11=4 仍然冲突; H2=(Hash(3)+2) mod 11=5 仍然冲突; H3=(Hash(3)+3) mod 11=6 找到空的哈希地址,存入。 求其平均查找长度: 对关键码为47、7、11、16、92的查找只需1次比较,对关键码为29、8、22的查找需2次比较,对关键码3的查找需4次比较,故平均查找长度为: WPL=(1×5+2×3+4×1)/8=15/9 * 数据结构讲义 * 堆积问题的产生: 线性探测法可能使第i个哈希地址的同义词存入第i+1个哈希地址。 这样本应存入第i+1个哈希地址的元素变成了第i+2个哈希地址的同义词,……,因此,可能出现很多元素在相邻的哈希地址上“堆积”起来,大大降低了查找效率。 为此,可采用二次探测法,或双哈希函数探测法,以改善“堆积”问题。 * 数据结构讲义 * (2) 二次探测法 发生冲突后的探测序列为: Hi=(Hash(key)±di) mod m di 为增量序列 12,-12,22,-22,……, q2,-q2 【例7-9】用二次探测法处理冲突构建【例7-9】关键码集的哈希表。 * 数据结构讲义 * 0 1 2 3 4 5 6 7 8 9 10 11 22 3 47 92 16 7 29 8 对关键码寻找空的哈希地址只有3这个关键码与上例不同, Hash(3)=3,哈希地址上冲突,由于: H1=(Hash(3)+12) mod 11=4 仍然冲突; H2=(Hash(3)-12) mod 11=2 找到空的哈希地址,存入。 其平均查找长度: 对关键码为47、7、11、16、92的查找只需1次比较,对关键码为29、8、22的查找需2次比较,对关键码3的查找需3次比较,故平均查找长度为: ASL=(1×5+2×3+3×1)/9=14/9 * 数据结构讲义 * (3) 双哈希函数探测法 Hi=(Hash(key)+i*ReHash(key))mod m (i=1,2,……,m-1) 其中:Hash(key),ReHash(key)是两个哈希函数, m为哈希表长度 双哈希函数探测法:先用第一个函数Hash(key)对关键码计算哈希地址,一旦产生地址冲突,再用第二个函数ReHash(key)确定移动的步长因子,最后,通过步长因子序列由探测函数寻找空的哈希地址。 比如,Hash(key)=a时产生地址冲突,就计算ReHash(key)=b,则探测的地址序列为: H1=(a+b) mod m,H2=(a+2b)

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档