二分演算法理解:
二分是一種我們十分熟知的演算法,在很多的地方都有著神奇的用處,在各大比賽上都是很有用的工具性演算法
我們可以把二分理解成是一種不斷縮小答案範圍最後找到解的演算法,但是需要注意的是,他的實現是在資料有序的基礎上實現的
假設我們現在有著這樣一組資料
101 2 3 4 5 6 7 8 9 10
要尋找 3 的位置
二分法的思路便是這樣的:
①取出最中間的數即是 5 ,以及定址空間 1~10
3 比 5 小,所以是在 5 的左邊的,由此定址空間便變化為 1~4
②取出中間的數 2 (定址空間 1~4 )
3 比 2 大 ,所以是在 2 的右邊,由此定址空間變化為 3~4;
③取出中間數 3 (定址空間 3~4)
3 == 3 ,找到解了
ps:我們的範圍是上一次中間數向前減 1 ,或向前加 1 的,這樣不會重複,避免取出錯誤的中間數
這是很容易去理解的,**也很容易去記住以及理解,但是二分答案的難點是在對答案是否合法,以及邊界的判斷上,我們很需要注意的
二分演算法實現
非遞迴法
這種方法是以while迴圈來實現的
**:
int main()
cout《遞迴法實現
遞迴的也是很好理解的,但是**相較上面的用while來實現的要難記住一些,兩種方法是個有千秋的,在不同的題型上,不同的方式有不同的優點,這是需要我們來分析的,也是在做題的過程中需要注意的
**:int get(int left,int key,int right) //幾個形參,left是左邊到哪兒,key是要查詢的關鍵字,right是右邊到哪兒
int main()
{ 輸入;
ans = get(1,k,n); //輸入範圍,用ans來存下標
cout<總結
二分是一種速度快的飛起的演算法,好了,88
二分查詢是一種很有用的工具,在很多地方能做到很大的用處,我們要加強對其的練習,在賽場上可以熟練準確的敲出來
** 菜雞c_uizrp_dzjopkl原創**
二分查詢 個人筆記
在學習mooc資料結構 陳越 的有關 樹 的部分時,作為前導知識,同時也是一直不是很懂實現方法的二分查詢,今天借助洛谷題單,簡單加深了一下對二分查詢的理解以及c 相關庫的使用方法,特此記錄 洛谷p2249 深基13.例1 查詢 給出一組排好序的數列,詢問其中元素位置.資料範圍較大,普通查詢方式會tl...
二分查詢深度分析
總結一句話就是 思路很簡單,細節是魔鬼,hhhh。本部落格 幾個最常用的二分查詢場景 尋找乙個數 尋找左側邊界 尋找右側邊界。public int binarysearch int nums,int target return 1 答 舉個例子推一下即可得知。因為當left 4,right 6時,此...
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...