第 42 题
将关键字20,3,11,18,9,14,7依次存储到长度为11的散列表HT中,散列函数为H(key)=(key×3)%11,H0为初始散列地址,H1、H2、H3、⋯、Hk分别为第1次冲突、第2次冲突、第3次冲突、⋯、第k次冲突时探测的地址。Hk =(H0 +k2)%11。请回答下列问题:
(1) 画出所构造的HT。并计算HT的域装因子(6 分)
(2) 给出在HT中查找关键字 14 的关键字比较序列(2 分)
(3) 在HT中查找关键字 8,确认查找失败时的散列地址是多少?(2 分)
[tag_link]
1)散列表 HT 如下:
| 散列地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 关键字 | 11 | 14 | 7 | 20 | 9 | 3 | 18 | ||||||
| 冲突次数 | 1 | 3 | 2 | 1 | 2 | 1 | 1 | ||||||
| 装填因子等于散列表中已经被填充的位置的数量除以散列表的总长度,因此本题的填装因子是 7/11。 |
2)查找关键字 14 的比较序列:
- 首先,我们计算 14 的散列地址:H(14)=(14×3)%11=42%11=9。
- 我们查看散列表中索引为 9 的位置,发现哪里存储的是关键字 3,此时产生哈希冲突。
- 由于我们使用的是二次探查,所以计算下一个散列地址:H1 =(H0 +11)%11=(9+1)%11=10。发现那哪里存储的是关键字 18,再次遇到哈希冲突。
- 继续计算下一个散列地址:H2 =(H0 +22)%11=(9+4)%11=2,找到关键字 14,
3)查找关键字 8 失败时的哈希地址
- 计算 8 的散列地址:H(8)=(8×3)%11=24%11=2,索引为 2 的位置发现关键字 18,遇到冲突。
- 使用二次探查,计算下一个散列地址:H1 =(H0 +11)%11=(2+1)%11=3。索引为 3 的位置存储的是关键字 7,遇到冲突。
- 我们继续使用一次探查,计算下一个散列地址:H2 =(H0 +22)%11=(2+4)%11=6,索引为 6 的位置存储的是关键字 9,遇到冲突。
- 我们继续使用二次探查,计算下一个散列地址:H3 =(H0 +32)%11=(2+9)%11=0。索引为 0 的位置存储的是关键字 11,遇到冲突。
- 我们继续使用二次探查,计算下一个散列地址:H4 =(H0 +42)%11=(2+16)%11=7,发现索引为 7 的位置是空的,确认查找失败,散列地址是 7。