预期的随机二分搜索运行时间

时间:2017-06-04 05:06:49

标签: algorithm random time binary-search

我想计算以下伪代码的随机二进制搜索的预期运行时间,而不是将中点视为枢轴,而是选择随机点:

BinarySearch(x, A, start, end)
    if(start == end)
        if(A[end] == x) 
            return end
        else
            return -1
    else
        mid = RANDOM(start, end)
        if(A[mid] == x)
            return mid
        else if(A[mid] > x)
            return BinarySearch(x, A, start, mid-1)
        else
            return BinarySearch(x, A, mid+1, end)

我查看了this previous question,其中包含以下内容:

T(n) = sum ( T(r)*Pr(search space becomes r) ) + O(1) = sum ( T(r) )/n + O(1)

这是如何获得的?

sum( T(r)*Pr(search space becomes r) ) 

在最后一行计算中,这是如何获得的?

T(n) = 1 + 1/2 + 1/3 + ... + 1/(n-1) = H(n-1) < H(n) = O(log n)

1 个答案:

答案 0 :(得分:1)

sum( T(r)*Pr(search space becomes r) ) 

通过观察您可以选择分区数组的任何点来获得此行,因此为了获得预期时间,您需要总结所有可能性乘以其概率。请参阅expected value

T(n) = 1 + 1/2 + 1/3 + ... + 1/(n-1) = H(n-1) < H(n) = O(log n)

关于这一行。那你可以把它想象成1/x[1, n]的积分,它是log(n) - log(1) = log(n)。请参阅Harmonic series