【发布时间】:2015-02-08 00:15:03
【问题描述】:
在文章http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch中,作者讨论了二分查找。他区分了找到某事为真的最低值和某事为假的最高值。 正在搜索的数组看起来像:
假假假真真
我很好奇为什么这两种情况不同。为什么不能只求最小值为真,然后减一求最大值为假?
Edit2:好的,所以我理解下限和上限。现在,我很难理解,在搜索大于或等于查询的最小整数时,为什么我们不能只将 if(mid>query) 更改为 if(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
。”
【问题讨论】:
-
好吧,我假设二进制搜索意味着集合看起来像 false .... false true ... true 无论如何
-
我所指的文章暗示,如果我们正在执行二进制搜索,情况就是如此;我相信这也是二进制搜索甚至适用于这种情况的必要条件。
-
@DietmarKühl 当然可以,但是您不能像
if(lo==0&&works(lo)==true)return false这样轻松检查吗?
标签: c++ binary-search lower-bound upperbound