二分查詢的應用

2021-10-17 05:13:48 字數 679 閱讀 4767

最大的最小值,最小的最大值用二分

這個發現緣起於兩段看似相同的**

這兩段**看似相同,實則大有學問

我編了乙個簡單的題目:在1,2,3,三個數中找到大於等於2的最小值

這是乙個求最小的最大值的問題,按道理來我們要用左開右閉的區間(及靠上方的**去逼近答案),若用靠下方的**(左閉右開的區間)則步驟如下:

1 l=1,r=3, mid=2符合條件,執行l=mid=2;

2 l=2,r=3, mid=2符合條件,執行l=mid=3;

迴圈結束,但我們最後得到的l顯然不是正確答案

由此發現兩種方法的區別

思考乙個晚上,在腦袋炸裂之前終於得出結論,手動感動。

對於最小的最大值的問題,我們使用左開右閉的區間( ]去逼近,而當符合條件時,閉區間發生變動,則與變動後的閉區間的端點也符合條件,故生成更小的左開右閉區間。不符合條件時,使l=mid+1,故得到的新l也不符合條件,也是個左開右閉區間

對於最大的最小值問題,我們使用左閉右開的區間[ )尋找答案

自創口訣:最小最大左開右閉,最大最小左閉右開

二分查詢的應用

二分查詢是一種很有效率的查詢方式,每次查詢後餘下的區間是指數級遞減的。二分查詢的限制也很明顯,就是資料必須是拍過序的。首先我們來看通過二分查詢的方式來計算乙個數的平方根 def mysqrt n int,left int,right int,bit num float mid left right ...

二分查詢的變形應用

演算法理解 獲取陣列中第乙個空閒的塊 比如array 為1111111 111000000 0 問題就變成 尋找array 中第乙個出現的0 演算法一 遍歷陣列找到第乙個 0 o n 演算法二 二分查詢 二分查詢成功條件 array i t 失敗條件 l u 對於本問題來說,成功條件則是 array...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...