假定一个待哈希存储的线性表为(32,75,29,63,48,94,25,36,18,70,49,80),哈希地址空间为HT[12],若采用除留余数法构造哈希函数和拉链法处理冲突,试画出最后得到的哈希表,并求出平均查找长度。
时间: 2023-09-06 13:13:09 浏览: 604
假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数采用除留余数法构造,用线性探测再散列法处理冲突。
首先,我们需要构造哈希函数。采用除留余数法,一般的哈希函数为:h(key) = key mod p,其中p为小于哈希地址空间大小的最大质数。在本题中,哈希地址空间为HT[12],所以p可以取11。
对于给定的线性表,我们可以得到以下哈希地址:
- h(32) = 32 mod 11 = 10
- h(75) = 75 mod 11 = 9
- h(29) = 29 mod 11 = 7
- h(63) = 63 mod 11 = 8
- h(48) = 48 mod 11 = 4
- h(94) = 94 mod 11 = 5
- h(25) = 25 mod 11 = 3
- h(36) = 36 mod 11 = 3
- h(18) = 18 mod 11 = 7
- h(70) = 70 mod 11 = 5
- h(49) = 49 mod 11 = 5
- h(80) = 80 mod 11 = 3
接下来,我们需要使用拉链法解决冲突。具体来说,对于哈希地址相同的元素,我们将它们存储在同一个链表中。因此,最终得到的哈希表如下:
| HT[0] | HT[1] | HT[2] | HT[3] | HT[4] | HT[5] | HT[6] | HT[7] | HT[8] | HT[9] | HT[10] | HT[11] |
| ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ------ | ------ |
| | | | 36 -> 25 -> 80 | 48 | 94 -> 70 -> 49 | 29 -> 18 | 63 | 75 | 32 | | |
最后,我们需要求出平均查找长度。平均查找长度的公式为:ASL = (Σni^2) / n,其中ni表示链表i的长度,n表示元素个数。在本题中,元素个数为12,每个链表的长度如下:
- 链表0:0
- 链表1:0
- 链表2:0
- 链表3:2
- 链表4:1
- 链表5:3
- 链表6:2
- 链表7:1
- 链表8:1
- 链表9:1
- 链表10:0
- 链表11:0
根据公式,我们可以得到平均查找长度为:
ASL = (0^2 + 0^2 + 0^2 + 2^2 + 1^2 + 3^2 + 2^2 + 1^2 + 1^2 + 1^2 + 0^2 + 0^2) / 12 ≈ 1.58
因此,最终的平均查找长度为1.58。
阅读全文