我试图推导确定性线性搜索算法的平均案例运行时间。该算法按照A [1],A [2],A [3] ...... A [n]的顺序搜索未排序数组A中的元素x。它在找到元素x时停止或继续直到它到达数组的末尾。我在wikipedia上搜索,给出的答案是(n + 1)/(k + 1),其中k是数组中x的次数。我以另一种方式接近并得到了不同的答案。任何人都可以给我正确的证据,也让我知道我的方法有什么问题吗?
E(T)= 1*P(1) + 2*P(2) + 3*P(3) ....+ n*P(n) where P(i) is the probability that
the algorithm runs for 'i' time (i.e. compares 'i' elements).
P(i)= (n-i)C(k-1) * (n-k)! / n!
Here, (n-i)C(k-1) is (n-i) Choose (k-1). As the algorithm has reached the ith
step, the rest of k-1 x's must be in the last n-i elements. Hence (n-i)C(k-i).
(n-k)! is the total number of ways of arranging the rest non x numbers, and n!
is the total number of ways of arranging the n elements in the array.
我在简化时没有得到(n + 1)/(k + 1)。
答案 0 :(得分:6)
您忘记了k
x
份P(i)
副本的排列。 P(i) = (n-i)C(k-1) * k! * (n-k)! / n! = (n-i)C(k-1) / nCk.
^^
的正确定义是
In[1]:= FullSimplify[Sum[i Binomial[n-i, k-1]/Binomial[n, k], {i, 1, n}], 0 <= k <= n]
1 + n
Out[1]= -----
1 + k
我会把事情交给Mathematica:
{{1}}
详细说明我的评论:假设所有元素都是不同的,让X为匹配集,让Y为不匹配集。假设,| X | = k和| Y | = n-k。预期的读取次数等于读取e的概率的元素e之和。
给定一组元素S,S中的每个元素都以概率1 / | S |出现在所有其他元素之前。
当且仅当它出现在X的每个其他元素之前时,才读取X中的元素x,即概率为1 / k。 X中元素的总贡献是| X | (1 / k)= 1。
当且仅当它出现在X的每个元素之前时,才读取Y中的元素y,即概率1 /(k + 1)。 Y中元素的总贡献是| Y | (1 /(k + 1))=(n-k)/(k + 1)。
我们有1 +(n-k)/(k + 1)=(n + 1)/(k + 1)。
答案 1 :(得分:6)
以下是使用Cormen术语的解决方案:
让S
成为其他n-k
元素的集合
如果遇到Xi=1
'元素,让指标随机变量i
我们执行过程中的S
集
Pr{Xi=1}=1/(k+1)
因此E[Xi]=1/(k+1)
如果我们遇到在执行过程中搜索的任何Y=1
元素,请指示随机变量k
。
Pr{Y=1}=1
因此E[Y]=1
让随机变量X=Y+X1+X2+...X(n-k)
为我们的元素之和
在我们的执行过程中遇到。
E[X]=E[Y+X1+X2+...X(n-k)]=E[Y]+E[X1]+E[X2]+...E[X(n-k)]=1+(n-k)/(k+1)=(n+1)/(k+1)
。