天真的二進制搜索是一種非常有效的算法:在排序數組中獲取高點和低點的中點,並相應地調整高點或低點。然後你重新計算你的終點並迭代,直到你找到你的目標值(或者你當然不會)是否有比二分搜索中點更有效的搜索因子?
現在很清楚,如果你不使用中點,那麼會給系統帶來一些風險。假設你將搜索目標從中點移開,並創建兩個方面 - 我稱它們爲大方和小方。 (這種轉變是朝向高還是低,因爲它會是對稱的。)風險是,如果你錯過了,你的搜索空間就會大於它:你必須搜索大的一面更大。但是,獎勵是,如果你的搜索空間更小。
它發生在我面前的風險與獎勵的空間數量是相同的,(沒有模式,我假設沒有),一個元素高於和低於中點的可能性是相等的。所以風險在於它落在新目標和中點之間。
現在,因爲空間數量影響搜索空間,並且搜索空間是按照對數方式測量的,所以在我看來,如果我使用了,比如我們的搜索空間是1/4和3/4,一半的小空間的日誌,其中大空間只增加了大約.6或.7。
因此,記住這一切:是否有更有效的方法來執行二進制搜索,而不僅僅是使用中點?
不,中點是二進制搜索最有效的方法,如果我們不知道其他信息。您較小的一面和較大的一面之間的比例越小,搜索效果越差。如果你選擇1/4和3/4,爲什麼不把它推向極端?讓我們選擇接近0並接近1.在每次搜索步驟之後,您將不斷地接近接近1的一側,每次搜索時都會刪除幾乎爲0的搜索大小。這不是有效的。 –
喬希,你能證明嗎? – corsiKa
當然。我們來收集10個元素。 [1,2,3,4,5,6,7,8,9,10]。現在,讓我們使用極端,並將該部分分爲[1]和[2,3,4,5,6,7,8,9,10]。發現它在更大的部分,讓我們回去分開[2]和[3,4,5,6,7,8,9,10]。正如你所看到的,你的目標是O(n)搜索。 –