给定散列表大小为11,散列函数为h(key)=key%11。按照线性探测冲突解决策略连续插入散列值相同的5个元素。问:此时该散列表的平均不成功查找次数是多少? 
时间: 2023-04-26 19:03:10 浏览: 141
根据线性探测冲突解决策略,当插入一个元素时,如果该元素的散列值已经被占用,则向后探测直到找到一个空位置插入。因此,插入5个散列值相同的元素时,它们会被依次插入到散列表的位置0、1、2、3、4上。
当进行查找时,如果要查找的元素在散列表中不存在,则需要依次查找位置0、1、2、3、4,直到找到一个空位置或者找到要查找的元素。因此,平均不成功查找次数为(0+1+2+3+4)/5=2.
因此,该散列表的平均不成功查找次数为2。
相关问题
10.设散列函数为h(key)=key%101,解决冲突的方法为线性探测,表中用"-1"表示空单元。
可以回答这个问题。对于给定的关键字key,散列函数h(key)=key%10,解决冲突的方法为线性探测。如果发生冲突,就在散列表中往后查找,直到找到一个空单元或者查找到整个散列表。如果查找到整个散列表,就说明散列表已满,无法再插入新的元素。
现有长度为 11 且初始为空的散列表 ht,散列函数是 h(key)=key%7,采用线性探查(线性探测再散列)法解决冲突。将关键字序列 87,40,30,6,11,22,98,20 依次插入到 ht 后,ht 查找失败的平均查找长度是:
根据线性探查法,当发生冲突时,会依次往后查找空闲位置,直到找到空闲位置或者查找到整个散列表。因此,插入的顺序会影响散列表的填充情况,从而影响查找的效率。
根据给定的散列函数 h(key)=key%7,将关键字序列依次插入到散列表 ht 中,得到如下填充情况:
ht[6] = 87
ht[5] = 40
ht[2] = 30
ht[6] 已经被占用,因此线性探查到下一个位置 ht[]
ht[] = 6
ht[4] = 11
ht[1] = 22
ht[] 已经被占用,因此线性探查到下一个位置 ht[1]
ht[1] 已经被占用,因此线性探查到下一个位置 ht[2]
ht[3] = 98
ht[6] 已经被占用,因此线性探查到下一个位置 ht[3]
ht[3] 已经被占用,因此线性探查到下一个位置 ht[4]
ht[4] 已经被占用,因此线性探查到下一个位置 ht[5]
ht[5] 已经被占用,因此线性探查到下一个位置 ht[6]
ht[] 已经被占用,因此线性探查到下一个位置 ht[1]
ht[1] 已经被占用,因此线性探查到下一个位置 ht[2]
ht[2] 已经被占用,因此线性探查到下一个位置 ht[3]
ht[3] 已经被占用,因此线性探查到下一个位置 ht[4]
ht[4] 已经被占用,因此线性探查到下一个位置 ht[5]
ht[5] 已经被占用,因此线性探查到下一个位置 ht[6]
ht[6] 已经被占用,因此线性探查到下一个位置 ht[]
ht[] 已经被占用,因此线性探查到下一个位置 ht[1]
ht[1] 已经被占用,因此线性探查到下一个位置 ht[2]
ht[2] 已经被占用,因此线性探查到下一个位置 ht[3]
ht[3] 已经被占用,因此线性探查到下一个位置 ht[4]
ht[4] 已经被占用,因此线性探查到下一个位置 ht[5]
ht[5] 已经被占用,因此线性探查到下一个位置 ht[6]
ht[6] 已经被占用,因此线性探查到下一个位置 ht[]
ht[] 已经被占用,因此线性探查到下一个位置 ht[1]
ht[1] 已经被占用,因此线性探查到下一个位置 ht[2]
ht[2] 已经被占用,因此线性探查到下一个位置 ht[3]
ht[3] 已经被占用,因此线性探查到下一个位置 ht[4]
ht[4] 已经被占用,因此线性探查到下一个位置 ht[5]
ht[5] 已经被占用,因此线性探查到下一个位置 ht[6]
ht[6] 已经被占用,因此线性探查到下一个位置 ht[]
ht[] 已经被占用,因此线性探查到下一个位置 ht[1]
ht[1] 已经被占用,因此线性探查到下一个位置 ht[2]
ht[2] 已经被占用,因此线性探查到下一个位置 ht[3]
ht[3] 已经被占用,因此线性探查到下一个位置 ht[4]
ht[4] 已经被占用,因此线性探查到下一个位置 ht[5]
ht[5] 已经被占用,因此线性探查到下一个位置 ht[6]
ht[6] 已经被占用,因此线性探查到下一个位置 ht[]
ht[] 已经被占用,因此线性探查到下一个位置 ht[1]
ht[1] 已经被占用,因此线性探查到下一个位置 ht[2]
ht[2] 已经被占用,因此线性探查到下一个位置 ht[3]
ht[3] 已经被占用,因此线性探查到下一个位置 ht[4]
ht[4] 已经被占用,因此线性探查到下一个位置 ht[5]
ht[5] 已经被占用,因此线性探查到下一个位置 ht[6]
最终的散列表 ht 如下:
ht[] = 6
ht[1] = 22
ht[2] = 30
ht[3] = 98
ht[4] = 11
ht[5] = 40
ht[6] = 87
平均查找长度 = 所有查找失败的情况下,查找次数的总和 / 查找失败的次数
对于给定的关键字序列,查找失败的情况有两种:
1. 要查找的关键字不在散列表中,需要查找整个散列表,查找次数为散列表的长度 11。
2. 要查找的关键字在散列表中,但是被其他关键字占用了位置,需要依次查找下一个位置,直到找到空闲位置或者查找到整个散列表。假设散列表中已经填充了 k 个关键字,则查找次数的期望为 (1/2) * (1 + 1/2 + ... + 1/(k+1)),其中 1/2 是因为每次查找有一半的概率需要继续查找下一个位置,1/(k+1) 是因为最多需要查找 k+1 个位置才能找到空闲位置。根据等差数列求和公式,可以得到 (1/2) * (1 + 1/2 + ... + 1/(k+1)) = (k+3)/(2*(k+1))。
因此,平均查找长度 = (11 + (1/2)*(4/3 + 5/4 + 6/5 + 7/6 + 8/7 + 9/8 + 10/9 + 11/10)) / 8 ≈ 2.59。
相关推荐





