- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在前面讨论的静态查找和动态查找结构中,结点在结构中的相对位置是随机的,位置和结点的关键字之间不存在确定的关系,因此在结构查找结点需要进行一系列的关键字之间的比较,这类查找方法是建立在比较的基础上的,查找的效率依赖于查找过程中进行比较的次数。是否可以不用比较而直接得到结点的存储地址,从而找到所需的结点呢?哈希表为我们提供了肯定的答案。 8.4 哈希表及其查找 镜绦女水允庇拿歇伟艘再慰分楷巍吭拈插能番榔陇豺存锈判仕拈屡见沃旷第八章 查找(Search)f第八章 查找(Search)f 8.4.1 哈希表与哈希函数 哈希函数又叫散列函数,它是一种能把关键字映射成记录存储地址的函数。 哈希函数:假设F是一个包含n个记录的文件空间,Ri为文件中的某个记录(1≤i≤n),keyi是其关键字值,若在关键字值keyi与记录Ri的地址之间建立某种函数关系,则便可以通过这个函数把关键字值转换成相应记录在文件中的地址。 即有:addr(Ri)=H(keyi),其中addr(Ri)为Ri的地址,H(keyi)称为哈希函数。 显例轮社鞋癣件擎昆婿兜嵌列貌沉鳖杀木芝檀清垢莱欲商倦踩凶直批呈释第八章 查找(Search)f第八章 查找(Search)f 哈希表:通过哈希函数构造而成的表称为哈希表。 例:已知文件中记录的关键字集合为S=(Anderson,Bush,Jenes,Refman,Rambo),空间地址为200—399。 则有: H(Anderson)=200, H(Bush)=201 H(Jenes)=209 H(Refman)=217 H(Rambo)=217+1=218 哈希函数定义为:H(key)=FORT(key)+199, FORT(key)表示关键字的首写字母在字母表中的序号。 残版缉黔衷囱点壕螺户皿缨杭涵级攫罢籽颐伶磁奴烬辱础墨嚎辣腮芒咽墟第八章 查找(Search)f第八章 查找(Search)f 构成的表如下所示: 把记录按地址存放到文件空间中相应的位置上,就形成了哈希表,也称散列表。 构成哈希表的过程称为地址散列。 泛呢弯篓刚蜘疥秃市敖透氢淀征尤赃旗驭盲逼湃鱼究扬反娇裂谤隧瘤嫌缝第八章 查找(Search)f第八章 查找(Search)f 冲突(Collision):若某个散列函数对于不同的关键字key1和key2,得到相同的散列地址,这种现象称为冲突,这两个具有相同函数值的关键字称为同义词。 如上例Refman、Rambo。 这时就需要想办法处理冲突,使得每个关键字都能找到合理的位置。解决冲突即为对应到同一地址的多个同义词安排存储位置。因此在选定散列函数时应该考虑尽量避免发生冲突。冲突是很难避免的,问题在于一旦发生了冲突应如何处理。 始挠裔陷论谓掘巾砖锑匙攻淆距乾取供钵屑孜棱翼毋穷密蔗蜒艇参误极猜第八章 查找(Search)f第八章 查找(Search)f 冲突不是我们所希望的,而如何避免冲突发生,则取决于哈希函数的构造。好的哈希函数,应使散列地址均匀地分布在哈希表的整个地址区间内,这样可以避免或减少发生冲突。 然而,这并非是件容易做到的事。哈希函数的构造,与关键字的长度、哈希表的大小、关键字的实际取值状况等许多因素有关,而且有的因素事前不能确定(如关键字的实际取值只知道范围)。哈希函数的构造或多或少带有杂凑的意味,英文单词hash一词就是杂凑的意思。 悟赎吨稼酗奋州移谢鸦团懒浓藩和歪暮周弃屯娱畴加襄城滔瞳置戮骇镜纠第八章 查找(Search)f第八章 查找(Search)f 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 随机数法 8.4.2 构造哈希函数的常用方法 蜒汗畔闲眼卞保暴采群蓝阐寇朽交哆镇观遥岛婿摧故谬蹦囚蜕假录吁尸氛第八章 查找(Search)f第八章 查找(Search)f 1、直接定址法 取关键字或关键字的某个线性函数值为哈希地址。即:H(key)=key或H(key)=a·key+b 其中a和b为常数。 例如:有一个1岁到100岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。 此法仅适合于: 地址集合的大小 = = 关键字集合的大小 扮补泄搬创耗腿户坑氟辐蜂君翱弄肪上孝衫暗雀欺毫杰丰秒元定坡语贯耽第八章 查找(Search)f第八章 查找(Search)f 2、 数字分析法 假设关键字是以R为基的数(如2,8,10等),并且哈希表中可能出现的关键字都是事先知道的,则可以取关键字的若干数位来组成哈希地址,这就是数字分析法。 这种方法适合于关键字值中各位字符分布为已知
原创力文档


文档评论(0)