2、设散列表的长度为8,散列函数H(k)=k mod 7,初始记录关键字序列为(25,31,8,37,13,40),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。
时间: 2024-03-31 12:36:17 浏览: 296
首先,根据散列函数H(k)=k mod 7,可以得到关键字的散列地址如下:
25 -> 4
31 -> 3
8 -> 1
37 -> 2
13 -> 6
40 -> 5
1. 线性探测法:
用线性探测法解决冲突时,如果发生冲突,就顺序往后查找空闲位置,直到找到一个空闲位置为止。因此,对于每个插入的关键字,需要计算出它的探测序列,即依次查找的位置序列,直到找到该关键字或一个空闲位置为止。插入时,如果探测序列长度超过散列表长度,则认为插入失败。下面是每个关键字的探测序列:
25 -> 4
31 -> 3, 4, 5, 6, 0, 1
8 -> 1
37 -> 2
13 -> 6, 0, 1, 2, 3
40 -> 5, 6, 0, 1, 2
根据探测序列,可以得到每个关键字的平均查找长度,即查找次数除以插入的关键字数。这里,插入的关键字数为6。计算结果如下:
ASL = (1 + (1+4+1) + 1 + 1 + (1+4+1+1+1)/5 + (1+4+1+1+1)/5) / 6 = 2.17
因此,用线性探测法作为解决冲突方法的平均查找长度为2.17。
2. 链地址法:
用链地址法解决冲突时,将散列到同一个地址的关键字存储在一个链表中,每个链表的头节点存储在散列表对应的地址中。因此,对于每个插入的关键字,需要将它插入到对应链表的末尾。下面是每个地址对应链表的情况:
0 -> NULL
1 -> 8 -> NULL
2 -> 37 -> NULL
3 -> 31 -> NULL
4 -> 25 -> NULL
5 -> 40 -> NULL
6 -> 13 -> NULL
根据链表长度,可以得到每个地址的平均查找长度,即链表长度除以插入到该链表中的关键字数。这里,插入的关键字数为6。计算结果如下:
ASL = ((0+1+1+1+1+1)/6 + (0+1)/2 + (0+1)/2 + (0+1)/2 + (0+1)/2 + (0+1)/2 + (0+1)/2) / 6 = 0.5
因此,用链地址法作为解决冲突方法的平均查找长度为0.5。
综上所述,用链地址法的平均查找长度更小,因此更适合解决该问题。
阅读全文