哈希表技术沈磊137651536_第1页
哈希表技术沈磊137651536_第2页
哈希表技术沈磊137651536_第3页
哈希表技术沈磊137651536_第4页
哈希表技术沈磊137651536_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3.2 哈希表技术哈希表技术137651536沈磊3.2.1 Hash表的基本概念表的基本概念1. 直接查找直接查找表表 设表的长度为n。如果存在一个函数ii(k),对于表中的任意一个元素的关键字k,满足以下条件:(1)1in;(2)对于任意的元素关键字k1k2,恒存在i(k1)i(k2)。 则称此表为直接查找表。其中函数ii(k)称为关键字k的映象函数。(1)直接查找表的填入要将关键字为k的元素填入到直接查找表,只需做以下两步:1)计算关键字k的映象函数ii(k);2)将关键字k及有关元素信息填入到表的第i项。(2) 直接查找表的取出要在直接查找表中取出关键字k的元素,也只需做以下两步:1)

2、计算关键字k的映象函数ii(k);2)检查表中第i项:若第i项为空,则说明表中没有关键字为k的元素;否则取出第i项中的元素即可。2. Hash表表例 将关键字序列(09,31,26,19,01,13,02,11,27,16,05,21)依次填入长度为n12的表中。映象函数为iINT(k/3)1。设表的长度为n。如果存在一个函数ii(k),对于表中的任意一个元素的关键字k,满足1in,则称此表为Hash表。 其 中 函 数 i i ( k ) 称 为 关 键 字 k 的 H a s h 码 。(1)构造合适的Hash码,以便尽量减少表中元素冲突的次 数 。 即 H a s h 码 的 均 匀 性

3、 要 比 较 好 。(2)当表中元素发生冲突时,要进行适当的处理。3.2.2 几种常用的几种常用的Hash表表1. 线性线性Hash表表1)线性Hash表的填入将关键字k及有关信息填入线性Hash表的步骤如下:1)计算关键字k的Hash码ii(k)。2)检查表中第i项的内容:若第i项为空,则将关键字k及有关信息填入该项;若第i项不空,则令imod(i1,n),转2)继续检查。只要Hash表尚未填满,最终总可以找到一个空项,将关键字k及有关信息填入到Hash表中。2) 线性Hash表的取出要在线性Hash表中取出关键字k的元素,其步骤如下:1)计算关键字k的Hash码ii(k)。2)检查表中第i

4、项的内容:若第i项登记着关键字k,则取出该项元素即可;若第i项为空,则表示在Hash表中没有该关键字的信息;若 第 i 项 不 空 , 且 登 记 的 不 是 关 键 字 k , 则 令 i m o d ( i 1 , n ) , 转 而 继 续 检 查 。 例将关键字序列(09,31,26,19,01,13,02,11,27,16,05,21)依次填入长度为n12的线性Hash表中。设 H a s h 码 为 i I N T ( k / 3 ) 1 。缺点:1)在线性Hash表填入的过程中,当发生冲突时,首先考虑 的是下一项,因此,当当HashHash码的冲突较多时,在线性码的冲突较多时,在

5、线性 HashHash表中会存在表中会存在“堆聚堆聚”现象,即许多关键字被连续登记现象,即许多关键字被连续登记 在一起,从而会降低查找效率在一起,从而会降低查找效率。2)在线性Hash表的填入过程中,处理冲突时会带来新的处理冲突时会带来新的冲突冲突。2. 随机随机Hash表表(当哈希表的长度设置成(当哈希表的长度设置成 )1) 随机Hash表的填入将关键字k及有关信息填入随机Hash表的步骤如下:1)计算关键字k的Hash码i0i(k)。且令ii0。2)伪随机数序列初始化,令j1(即将取随机数指针指向伪 随机数序列中的第1个随机数)。3)检查表中第i项的内容:若第i项为空,则将关键字k及有关信

6、息填入该项;若第i项不空,则令imod(i0RN(j),n),并令jj1 (即将取随机数指针指向下一个随机数),转3)继续检查。其中RN(j)表示伪随机数序列RN中的第j个随机数。伪 随 机 数 序 列 R N 按 下 列 方 法 产 生 : R1 FOR j1 TO n DO Rmod(5*R,4n) RN(j)INT(R/4) 2) 随机Hash表的取出要在随机Hash表中取出关键字k的元素,其步骤如下:1)计算关键字k的Hash码i0i(k)。且令ii0。2)伪随机数序列初始化,令j1(即将取随机数指针指向伪 随机数序列中的第1个随机数)。3)检查表中第i项的内容:若第i项登记着关键字k

7、,则取出该项元素即可;若第i项空,则表示在Hash表中没有该关键字信息;若 第 i 项 不 空 , 且 登 记 的 不 是 关 键 字 k , 则 令imod(i0RN(j),n),并令jj1(即将取随机数指 针指向下一个随机数),转3)继续检查。其中RN(j)表示伪随机数序列RN中的第j个随机数。3. 溢出溢出Hash表表溢出溢出Hash表包括表包括Hash表和溢出表两部分。表和溢出表两部分。在在Hash表的填入过程中,将冲突的元素顺序填入溢出表表的填入过程中,将冲突的元素顺序填入溢出表,而当查找过程中发现冲突时,就在溢出表中进行顺序查,而当查找过程中发现冲突时,就在溢出表中进行顺序查找。找

8、。溢出表是一个顺序查找表。溢出表是一个顺序查找表。1) 溢出Hash表的填入将关键字k及有关信息填入溢出Hash表的步骤如下:1)计算关键字k的Hash码ii(k)。2)检查表中第i项的内容:若第i项为空,则将关键字k及有关信息填入该项;若第i项不空,则将关键字k及有关信息依次填入 溢出表中的自由项。2) 溢出Hash表的取出要在溢出Hash表中取出关键字k的元素,其步骤如下:1)计算关键字k的Hash码ii(k)。2)检查表中第i项的内容:若第i项登记着关键字k,则取出该项元素即可;若第i项为空,则表示在Hash表中没有该关键字信息;若第i项不空,且登记的不是关键字k,则转入在 溢出表中进行

9、顺序查找。例将关键字序列(09,31,26,19,01,13,02,11,27,16,05,21)依次填入长度为n12的溢出Hash表中。设Hash码为iINT(k/3)1。4. 拉链拉链Hash表表拉链拉链Hash表又分为外链表又分为外链Hash表与内链表与内链Hash表。表。 这里主要讲外链这里主要讲外链Hash 表。表。1) 外链Hash表的填入将关键字k及有关信息填入外链Hash表的步骤如下:1)计算关键字k的Hash码ii(k)。2)取得一个新结点p,并将关键字k及有关信息填入结点p。3)将结点p链入以H(i)为头指针的链表的链头。例将关键字序列(09,31,26,19,01,13,02,11,27,16,05,21)依次填入长度为n12的外链Hash表中。设Hash码为iINT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论