在文章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