1. 线性探测(Linear Probing)
题目:给定一个哈希表大小
的哈希表,插入一组关键字 [10, 22, 31, 4, 15, 28],并使用线性探测解决冲突。
步骤:
表格:
关键字 k k k | 初始哈希值 h ( k ) = k % 7 h(k) = k \% 7 h(k)=k%7 | 插入位置 |
---|---|---|
10 | 3 | 3 |
22 | 1 | 1 |
31 | 3 | 4(冲突,线性探测到4) |
4 | 4 | 5(冲突,线性探测到5) |
15 | 1 | 2(冲突,线性探测到2) |
28 | 0 | 0 |
初始哈希值
插入位置103322113134(冲突,线性探测到4)445(冲突,线性探测到5)1512(冲突,线性探测到2)2800
表格内容:
题目:假设哈希表大小 (m = 7),插入关键字 [18, 41, 22, 44, 59],使用平方探测解决冲突。
步骤:
寻找插入位置。
表格:
关键字 k k k | 初始哈希值 h ( k ) = k % 7 h(k) = k \% 7 h(k)=k%7 | 探测序列 h i = ( h ( k ) + i 2 ) % 7 h_i = (h(k) + i^2) \% 7 hi=(h(k)+i2)%7 | 插入位置 |
---|---|---|---|
18 | 4 | 4, 5 | 4 |
41 | 6 | 6 | 6 |
22 | 1 | 1 | 1 |
44 | 2 | 2, 3 | 2 |
59 | 3 | 3, 4, 6, 0 | 0 |
初始哈希值
探测序列
插入位置1844, 5441666221114422, 325933, 4, 6, 00
表格内容:
题目:在一个哈希表中,使用哈希函数
和
对关键字 [19, 27, 36, 10] 进行插入,解决冲突时使用双散列。
步骤:
。
并进行双散列探测
表格:
关键字 k k k | 初始哈希值 h 1 ( k ) = k % 7 h_1(k) = k \% 7 h1(k)=k%7 | 第二哈希值 h 2 ( k ) = 1 + ( k % 5 ) h_2(k) = 1 + (k \% 5) h2(k)=1+(k%5) | 插入位置 |
---|---|---|---|
19 | 5 | 5 | 5 |
27 | 6 | 3 | 6 |
36 | 1 | 2 | 1 |
10 | 3 | 1 | 3 |
初始哈希值
第二哈希值
插入位置19555276363612110313
表格内容:
题目:哈希表大小为
,插入关键字 [10, 21, 32, 43, 54],使用分离链接法解决冲突。
步骤:
表格:
桶位置 | 关键字链表 |
---|---|
0 | [10] |
1 | [21] |
2 | [32] |
3 | [43] |
4 | [54] |
表格内容:
题目:给定哈希表大小
,插入关键字 [12, 26, 31, 17, 21, 8],当表的装填因子大于0.7时,进行再散列。
步骤:
表格:
关键字 k k k | 初始哈希值 h ( k ) = k % 5 h(k) = k \% 5 h(k)=k%5 | 插入位置 | 装填因子 |
---|---|---|---|
12 | 2 | 2 | 0.2 |
26 | 1 | 1 | 0.4 |
31 | 1 | 3 | 0.6 |
17 | 2 | 4 | 0.8(再散列) |
21 | 1 | 1(新的哈希表,重新计算位置) | 0.4 |
8 | 3 | 3 | 0.5 |
初始哈希值
插入位置装填因子12220.226110.431130.617240.8(再散列)2111(新的哈希表,重新计算位置)0.48330.5
表格内容:
在处理涉及哈希查找冲突处理方法的题目时,以下是如何解答这些常见问题的步骤和方法:
常见的方法名称:
示例:假设哈希表大小为 7,插入关键字 [10, 22, 31, 4, 15, 28]。
表格:
计算方法:
示例: 假设构造出的哈希表为:
位置 | 关键字 | 查找长度 |
---|---|---|
0 | 28 | 1 |
1 | 15 | 2 |
2 | 22 | 1 |
3 | 10 | 1 |
4 | 31 | 2 |
5 | 4 | 1 |
6 | - | - |
那么成功查找的ASL为:
计算方法:
示例: 假设查找一个不存在的元素,它的查找长度为探测了 3 次才发现空位,另一种情况查找了 4 次才发现空位,那么失败查找的ASL为:
示例: 假设哈希表大小为 7,插入关键字 [10, 22, 31, 4, 15, 28]。计算每个关键字的初始哈希值,并使用线性探测处理冲突。
表格:
关键字 k k k | 初始哈希值 h ( k ) = k % 7 h(k) = k \% 7 h(k)=k%7 | 插入位置 |
---|---|---|
10 | 3 | 3 |
22 | 1 | 1 |
31 | 3 | 4(冲突,线性探测到4) |
4 | 4 | 5(冲突,线性探测到5) |
15 | 1 | 2(冲突,线性探测到2) |
28 | 0 | 0 |
初始哈希值
插入位置103322113134(冲突,线性探测到4)445(冲突,线性探测到5)1512(冲突,线性探测到2)2800
示例: 哈希表大小为 7,插入关键字 [10, 22, 31, 4, 15, 28],并使用链地址法解决冲突。
表格:
位置 | 链表内容 |
---|---|
0 | [28] |
1 | [22, 15] |
2 | - |
3 | [10] |
4 | [31, 4] |
5 | - |
6 | - |
解题时,需要清晰理解每种冲突处理方法的原理,并熟练运用它们进行哈希表的构造和ASL的计算。合理构建表格可以帮助准确表达解题过程。