目錄
一、四種常見的二分查詢變形問題
二、**實現
三、適用性分析
四、思考
1.查詢第乙個值等於給定值的元素
2.查詢最後乙個值等於給定值的元素
3.查詢第乙個大於等於給定值的元素
4.查詢最後乙個小於等於給定值的元素
前提假設:以資料是從小到大排列為前提來實現
1.查詢第乙個值等於給定值的元素,比如在陣列a[10]=
public int bsear1(int a, int val) else if (a[mid] < val) else
} return mid;
}
2.查詢最後乙個值等於給定值的元素,比如在陣列a[10]=
public int bsear2(int a, int val) else if (a[mid] < val) else
} return mid;
}
3.查詢第乙個大於等於給定值的元素,比如在陣列a[10]=
public int bsear3(int a, int val) else if (a[mid] < val) else
} return mid;
}
4.查詢最後乙個小於等於給定值的元素,比如在陣列a[10]=
public int bsear4(int a, int val) else if (a[mid] < val)
start = mid + 1;
} else
} return mid;
}
1.凡事能用二分查詢解決的,絕大部分我們更傾向於用雜湊表或者二叉查詢樹,即便二分查詢在記憶體上更節省,但是畢竟記憶體如此緊缺的情況並不多。
2.求「值等於給定值」的二分查詢確實不怎麼用到,二分查詢更適合用在」近似「查詢問題上。比如上面講幾種變體。
1.如何快速定位出乙個ip位址的歸屬地?
[202.102.133.0, 202.102.133.255] 山東東營市
[202.102.135.0, 202.102.136.255] 山東煙台
[202.102.156.34, 202.102.157.255] 山東青島
[202.102.48.0, 202.102.48.255] 江蘇宿遷
[202.102.49.15, 202.102.51.251] 江蘇泰州
[202.102.56.0, 202.102.56.255] 江蘇連雲港
假設我們有 12 萬條這樣的 ip 區間與歸屬地的對應關係,如何快速定位出乙個ip位址的歸屬地呢?
2.如果有乙個有序迴圈陣列,比如4,5,6,1,2,3。針對這種情況,如何實現乙個求「值等於給定值」的二分查詢演算法?
總結 二分查詢(下)
總結 二分查詢 下 一 四種常見的二分查詢變形問題 16 二分查詢 下 如何快速定位ip對應的省份位址?file j geektime 唯一更新qq群170701297 ebook 資料結構與演算法之美 16二分查詢 下 如何快速定位ip對應的省份位址?html 2019 2 17 17 27 19...
2 二分查詢(下)
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。輸入...
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...