在文章http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch中,作者讨论了二分搜索。他区分了找到某事为真的最低值和某事为假的最高值。正在搜索的数组看起来像:
假 假 假 真 真
我很好奇为什么这两种情况不同。为什么你不能只找到正确的最小值,然后减去一个以找到错误的最大值?
Edit2:好的,所以我理解下限和上限。现在,我很难理解,在搜索大于或等于查询的最小整数时,为什么我们不能只更改if(mid>query)
toif(mid>=query)
并让它做下限而不是上限。
编辑:这是文章所说的:
“现在我们终于得到了实现二进制搜索的代码,如本节和上一节所述:
binary_search(lo, hi, p):
while lo < hi:
mid = lo + (hi-lo)/2
if p(mid) == true:
hi = mid
else:
lo = mid+1
if p(lo) == false:
complain // p(x) is false for all x in S!
return lo // lo is the least x for which p(x) is true
...
如果我们想找到 p(x) 为假的最后一个 x,我们会设计(使用与上述类似的原理)类似的东西:
binary_search(lo, hi, p):
while lo < hi:
mid = lo + (hi-lo+1)/2 // note: division truncates
if p(mid) == true:
hi = mid-1
else:
lo = mid
if p(lo) == true:
complain // p(x) is true for all x in S!
return lo // lo is the greatest x for which p(x) is false
。”