- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数结_8查找j2
§9.3哈希表(散列表) hash 9.3.1哈希表的概念 一种基于计算的存储技术和查找技术: Address(Ri)=H(Ri.key) 其中函数H( )称为哈希函数; 建查找表时,每个元素按哈希函数算出的地址H(Ri.key) 去存放; 检索时按H(K)算出地址,找目标元素 。 哈希表 哈希表的存储结构: 用一维数组HT[ m ]存放n个元素: 0 1 2 3 m-1 n:表长 m:哈希表的容量(mn), 哈希地址空间:0 .. m-1 ?=n/m 1:装填因子,一般取为0.65~0.9 装填因子反映了哈希表的装满程度,是影响哈希表查找性能的重要参数 。 哈希表 哈希表要解决的两个问题: 1. 哈希函数H( )的构造: 要求: (1) 值域是(0, m-1) (2) 计算简单 (3) 函数值尽量分布均匀,以减少同义词 2. 解决冲突问题: 冲突:H(K1)==H(K2), 且K1?K2 不同的记录争夺同一个哈希地址; K1与K2称为同义词 哈希表 9.3.1 哈希函数的构造 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 随机数法 哈希表· 哈希函数的构造 一、直接定址法 用关键字的线性函数作为哈希函数: H(k)= a×k+b a,b----常数 例如 :学生档案,地址空间: 000..999 H(k)=k 哈希地址 000 001 002 ... ... 学号98015002... ... 姓名 王平 李凯 田爱玲 ... ... ... ... ... ... 特点:一般不会发生冲突,但适用面比较窄 哈希表· 哈希函数的构造 二、数字选择法 可能出现的关键字都是已知的。 提取关键字的若干位组合成哈希地址 8 1 3 4 6 5 3 2 3 4 5 8 1 3 7 2 2 4 2 4 7 2 8 1 3 8 7 4 2 2 2 8 4 8 1 3 0 1 3 6 7 6 0 3 8 1 3 2 2 8 1 7 1 2 8 8 1 3 3 8 9 6 7 6 3 9 8 1 3 5 4 1 5 7 5 5 1 8 1 3 6 8 5 3 7 3 6 5 8 1 4 1 9 3 5 5 5 1 3 ? ? ? ? ? ? ? ? 哈希地址 2 3 1 三、平方取中法 对数字选择法的改进 将关键字平方后取中间的几位作为哈希地址,这样中间的几位与关键字的每一位都相关。 关键字 (关键字)2 哈希地址 0100 0010000 100 0110 0012100 121 1010 1020100 201 1001 1002001 020 0111 0012321 123 四、折叠法 适合于长关键字 K=5 8 2 4 2 3 2 4 1 6 9 582 423 241 + 69 1315 H(k)=315 位移叠加: 582 324 241 + 96 1243 H(k)=243 间界叠加: 五、除留余数法 最简单,最常用 H(K) = K mod p (p≤m) 除数p的选择不当将会导致很多同义词出现 当m较小时,取p为小于m的最大质数 当m较大时,取p为质因子不小于20的合数 六、随机数法 选一个随机函数,取关键字的随机函数值作为哈希地址 H(K) = random(K) 一般当关键字长短不一时采用 9.3.2 处理冲突的方法 开放定址法 拉链法 再哈希法 建公共溢出区法 思路:设在哈希值H0=H(Ri.key)上发生了冲突,我们要为Ri另找一个空闲的地址存放,不妨找一个地址序列: H1,H2,... ,Hk ( Hi? 0..m-1) 一个接一个地探测,直到找到不冲突的地址 一、开放定址法 “开放”----哈希地址为h的单元不仅向哈希函数值等于h的同义词开放,而且向哈希函数值不等于h的记录开放。以“抢占”的方式争取哈希地址。 探测序列: Hi=( H(key) + di ) mod m i=1, 2, ..., k 线性探测法:di=1,2,3,...,k 二次探测法:di=12,-12,22,-22,...
文档评论(0)