考虑以下二元搜索的愚蠢随机变体。您将获得一个排序数组 从A中随机均匀地选择n个整数和你要搜索的整数v。 然后,不是将v与数组中间的值进行比较,而是随机二进制搜索 变体选择从1到n的随机数r,并将v与A [r]进行比较。取决于是否 v大或小,这个过程在左子阵列或右子阵列上递归重复, 直到找到v的位置。证明该算法的预期运行时间受到严格限制。
这是我得到的T(n)
T(n) = T(n-r) + T(r) + Θ(1)
然而,我不知道如何获得紧张的约束。
答案 0 :(得分:0)
您的T(n)配方并不完全正确。实际上,
让我们试着查看所有案例。当我们通过在任意随机点上划分数组来减小问题大小时,减少的子问题将具有从1到n的任何大小且具有均匀概率。因此,概率为1 / n,搜索空间变为r。因此预期的运行时间变为
T(n) = sum ( T(r)*Pr(search space becomes r) ) + O(1) = sum ( T(r) )/n + O(1)
由此给出,
T(n) = average(T(r)) + O(1)
让随机二进制排序的预期时间复杂度为T(n)。
T(n) = [ T(1)+T(2)+...+T(n)]/n + 1
n*T(n) = T(1)+T(2)+...+T(n) + n
(n-1)*T(n-1) = T(1)+T(2)+...+T(n-1) + n-1 [substituiting n by n-1]
n*T(n) - (n-1)*T(n-1) = T(n) + 1
(n-1)*T(n) - (n-1)*T(n-1) = 1
(n-1)*T(n) = (n-1)*T(n-1) + 1
T(n) = 1/(n-1) + T(n-1)
T(n) = 1/(n-1) + 1/(n-2) + T(n-2) [ T(n-1) = T(n-2) + 1/(n-2) ]
...
T(n) = 1 + 1/2 + 1/3 + ... + 1/(n-1) = H(n-1) < H(n) = O(log n)
[ H(n) = reciprocal sum of first n natural numbers ]
所以,T(n) = O(log n)