第三章查找与排序技术.pptVIP

  • 0
  • 0
  • 约7.42千字
  • 约 64页
  • 2025-10-21 发布于广东
  • 举报

有80个记录,关键字为8位十进制数,哈希地址为2位十进制数。8134653281372242813874228130136781322817813389678136853781419355…..…..????????分析:?只取8?只取1?只取3、4?只取2、7、5????数字分布近乎随机所以:取????任意两位或两位与另两位的叠加作哈希地址⑴截段法:选取与关键字对应的数字串中的一段(一般选取低位数)作为关键字的Hash码。*第30页,共64页,星期日,2025年,2月5日举例:关键字为0442205864,哈希地址位数为4586442200410088H(key)=0088移位叠加58640224046092H(key)=6092间界叠加⑵分段叠加法将关键字分割成若干段,然后把它们叠加后再进行截段。两种叠加处理的方法:移位叠加:将分割后的几部分低位对齐相加;间界叠加:从一端沿分割界来回折送,然后对齐相加。*第31页,共64页,星期日,2025年,2月5日⑶除法i=mod(k,n)其中k为关键字,n为Hash表的长度,而mod为求余运算符;当mod(k,n)=0时,取i=n(本节规定)。⑷乘法i=mod(k*φ,n)

φ一般取0.618033988747,或0.6125423371,或0.6161616161。*第32页,共64页,星期日,2025年,2月5日3.2.2几种常用的Hash表1.线性Hash表线性表是一种最简单的Hash表。设线性Hash表的长度为m,则对线性Hash表的查找过程如下:*第33页,共64页,星期日,2025年,2月5日⑴线性Hash表的填入将关键字k及有关信息填入线性Hash表的步骤如下:1)计算关键字k的Hash码i=i(k)。2)检查表中第i项的内容:若第i项为空,则将关键字k及有关信息填入该项;若第i项不空,则令i=mod(i+1,n),转2)继续检查。只要Hash表尚未填满,最终总可以找到一个空项,将关键字k及有关信息填入到Hash表中。线性Hash表的冲突处理。*第34页,共64页,星期日,2025年,2月5日⑵线性Hash表的取出要在线性Hash表中取出关键字k的元素,其步骤如下: 1)计算关键字k的Hash码i=i(k)。 2)检查表中第i项的内容:若第i项登记着关键字k,则取出该项元素即可;若第i项为空,则表示在Hash表中没有该关键字的信息;若第i项不空,且登记的不是关键字k,则令i=mod(i+1,n)转2)继续检查。*第35页,共64页,星期日,2025年,2月5日例3.3将关键字序列(09,31,26,19,01,13,02,11,27,16,05,21)依次填入长度为n=12的线性Hash表中。设Hash码为i=INT(k/3)+1。表3.2线性Hash表*第36页,共64页,星期日,2025年,2月5日分析线性表的优点:简单。线性Hash表的缺点:⑴在线性Hash表填入的过程中,当发生冲突时,首先考虑的是下一项,因此,当Hash码的冲突较多时,在线性Hash表中会存在“堆聚”现象,即许多关键字被连续登记在一起,从而会降低查找效率。⑵在线性Hash表的填入过程中,处理冲突时会带来新的冲突。线性Hash表的填入方法是不顾后效的。*第37页,共64页,星期日,2025年,2月5日在Hash表填入过程中不顾后效,从而在填入过程中其冲突的机会在不断增多;当Hash表填满时,不能正常地进行查找。解决方法:将冲突的元素安排在另外的空间内,而不占用Hash表本身的空间,则就不会产生新的冲突。*第38页,共64页,星期日,2025年,2月5日3.溢出Hash表溢出Hash表包括Hash表和溢出表两部分。在Hash表的填入过程中,将冲突的元素顺序填入溢出表,而当查找过程中发现冲突时,就在溢出表中进行顺序查找。溢出表是一个顺序查找表。*第39页,共64页,星期日,2025年,2月5日溢出Hash表的填入将关键字k及有关信息填入溢出Hash表的步骤如下

文档评论(0)

1亿VIP精品文档

相关文档