二分查找中值计算

2024-01-11

以下是我从 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

为什么我们将中间值计算为中 = 低 + (高 - 低) / 2?有什么问题吗(高 + 低)/ 2

我有一个轻微的想法,这可能是为了防止溢出,但我不确定,也许有人可以向我解释一下,以及这背后是否还有其他原因。


虽然这个问题已经有5年历史了,但是有一个谷歌博客上的好文章 https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly.html详细解释了问题和解决方案,值得分享。

需要提到的是,在当前的二分搜索实现中Java https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#binarySearch-java.util.List-T- mid = lo + (hi - lo) / 2不使用计算,而是使用零填充右移运算符更快、更清晰的替代方案

int mid = (low + high) >>> 1;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二分查找中值计算 的相关文章

  • Next Redux Wrapper 中的水合物作用是什么?

    最近我开始使用 Next js 我有一个关于 next redux wrapper 包的问题 我不太明白HYDRATE行动 所以我具体想知道它是什么 它的用途是什么以及它何时推出 因为目前我唯一真正理解的是它与getServerSidePr

随机推荐