在文章http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch中,作者讨论了二分查找。他区分找到某些事情是真的最低值和假的事物的最高值。 数组被搜索看起来类似:基本二进制搜索上下限之间的区别?
假假假真真
我很好奇,为什么这两种情况是不同的。为什么你不能找到真正的最低值,然后减去一个来找出最高的值是错误的?编辑2:好的,所以我理解更低的上限。现在,我在努力理解,当搜索大于或等于查询的最小整数时,为什么我们不能将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
...
如果我们想找到最后x其中p(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 **无论什么 – 2015-02-08 00:18:08
该文章即时提到意味着这是这种情况,如果我们是执行二进制搜索;我相信这也是二进制搜索甚至适用于这种情况的必要条件。 – 2015-02-08 00:27:46
@DietmarKühl当然,但你不能轻易检查,像 '如果(LO == 0 &&工程(LO)==真)返回false'? – 2015-02-08 00:29:30