什麼是二分搜尋

在已排序的資料中,與中央元素比較,每次把搜尋範圍縮小一半的搜尋方法。從 n 個資料中最多以 ⌊log₂ n⌋ + 1 次比較找到,時間複雜度為 O(log n)。前提是資料已排序。

日文名稱: 二分探索

「二分搜尋」出現在3領域的7道練習題中(資料結構與演算法, AD/DA轉換, 軟體開發與專案管理等)。

這個名詞所屬的領域: 資料結構與演算法

練習二分搜尋的題目

與陣列中央的元素比較、每次將搜尋範圍縮小一半的二分搜尋,其使用的前提條件為下列何者?

  1. A資料的個數是2的冪次
  2. B資料依鍵的順序排序
  3. C資料中不含相同的值
查看答案與解析

正確答案:B. 資料依鍵的順序排序

二分搜尋依與中央元素比較的結果,判斷目標值在前半還是後半,將範圍減半。這是因為資料已排序才能如此判斷,未排序的陣列無法使用。即使資料個數不是2的冪次,只要以 (下端 + 上端) ÷ 2 無條件捨去等方式決定中央位置,就能正常運作。即使含有相同的值也能搜尋,會找到其中某一個(若要找出最前面的位置則需要一點技巧)。

以二分搜尋在依升冪排序的1,000個不同值中尋找某個值。若1次比較就能得知「相等、較小、較大」,包含找得到與找不到的情況,比較次數最多為幾次?

  1. A10次
  2. B32次
  3. C500次
查看答案與解析

正確答案:A. 10次

每比較1次,搜尋範圍約減為一半,而 2¹⁰ = 1024 ≥ 1000,因此最多10次範圍就會用盡(⌊log₂ 1000⌋ + 1 = 10)。時間複雜度為 O(log n),即使有100萬個也最多只需20次。32次相當於 √1000 ≈ 31.6,500次則接近線性搜尋的平均(約 n/2)。不過,二分搜尋需要資料已排序,也必須考慮排序所需的 O(n log n) 工作量。

解析中的「二分搜尋」

出現「二分搜尋」的題目(7題)

  1. 與陣列中央的元素比較、每次將搜尋範圍縮小一半的二分搜尋,其使用的前提條件為下列何者?
  2. 以二分搜尋在依升冪排序的1,000個不同值中尋找某個值。若1次比較就能得知「相等、較小、較大」,包含找得到與找不到的情況,比較次數最多為幾次?
  3. 以二分搜尋在依升冪排列的陣列 a[0]~a[9] = 3, 8, 12, 17, 23, 31, 38, 45, 52, 60 中尋找38。搜尋範圍從下端 lo = 0、上端 hi = 9 開始,中央位置為 (lo + hi) ÷ 2 無條件捨去。依序排列與38比較的元素值,下列何者正確?
  4. 在已知可正常運作的韌體版本之後有1,000個提交,最新的提交會發生缺陷。假設缺陷是由某1個提交引入,其後的提交全都會發生。像 git bisect 那樣以二分搜尋找出原因提交時,需要建置並測試的次數最多為下列何者?
  5. 關於逐次逼近式(SAR式)ADC的動作,下列何者正確?
  6. N位元逐次逼近式ADC在一次轉換中進行的比較次數,基本上正確的是下列何者?
  7. 以從開頭逐一比較的線性搜尋,在存有100個不同值的陣列中尋找目標值。若目標值一定在陣列中,且位於各位置的機率相等,則比較次數的平均為多少?

半導體、電子電路與資訊計算工具

相關名詞

陣列 時間複雜度(大O符號) Git 比較器 微控制器(MCU) 過取樣 逐次逼近式ADC 二元堆積 二元搜尋樹 佇列

前往名詞解釋列表