考虑以下算法,以在具有n个不同值的未排序数组A [1 ….. n]中搜索给定数x:
1. Choose an i uniformaly at random from 1..... n;
2. If A[i] = x then Stop else Goto 1;
假设x存在于A中,则算法在终止之前预期进行的比较次数是多少?
(A) n
(B) n – 1
(C) 2n
(D) n / 2答案: (A)
解释:
如果您还记得硬币和骰子的问题,就可以猜出上述答案。
以下是答案的证明。
令期望的比较数为E。对于所有可能的情况,E的值是以下表达式的总和。
number_of_comparisons_for_a_case * probability_for_the_case
情况1
If A[i] is found in the first attempt
number of comparisons = 1
probability of the case = 1/n
情况二
If A[i] is found in the second attempt
number of comparisons = 2
probability of the case = (n-1)/n*1/n
情况3
If A[i] is found in the third attempt
number of comparisons = 2
probability of the case = (n-1)/n*(n-1)/n*1/n
实际上有无数这样的情况。因此,我们有E的无限级数。
E = 1/n + [(n-1)/n]*[1/n]*2 + [(n-1)/n]*[(n-1)/n]*[1/n]*3 + …. (1)
将方程式(1)乘以(n-1)/ n后,我们得到
E (n-1)/n = [(n-1)/n]*[1/n] + [(n-1)/n]*[(n-1)/n]*[1/n]*2 +
[(n-1)/n]*[(n-1)/n]*[(n-1)/n]*[1/n]*3 ……….(2)
从(1)减去(2),我们得到
E/n = 1/n + (n-1)/n*1/n + (n-1)/n*(n-1)/n*1/n + …………
右侧的表达式是具有无限元素的GP。让我们应用总和公式(a /(1-r))
E/n = [1/n]/[1-(n-1)/n] = 1
E = n
这个问题的测验