为什么在二分搜索中将下限加1?

时间:2018-04-05 15:30:33

标签: algorithm binary-search

二进制搜索实现如下:

binary_search(A, target):
   lo = 1, hi = size(A)
   while lo <= hi:
      mid = lo + (hi-lo)/2
      if A[mid] == target:
         return mid            
      else if A[mid] < target: 
         lo = mid+1
      else:
         hi = mid-1

能              lo = mid + 1

替换为

         lo = mid

而且可以              hi = mid-1

替换为

         hi = mid

我不明白这一点。如果有人能说清楚 - 这将是有用的。

1 个答案:

答案 0 :(得分:0)

如果您在第一个if中看到A [mid]不是目标,那么您就知道可以跳过mid元素而不会影响正确性。

所以是的,可以将lo和hi设置为mid以进行下一次迭代,但之后你只会考虑一个额外的元素,你知道它肯定不是你要搜索的值。

O(Log n)的运行时复杂度不受影响。