建立{15,73,59,42,53,89,45,30,28,87,76}的哈希表A[0..12],哈希函数为:H(k)=key%p,并采用线性探查法解决冲突。选择恰当的素数p,从头向尾把关键字代表的记录插入到A中。 要求:①画出哈希表的示意图; ② 假定每个关键字的查找概率相等,求查找成功时的ASL值。
时间: 2024-03-04 16:54:17 浏览: 82
首先,我们需要选择一个适当的素数p,使得p比哈希表的大小(12)稍大一点。为了方便,我们选择p=13。
接下来,我们可以使用哈希函数H(k)=key%p来将每个关键字k映射到哈希表A中的一个位置。如果该位置已经被占用,则使用线性探查法来解决冲突,即从该位置开始向后查找,直到找到一个空位置或者找到关键字k为止。
按照这个方法,我们可以将所有的关键字插入到哈希表A中:
A[0]=15
A[1]=59
A[2]=30
A[3]=42
A[4]=53
A[5]=45
A[6]=76
A[7]=28
A[8]=89
A[9]=87
A[10]=73
下面是哈希表的示意图:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |
|15 |59 |30 |42 |53 |45 |76 |28 |89 |87 |73 | | |
假设每个关键字的查找概率相等,那么查找成功时的ASL值可以通过以下公式计算:
ASL = (1/n) * Σ(di+1),其中n为关键字的个数,di为查找成功时关键字所在位置与查找位置之间的距离。
在这个例子中,n=11,我们可以尝试查找每个关键字,并计算出它们的ASL值:
关键字 | 查找位置 | 关键字位置 | di | di+1 |
-------|--------|--------|-----|------|
15 | 0 | 0 | 0 | 1 |
73 | 10 | 10 | 0 | 1 |
59 | 1 | 1 | 0 | 1 |
42 | 3 | 3 | 0 | 1 |
53 | 4 | 4 | 0 | 1 |
89 | 8 | 8 | 0 | 1 |
45 | 5 | 5 | 0 | 1 |
30 | 2 | 2 | 0 | 1 |
28 | 7 | 7 | 0 | 1 |
87 | 9 | 9 | 0 | 1 |
76 | 6 | 6 | 0 | 1 |
根据公式,ASL = (1/11) * (1+1+1+1+1+1+1+1+1+1+1) = 1,因此查找成功时的平均查找长度为1。
阅读全文