算法小专栏:散列表(二)

栏目: 编程工具 · 发布时间: 5年前

内容简介:描述:为产生冲突的地址增量序列通常有以下3种取法:例如,在长度为11的哈希表中,已填入关键字

描述:为产生冲突的地址 H(key) 求得一个新的地址序列: Hi =(H(key)+ di)% m (i=1,2,3,...,m-1),其中 H(key) 为哈希函数, m 为表长, di 称为增量序列。

增量序列通常有以下3种取法:

  • 线性探测再散列:di = 1,2,3,...,m-1
  • 二次探测再散列:di = 1 2 ,-1 2 ,2 2 ,-2 2 ,3 2 ,-3 2 ,...,k 2 (k<=m/2)
  • 伪随机探测再散列:di = 伪随机数序列

1.2 举例:

例如,在长度为11的哈希表中,已填入关键字 172960 的记录,哈希函数为: H(key) = key % 11

计算:

H(17) = 17 % 11 = 6。故将**关键字“17”

存在下标为6的位置,位置空着,所以存入未冲突。

H(29) = 29 % 11 = 7。故将

关键字“29”

存在下标为7的位置,位置空着,所以存入未冲突。

H(60) = 60 % 11 = 5。故将

关键字“60”**存在下标为5的位置,位置空着,所以存入未冲突。

所以,现在的表的存储状态如下图:

算法小专栏:散列表(二)

这时存入第四个关键字: 38 .

计算:H(38) = 38 % 11 = 5。出现冲突,下标为5的位置已存有60。

  • 方式一:线性探测再散列。

开始尝试逐次追加 di = 1,2,3,...,m-1

得到地址6 => 依然冲突, 得到地址7 => 仍然冲突, 得到地址8 => 不冲突,存入。

最终结果,如下图:

算法小专栏:散列表(二)
  • 方式二:二次探测再散列。

尝试追加 di = 1 2 ,-1 2 ,2 2 ,-2 2 ,3 2 ,-3 2 ,...,k 2 (k<=m/2)

首先,追加1 2 ,地址6仍然冲突。 再,追加-1 2 ,地址4无冲突,可以存入。

最终结果,如下图:

算法小专栏:散列表(二)
  • 方式三:伪随机探测再散列。

假设伪随机数为9,

H(38) = (38+9)%11 = 3。地址3不冲突,存入。

最终结果,如下图:

算法小专栏:散列表(二)

二、链地址法:

2.1 定义:

描述:将所有哈希地址相同的记录都链接在同一 链表 中,以此来解决冲突。

2.2 举例:

已知一组关键字为(19,14,23,01,20,68,84,27,55,11,10,79)。 则按哈希函数 H(key) = key % 13 ,链地址处理冲突如下图:

算法小专栏:散列表(二)

三、再哈希法:

描述:产生冲突时计算**另一个哈希函数(散列函数)**的地址,直到冲突不再发生为止。

优点:这种方法不容易产生聚集。 缺点:增加了计算的时间成本。


以上所述就是小编给大家介绍的《算法小专栏:散列表(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cascading Style Sheets 2.0 Programmer's Reference

Cascading Style Sheets 2.0 Programmer's Reference

Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99

The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具