二元搜索运行时间的渐近增长率

时间:2017-03-22 19:36:57

标签: algorithm search

以下为binarySearch的伪代码

myfunction(A[1],A[2]..A[n]:array of ints,x:positive integer){
  i = 1
  j = n
 while i<=j do 
     k=floor( (i+j)/2)
    if (x==A[k])
      return k;
    else if (x<A[k])
      j=k-1
    else
      i=k+1
 return -1 
  }

为什么这个不等式为真j-i+1 <= n / 2^t,其中t是迭代次数。我得到的是n /2^t,如果n/2^t =1增加,那么t将是迭代的总数,但是左手边:i-j+1我不知道如何连接这些使不平等的陈述。背后的逻辑是什么?

1 个答案:

答案 0 :(得分:0)

j-i+1在任何时间点仍然需要考虑的值数量。很明显,不平等在一开始就存在:n-1+1 = n / 2^0

现在,每次迭代,您只需搜索一半的间隔。仔细分析不同的案例表明,间隔甚至比这更加减少。因此,每次迭代为区间大小提供至少另一个因子1/2。

我只会做一个案例并将其他三个案件作为锻炼给你。 假设j-i+1等于s并假设s是奇数。然后,i+j为偶数,k=(i+j)/2指向中间元素,将(s-1)/2元素留在其左侧及其右侧。让我们现在假设x < A[k],以便我们将j设置为k-1。因此,j-i+1的新值为k-1-i+1 = k-i = (s-1)/2 < s/2