《数据结构(C#语言描述)》第08章哈希表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Company LOGO 第8章 哈希表 《数据结构(C#语言描述)》配套PPT 引入 《数据结构(C#语言描述)》配套PPT 在C#的万物之母object对象中定义了一个虚方法GetHashCode(),这个方法用于获取对象的哈希码。什么是哈希码?它有什么作用?为什么要在如此重要的类中定义这个方法?哈希码跟哈希表有什么内在的联系吗?本章将对这些问题展开论述。。 8.1 概念引入 《数据结构(C#语言描述)》配套PPT 【例8-1 Demo8-1.cs】使用学号查找学生地址 【例8-2 Demo8-2.cs】哈希查找 地址(Address) 0 学号(StuNum) 索引 200809001 广西南宁 200809002 广西南宁 200809003 北京 200809004 上海 200809005 广东深圳 1 2 3 4 8.2 构造哈希函数的方法 《数据结构(C#语言描述)》配套PPT 构造哈希函数的目标是使哈希地址尽可能均匀地分布在连续的内存单元地址上,以减少冲突发生的可能性,同时使计算尽可能简单以达到尽可能高的时间效率。根据关键字的结构和分布不同,可构造出与之适应的各不相同的哈希函数。这里主要讨论几种常用的整数类型关键字的哈希函数构造方法。 8.2 构造哈希函数的方法 《数据结构(C#语言描述)》配套PPT 8.2.1 直接定址法 直接定址法取关键字或关键字的某个线性函数为哈希地址。即: h(key) = key 或 h(key) = a * key + b 其中a、b为常数,调整a与b的值可以使哈希地址取值范围与存储空间范围一致。这种哈希函数计算简单,并且不会有冲突发生。它适合于关键字的分布基本连续的情况,若关键字分布不连续,将造成存储空间的大量浪费。 8.2 构造哈希函数的方法 《数据结构(C#语言描述)》配套PPT 8.2.2 数字分析法 该方法是提取关键字中随机性较好的数字位,然后把这些数位拼接起来作为哈希地址。它适合于所有关键字值都已知的情况,并需要对关键字中每位的取值分布情况进行分析。 位 6 1 3 1 7 6 3 2 6 2 3 2 6 8 7 5 6 2 3 4 3 6 3 4 6 2 7 0 6 6 1 6 6 1 7 7 4 6 3 8 6 1 3 8 1 2 6 1 6 1 3 9 4 2 2 0 ⑧ ⑦ ⑥ ⑤ ④ ③ ② ① 提取结果 12 25 44 6 78 81 90 8.2 构造哈希函数的方法 《数据结构(C#语言描述)》配套PPT 8.2.3 除留余数法 除留余数法采用取模运算(%),把关键字除以某个不大于哈希表表长的整数得到的余数作为哈希地址。哈希函数的形式为: h(key) = key % p 除留余数法的关键是选好p,使得记录集合中的每个关键字通过该孩子数转换后映射到哈希表范围内任意地址上的概率相等,从而尽可能减少发生冲突的可能性。 507683的二进制 1111011111100100011 507683%25相当于取低5位二进制数 8.3 哈希冲突解决方法 《数据结构(C#语言描述)》配套PPT 哈希函数的目标是尽量减少冲突,但实际应用中冲突是无法避免的,所以在冲突发生时,必须有相应的解决方案。而发生冲突的可能性又跟以下两个因素有关: 装填因子α 所采用的哈希函数 8.3 哈希冲突解决方法 《数据结构(C#语言描述)》配套PPT 冲突解决技术可分为两大类:开散列法(又称为链地址法)和闭散列法(又称为开放地址法)。哈希表是用数组实现的一片连续的地址空间,两种冲突解决技术的区别在于发生冲突的元素是存储在这片数组的空间之外还是空间之内 8.3 哈希冲突解决方法 《数据结构(C#语言描述)》配套PPT 8.3.1 闭散列法(开放地址法) 闭散列法是把所有的元素存储在哈希表数组中。当发生冲突时,在冲突位置的附近寻找可存放记录的空单元。寻找“下一个”空位的过程称为探测。上述方法可用如下公式表示: hi = (h(key) + di) % m 其中 i = 1,2,…,k (k ≤ m - 1) 其中h(key)为哈希函数;m为哈希表长;di为增量的序列。根据di取值的不同,可以分成几种探测方法, 8.3 哈希冲突解决方法 《数据结构(C#语言描述)》配套PPT 8.3.1 闭散列法(开放地址法) 线性探测法 1 线性

文档评论(0)

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

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

1亿VIP精品文档

相关文档