- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 查找 查找的概念 顺序表查找 索引查找 散列查找 性能分析 例:数据元素个数n=80, 哈希表长m=100,关键字为八位十进制数, 其中部分关键字如下:8 1 3 4 6 5 3 28 1 3 7 2 2 4 28 1 3 8 7 4 2 28 1 3 0 1 3 6 78 1 3 2 2 8 1 78 1 3 3 8 9 6 78 1 3 5 4 1 5 78 1 3 6 8 5 3 78 1 4 1 9 3 5 5...① ② ③ ④ ⑤ ⑥ ⑦ ⑧只有④⑤⑥⑦位出现的数字分布均匀,因此可取其中任意两位作为哈希地址。 冲突:不同的关键字若得到同一个散列地址,这种现象称为冲突。 同义词:把具有不同关键字,但具有相同散列地址的元素称为同义词。 桶: 每个散列地址对应的存储空间,一个桶可以是一个单元,存储一个元素,也可以是多个单元,存储多个元素。 冲突一般不可避免,因为关键字的取值范围通常远远大于散列地址的空间。如何尽量避免冲突?发生冲突后如何处理冲突?是散列存储的两个关键问题。与冲突发生可能性大小有关的三个主要因素: (1)装填因子 а = n/mn : Hash表中元素个数m : Hash表地址空间大小а越小,冲突可能性也越小;但是,а越小,空间利用率越低。这是一个矛盾,可根据实际情况取舍。经验证明一般а控制在0.6—0.9之间较好。 (2)与采用的Hash函数有关,尽可能均匀分布。 (3)与解决冲突的方法有关。 二、散列函数的构造方法 对数字关键字可有下列构造方法: 直接定址法 除留余数法 数字分析法 平方取中法 折叠法 若是非数字关键字,则需先对其进行数字化处理。 什么是好的散列函数? 均匀的散列函数:对于关键字集合中的任一关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的。 哈希函数为关键字的线性函数H(key) = key或者H(key) = a ? key + b其中a和b为常数 此法不会发生冲突,但此法仅适合于: 地址集合的大小 = = 关键字集合的大小 实际中能使用这种哈希函数的情况较少。 1. 直接定址法 2. 除留余数法 取关键字被哈希表表长 m 除后所得的余数作为哈希地址。即:H(key) = key MOD m其中, m为散列表表长 关键:对 m 的选择。实践证明 m 为素数比较好。除留余数法计算简单,适用范围广,是最常用的一种方法。 给定一组关键字为: 12, 39, 18, 24, 33, 21, 若取 m=9, 则他们对应的哈希函数值将为: 3, 3, 0, 6, 6, 3 可见,若 m 中含质因子 3, 则所有含质因子 3 的关键字均映射到“3 的倍数”的地址上,从而增加了“冲突”的可能。 例如: 为什么要对 m 加限制? 当关键字为字符串时,需先转换成整数,再应用上述函数。 例如:下列函数先把字符串 K 转换为一个整数 h,再应用除留余数法求散列地址。 int Hash(char *K, int m) {int len = strlen(K);unsigned int h = 0;for ( int i=0; ilen; i++) {h=3; h+=K[i];}return h%m; } 3. 数字分析法假设关键字集合中的每个关键字都是由 s 位数字组成 (u1, u2, …, us),则可分析全体关键字, 并从中提取分布均匀的若干位组成散列地址。此法适用于能预先估计出全体关键字的每一位上各种数字出现的频度的情况。以关键字的平方值的中间几位作为存储地址。求“关键字的平方值” 的目的是“扩大差别” ,同时平方值的中间各位又能受到整个关键字中各位的影响。 此方法适用于:关键字中的每一位都有某些数字重复出现频度很高的现象,即取值不够分散的情况。 4. 平方取中法5. 折叠法 例: 关键字为 :04,哈希地址位数为4 5 8 6 4 4 2 2 0 0 4 1 0 0 8 8 H(key)=0088 移位叠加 5 8 6 4 0 2 2 4 0 4 6 0 9 2 H(key)=6092 间界叠加将关键字分割成位数相同的几段,然后取它们的叠加和为哈希地址。 两种叠加处理的方法: 移位叠加:将分割后的几段低位对齐相加 间界叠加:从一端沿分割界来回折送,然后对齐相加 此法适于:关键字的位数较多,每一位取值又较集中 “处理冲突” 的实际含义是:为产生冲突的记录寻找下一个“空”的哈希地址。 开放定址法 链接法 三、处理冲突的方法 为产生冲突的地址 H(key) 求得一个地址序列:H0
您可能关注的文档
最近下载
- 最新人教版九年级上册数学期中试题(含答案).docx VIP
- 西门子智能照明办公大楼应用.pdf VIP
- 2024北师大版小学数学六年级上册第四单元百分数集体备课教学设计.docx VIP
- 智能照明系统(西门子InstabusKNXEIB系统)专项施工方案.doc VIP
- 乡村物流配送体系完善.pptx
- 智能照明控制方案1843.pdf VIP
- GB15618-2018 土壤环境质量 农用地土壤污染风险管控标准.docx VIP
- 高中地理新老教材比较研究——以人教版教材必修一为例.pdf VIP
- GB 50487-2008 水利水电工程地质勘察规范 (2022年版) .docx VIP
- 街道居民议事会组织与运行规范.pdf VIP
原创力文档


文档评论(0)