- 1、本文档共53页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HASH应用 找名字 给定一个全部由字符串组成的字典,字符串全部由大写字母构成。其中为每个字符串编写密码,编写的方式是对于 n 位字符串,给定一个 n 位数,大写字母与数字的对应方式按照电话键盘的方式: 2: A,B,C 5: J,K,L 8: T,U,V 3: D,E,F 6: M,N,O 9: W,X,Y,Z 4: G,H,I 7: P,R,S题目给出一个 1--12 位的数,找出在字典中出现且密码是这个数的所有字符串。字典中字符串的个数不超过 5000 。 分析 对于给定的编码,只需要一个回溯的过程,所有可能的原字符串都可以被列举出来,剩下的就是检查这个字符串是否在给定的字典中了。 所以这个问题需要的还是“某个元素是否在已知集合中?”由于给出的“姓名”都是字符串,因此我们可以利用字符的 ASCII 码。 那么,如何设计这个哈希函数呢?注意到题目给出的字典中,最多能有5000 个不同元素,而一个字符的 ASCII 码只能有26 种不同的取值,因此至少需要用在3个位置上的字符(26^3 5000,但是 26^2 5000 ),于是我们就选取3个位置上的字符。由于给定的字符串的长度从 1--12 都有可能,为了容易实现,选取最开始的1个字符和最末尾的2个字符。让这3个字符组成26进制的3位数,则这个数的值就是这个字符串的编码。这样哈希函数就设计出来了! 适用情况: 能预先估计出全部关键码的每一位上各种数字出现的频度,不同的关键码集合需要重新分析。 五、Hash函数的构造方法 散列函数——02、数字分析法 将关键码从左到右分割成位数相等的几部分,将这几部分叠加求和,取后几位作为散列地址。 散列函数——03、折叠法 例:设关键码为2 5 3 4 6 3 5 8 7 0 5,散列地址为三位。 2 5 3 4 6 3 5 8 7 + 0 5 ─── 1 3 0 8 2 5 3 3 6 4 5 8 7 + 5 0 ─── 1 2 5 4 适用情况: 关键码位数很多,事先不知道关键码的分布。 四、Hash函数的构造方法 移位叠加:将分割后的几部分低位对齐相加 对关键码平方后,按散列表大小,取中间的若干位作为散列地址(平方后截取)。 散列函数——1、平方取中法 事先不知道关键码的分布且关键码的位数不是很大。 适用情况: 例:散列地址为2位,则关键码123的散列地址为: (1234)2=1522756 五、Hash函数的构造方法 散列函数为: H(key)=key mod p p=m 表长 散列函数——2、除留余数法 14 7 14 14 7 0 14 散列地址 56 49 42 35 28 21 14 关键码 如何选取合适的 p,产生较少同义词? 例: p =21=3×7 五、Hash函数的构造方法 一般情况下,选p为小于或等于表长(最好接近表长)的最小素数或不包含小于20质因子的合数。 除留余数法是一种最简单、也是最常用的构造散列函数的方法,并且不要求事先知道关键码的分布。 适用情况? 五、Hash函数的构造方法 散列函数——2、除留余数法 设定哈希函数为: H(key) = Random(key) 其中,Random 为伪随机函数 此方法适用于对长度不等的关键字构造哈希函数。 适用情况? 五、Hash函数的构造方法 散列函数——3、随机数法 处理冲突的方法——1、开放定址法 由关键码得到的散列地址一旦产生了冲突,就去寻找下一个空的散列地址,并将记录存入。 如何寻找下一个空的散列地址? (1)线性探测法 (2)二次探测法 (3)随机探测法 六、冲突的处理 线性探测法 当发生冲突时,从冲突位置的下一个位置起,依次寻找空的散列地址。 对于键值key,设H(key)=d,闭散列表的长度为m,则发生冲突时,寻找下一个散列地址的公式为: Hi=(H(key)+di) % m (di=1,2,…,m-1) 用开放定址法处理冲突得到的散列表叫闭散列表。 六、冲突的处理 例:关键码集合为 {47, 7, 29, 11, 16, 92, 22, 8, 3},散列表表长为11,散列函数为H(key)=key mod 11,用线性探测法处理冲突,则散列表为: 0 1 2 3 4 5 6 7 8 9 47 7 29 11 16 92 29 22 22
您可能关注的文档
- 第14章糖分解.ppt
- 煤矿机电运输安全技术答案.ppt
- 大学生如何养成良好的行为习惯分解.ppt
- ps之快速蒙版分解.ppt
- 七年级历史上册_第10课秦王扫六合_人教新课标版试题.ppt
- PTN常见故障处理分解.ppt
- 七年级历史上册《第一课中华大地的远古人类》2北师大版试题.ppt
- 第14章轴zhoucheng分解.ppt
- 第15讲_高速脉冲输出指令分解.ppt
- 第15讲数据的收集与整理分解.ppt
- 中国农业科学院农业资源与农业区划研究所2024年度公开招聘笔试备考题库及答案详解1套.docx
- 中国城市规划设计研究院2025年度公开招聘笔试模拟试题带答案详解.docx
- 2025年银川市公安局面向宁夏警官职业学院招聘285名警务辅助人员笔试模拟试题及完整答案详解1套.docx
- 2025年衢州市公安局第一期招聘54名警务辅助人员笔试模拟试题含答案详解.docx
- 2025年辽宁沈阳理工大学招聘高层次人才142人笔试模拟试题及答案详解1套.docx
- 中国民航科学技术研究院2024年度面向社会公开招聘工作人员笔试模拟试题及答案详解一套.docx
- 中国地质科学院矿产资源研究所2025年度公开招聘工作人员(第一批)笔试模拟试题及参考答案详解一套.docx
- 中国地质科学院地质力学研究所2024年度社会在职人员公开招聘笔试备考题库及答案详解1套.docx
- 中国疾病预防控制中心2024年度公开招聘学校卫生领域学科带头人笔试备考题库参考答案详解.docx
- 中国热带农业科学院南亚热带作物研究所2025年第二批公开招聘工作人员笔试模拟试题及答案详解一套.docx
文档评论(0)