网站大量收购闲置独家精品文档,联系QQ:2885784924

(05中文)教案第9章p2相关附件.ppt

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

静态查找表 动态查找表 哈希表 (Hash) 问题引入 9.3.1 哈希表 (Hash) Hash表又称散列表。 Hash函数 为记录存放位置和数据项(关键码)凑一个对应关系。 即:记录的存储位置loc = h(key) 实现立即查找 哈希(Hash)表 C++的保留字 9.3.2 哈希函数的构造方法 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 随机数法 哈希函数 2、数字分析法 5. 除留余数法 设计哈希表中允许的地址数, 取一个接近于所需大小 m 的质数 p, 利用以下公式把关键码转换成哈希地址。哈希函数为: hash ( key ) = key % p 其中, “%”是整数除法取余的运算。 例:有一个关键码 key = 962148,取质数 p= 23。哈希函数 hash ( key ) = key % p。则哈希地址为hash ( 962148 ) = 962148 % 23 = 12。 6、随机数法 哈希(Hash)表 使用哈希方法进行搜索不必进行多次关键码的比较,搜索速度比较快。 哈希函数是一个压缩映象函数。关键码取值范围比哈希表地址集合大得多。因此很可能经过哈希函数的计算,把不同的关键码映射到同一个哈希地址上,这就产生了冲突 (Collision)。 例:一个班的同学有人在同一天过生日的机会是多大? 两个努力方向 既然冲突很难避免。所以对于哈希方法,需要讨论以下两个重要问题: 对于给定的一个关键码集合,选择一个计算简单且地址分布比较均匀的哈希函数,避免或尽量减少冲突; 拟订解决冲突的方案。 开放地址法 若设哈希表中的编址为 0 到 m-1,当要加入一个项 R2时, 用它的关键码 R2.key,通过哈希函数 hash ( R2.key ) 的计算,得到它的存放地址号 j,但是在存放时发现这个位置已经被另一个R1 占据了。这时发生了冲突,必须处理溢出。为此,必须把 R2 存放到表中“下一个”空位中。如果表未被装满,则在允许的范围内必定还有空位。 (1) 线性探查法 (Linear Probing) 需要搜索或加入一个表项时,使用哈希函数计算号: H0 = hash ( key ) 一旦发生冲突,在表中顺次向后寻找“下一个”空 Hi 的公式为: Hi = ( H0 + i ) % m, i =1, 2, …, m-1 亦可写成 Hi = ( Hi-1 +1 ) % m, i =1, 2, …, m-1 线性探查法 例 假设给出一组表项,它们的关键码为 Burke, Ekers, Broad, Blum, Attlee, Alton, Hecht, Ederly。采用的哈希函数是:取其第一个字母在字母表中的位置。 Hash (x) = ord (x) - ord (‘A’) //ord()是求字符内码的函数 这样,可得 Hash (Burke) = 1 Hash (Ekers) = 4 Hash (Broad) = 1 Hash (Hecht) = 7 Hash (Attlee) = 0 Hash (Blum) = 1 又设哈希表为HT[26],m = 26。采用线性探查法处理溢出,则上述关键码在哈希表中哈希位置如图所示。括号内的数字表示找到空位时的比较次数。 又设哈希表为HT[26],m = 26。采用线性探查法处理溢出,则上述关键码在哈希表中哈希位置如图所示。括号内的数字表示找到空位时的比较次数。 又设哈希表为HT[26],m = 26。采用线性探查法处理溢出,则上述关键码在哈希表中哈希位置如图所示。括号内的数字表示找到空位时的比较次数。 又设哈希表为HT[26],m = 26。采用线性探查法处理溢出,则上述关键码在哈希表中哈希位置如图所示。括号内的数字表示找到空位时的比较次数。 当发生冲突时, 探查下一个位置。当循环 m-1次后就会回到开始探查时的位置, 说明待查关键码不在表内, 而且表已满, 不能再插入新关键码。 有聚集现象 (2) 二次探查法 (quadratic probing) 为改善聚集现象,减少为完成搜索所需的平均探查次数,可使用二次探查法。 通过某一个哈希函数对表项的关键码 x 进行计算,得到地址号,它是一个非负整数。 H0 = hash(x) 二次探查法在表中寻找“下一个”空位的公式为: Hi = (H0 ? i 2 ) % m , i = 1, 2, …, (m-1)/2 式中的 m 是表的大小,它应是

文档评论(0)

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

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

1亿VIP精品文档

相关文档