This question (1-b)要求在平均情况下由上述算法进行的比较次数。
我所理解的是:在最坏的情况下,算法会进行n + 1次比较。
我不明白下面的解决方案。
答案 0 :(得分:0)
涉及概率p
时进行的比较次数为
(1-p).f(n) + p.g(n)
其中
f(n)
是搜索失败时的操作次数,这是最糟糕的案例复杂度1 + n
。g(n)
是搜索成功时的预期操作次数。 假设在阵列的任何索引K
处找到搜索到的密钥i
的机会相同,则对每个等概率情况的操作数X
的期望值为
g(n) = E(X) = 0/n + 1/n + ... + (n-1)/n + n/n = n/2
因此
(1-p).f(n) + p.g(n) = (1-p).n + p.(n-1)/2
= 1 + n - p.n/2
当p = 0
时,我们会找回最严重的案例复杂性n
在p = 1
时,预期的复杂性为1 + n/2
。
答案 1 :(得分:0)
您将平均情况分为两部分:
密钥位于数组中:在这种情况下,平均比较次数为
(1 + 2 + 3 + ... + n)/ n =(n + 1)/ 2
密钥不在数组中:在这种情况下,比较次数为
n + 1个
现在,假设密钥在数组中的概率p,您可以通过
计算比较次数p *(如果键在数组中,则为#comparisons)+(1-p)*(如果数组中的键不是,则进行#比较)
产生
p * [(n + 1)/ 2] +(1-p)*(n + 1)
简化为
(2-P)(N + 1)/ 2