algorithm - 随机二分查找的期望运行时间

标签 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)

最佳答案

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, n]1/x 的积​​分,它是 log(n) - log(1) = log (n)。参见 Harmonic series .

关于algorithm - 随机二分查找的期望运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350936/

相关文章:

python3 fork 生成器

javascript - 图形中的蒙特卡洛方法

Mysql:如何正确生成当前一组数字上不存在的唯一10位随机数

c# - 如何计算特定操作(预定义功能)需要完成的时间?

python - 将日期转换为自纪元以来的 float

algorithm - 将物体分成重量相等的两堆

python - DiGraph networkx 的大型网络实例的最快迭代是什么?

c - 寻找幸运数字的算法

nhibernate - 如何使用NHibernate Criteria API选择随机行?

jquery - 将时间附加到 JQuery 日期选择器?