哈希表

1. 哈希表

(1) 哈希表(散列表,杂凑表)

根据设定的哈希函数和处理冲突的方法,将一组关键字映像到一个有限的连续的地址集上,并以关键字在地址集中的象作为记录在表中的存储位置,这种表称为哈希表,又叫散列表,杂凑表。

(2) 哈希函数

常用除留余数法。H(key) = key MOD p。

(3) 冲突

什么是冲突?H(key1)=H(key2),且key1≠key2,称冲突。

处理冲突的方法:当H(key)处已有记录,出现冲突,如何处理?

1°. 开放定址法

试用H(key)⊕di,常见以下三种。

(1) 线形探测再散列:试用H(key)⊕1,H(key)⊕2,...

(2) 二次探测再散列:试用H(key)⊕12,H(key)⊕-12,H(key)⊕22,H(key)⊕-22,...

(3) 伪随机探测再散列:试用H(key)⊕f(1),H(key)⊕f(2),...

2°. 再哈希法

H1(key)冲突,试用H2(key),H3(key),...

3°. 链地址法

发生冲突的记录链成单链表。

4°. 建立公共溢出区

所有冲突记录存入溢出区。

(4) 装填因子     

n个记录,m个地址空间。

哈希表的平均查找长度与记录个数n不直接相关,而是取决于装填因子和处理冲突的方法。

(5) 例:已知一组关键字{19, 14, 23, 1, 68, 20, 85, 9},采用哈希函数H(key)=key MOD 11,请分别采用以下处理冲突的方法构造哈希表,并求各自的平均查找长度。

1) 采用线性探测再散列;

2) 采用伪随机探测再散列,伪随机函数为f(n) = - n;

3) 采用链地址法。

思路:开始时表为空,依次插入关键字建立哈希表。

1) 线性探测再散列

key         19   14     23     1     68    20     85     9       ß 关键字

H(key)    8      3      1      1      2      9      8      9       ß H(key)

                                      2      3              9      10     ß 冲突时计算下一地址

                                              4              10     0      ß

查找长度     1      1      1      2      3      1      3      3       ß 每个关键字的查找长度

ASL = (1+1+1+2+3+1+3+3)/8 = 15/8

2) 伪随机探测再散列

key         19     14    23     1      68     20    85     9

H(key)     8      3      1      1      2      9      8      9

                                        0                      7      8

                                                                       7

                                                                       6

查找长度             1      1      1      2      1      1      2      4

ASL = (1+1+1+2+1+1+2+4)/8 = 13/8

3) 链地址法

ASL = (1×5+2×3)/8 = 11/8

注:关键字在链表中的插入位置可以在表头或表尾,也可以在中间以便保持关键字有序。

最后,此哈希表的装填因子是α= 8/11。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值