相关疑难解决方法(0)

二分搜索中值计算

以下是我从TopCoder关于二进制搜索的教程中得到的伪代码

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

   // target was not found
Run Code Online (Sandbox Code Playgroud)

为什么我们计算中间值为mid = lo +(hi-lo)/ 2(hi + lo)/ 2错了

我有一点想法,可能是为了防止溢出,但我不确定,也许有人可以向我解释,如果还有其他原因.

binary-search

20
推荐指数
5
解决办法
1万
查看次数

为什么我们在二分搜索中写lo +(hi-lo)/ 2?

我正在阅读有关二元搜索的内容......我知道找到中间价值的传统方式就像

mid=(hi+lo)/2
Run Code Online (Sandbox Code Playgroud)

但我也看到,以避免溢出中间值是这样计算的

mid=lo+(hi-lo)/2
Run Code Online (Sandbox Code Playgroud)

但为什么??我找不到实际的原因.任何人都可以举例说明理由吗?它与其他问题不同,因为其他问题没有我想要的答案......

c++ algorithm binary-search

15
推荐指数
2
解决办法
3382
查看次数

标签 统计

binary-search ×2

algorithm ×1

c++ ×1