1026 二分查詢(下)

2021-08-31 11:35:01 字數 1423 閱讀 7758

目錄

一、四種常見的二分查詢變形問題

二、**實現

三、適用性分析

四、思考

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小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...