数据结构第10章 查找.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10.6.2 构造方法 3. 数字分析法 设关键字是r进制数,选取数字在上面出现频率比较均匀的若干位作为散列地址,这种方法适用于已知关键字集合。 5G 10.6.2 构造方法 4. 平方取中法 平方取中法是取关键字平方中间的几位作为散列地址的方法,一个数的平方后的中间几位和原始数据的每一位都有关。因此,平方取中法得到的散列地址同关键字的每一位都有关,使散列地址有较好的分散性。平方取中法适用于关键字每一位取值都不够分散或较分散的位数小于散列地址所需位数的情况。 123452 = 152 399 025 134562 = 181 063 936 10.6.2 构造方法 5. 折叠法 折叠法把关键字分割成几个位数相同的部分,然后将各部分相加,舍弃最高进位后的结果作为散列地址。 叠加法分为移位叠加法和间接叠加法。移位叠加是将分割后的每一部分的最低位对齐,然后相加。间接叠加是从一端向另一端沿分割界来回折叠(奇数段为正序,偶数段为倒序),然后将各段相加。 例如,key=857394859357239。 移位叠加法 index=857+394+859+357+239=2706 舍弃最高位后index=706 间接叠加法 index=857+493+859+753+239=3201 舍弃最高位后index=201。 10.6.3 处理冲突 对于不同的关键字key1,key2,若key1不等于key2,但是Hash(key1)等于Hash(key2)的现象叫作哈希冲突。冲突会使我们的查找效率降低,所以下面我们会介绍两种处理哈希冲突的方法,分别好似开放地址法和链地址法。 10.6.3 处理冲突 1. 开放地址法 (1)线性探查法 设散列函数Hash(key)= key mod(m)(1≤im)m为哈希表长,若发生冲突,则沿着一个探查序列逐个探查,那么,第i次计算冲突的散列地址为: Hi=(Hash(key)+di)mod(m)(1≤im) 其中m表示哈希表长,Hash(key)是哈希函数,Hash(key)=key mod(m)。di为增量序列,增量序列为{1,2,…,m-1}。 10.6.3 处理冲突 例如,现在我们有一个关键码集合为{5,13,34,27,9,23,15}。设哈希表长m=10,哈希函数Hash(key)= key mod(10)。拟用线性探测法处理冲突,建哈希表。 只要哈希表未被填满,保证能找到一个空地址单元存放有冲突的元素。 10.6.3 处理冲突 1. 开放地址法 (2)二次探测法 我们知道线性探测法可能使第i个哈希地址的同义词存入第i+1个哈希地址,这样本应存入第i+1个哈希地址的元素变成了第i+2个哈希地址的同义词。因此可能出现很多元素在相邻的哈希地址上堆积起来,大大降低了查找效率。因为在这里我们引入二次探测法,来改善线性探测法带来的问题。 二次探测法对应的探查地址序列的计算公式为: Hi=(Hash(key)+di)mod(m) 其中Hash(key)为哈希函数,Hash(key)=key mod(m),di=12,-12,22,-22,…,j2,-j2(j≤m/2),m为哈希表长。 10.6.3 处理冲突 例如,现在我们有一个关键码集合为{5,13,34,27,9,23,15}。设哈希表长m=10,哈希函数Hash(key)= key mod(m)。拟用二次探测法处理冲突,构建哈希表。 在集合中,发生哈希冲突的关键字有23,15。 Hash(23)=3,哈希表中下标为3的位置上已经存放过元素,造成哈希冲突。所以有: H1=(Hash(23)+12)mod(10)=4,仍然冲突; H2=(Hash(23)-12)mod(10)= 2,找到空的哈希地址,存入。 Hash(15)=5,哈希冲突,所以有:H1=(Hash(5)+12)mod(10)=6,找到空的哈希地址,存入。 10.6.3 处理冲突 2. 链地址法 将具有相同哈希地址的记录(所有关键码为同义词)链成一个单链表,m个哈希地址就设m个单链表,然后用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构。 10.6.3 处理冲突 2. 链地址法 例如,现在我们有一个关键码集合为{5,13,34,27,9,23,15}。设哈希表长m=10,哈希函数Hash(key)= key mod(m)。拟用链地址法处理冲突,建哈希表。 学 习 进 步! 数据结构(Python语言描述) * * * * * * * 数据结构 (Python语言描述) 李粤平 第10章 查找 查找是数据结构的一种基本操作。查找算法依赖于数据结构,不同的数据结构需要采用不同的查找算法。如何高效获得查找结果,是本章的核心问题。 数据结构(Python语言描述) 查找表 10.1 基本概念 数据

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档