iPAS AI 應用規劃師 初級 科目一 人工智慧基礎概論

二分搜尋找 27 需要比較幾次?

原題 18

某電商平台工程師需在已排序的價格清單中,快速定位指定價格是否存在,給定排序後陣列:arr = [3, 8, 14, 19, 21, 27, 33, 45, 52]。若搜尋目標值為 27,且採用標準二分搜尋(Binary Search)流程(每次比較後排除中位數),請問最多需要比較幾次即可找到目標?

白話

某電商平台工程師要在一個已排序的價格清單中,快速定位指定價格是否存在。清單共 9 個元素:[3, 8, 14, 19, 21, 27, 33, 45, 52],目標是找到 27。工程師採用標準二分搜尋(Binary Search)流程,規則是每次比較後排除中位數。

問你:按照這個流程,最多需要比較幾次才能找到 27?

點選你的答案。

01 總結

一句話總結

在陣列 [3, 8, 14, 19, 21, 27, 33, 45, 52] 中用二分搜尋找 27,依序比較 21(第 1 次)→ 33(第 2 次)→ 27(第 3 次),共需 3 次比較

02 情境

先感受問題:你玩過「猜數字 1 到 100」嗎?

「猜數字」遊戲:我心裡想一個 1 到 100 的數字,你每次猜一個,我只告訴你「猜太大」、「猜太小」或「猜對了」。

聰明的猜法是每次猜中間值:先猜 50,太大就猜 25,太小就猜 75,這樣每次都把範圍砍半,最多 7 次就能猜到 1 到 100 裡的任何數字。

「台灣快購」電商平台工程師陳建廷面對的就是同樣的問題:商品價格清單已排序好,每次查詢要最快判斷某個價格存在不存在。二分搜尋的邏輯和猜數字完全一樣,每次從中間比對,縮小一半範圍。

03 對照

如果不用二分搜尋,從頭搜到尾有多慢

陳建廷的同事小李不知道二分搜尋,每次都用「線性搜尋」從第一個找起:

  1. 比較 arr[0]=3:3 ≠ 27,繼續
  2. 比較 arr[1]=8:8 ≠ 27,繼續
  3. 比較 arr[2]=14:14 ≠ 27,繼續
  4. 比較 arr[3]=19:19 ≠ 27,繼續
  5. 比較 arr[4]=21,再比較 arr[5]=27:21 ≠ 27 繼續;27 = 27,找到了!共比較了 6 次。

9 個元素找第 6 個,線性搜尋要 6 次。如果清單有 100 萬個價格,最壞情況要比 100 萬次。二分搜尋呢?100 萬個元素最多只需 20 次。

04 解法

二分搜尋一步一步走:找 27

陣列(索引從 0 到 8):[3, 8, 14, 19, 21, 27, 33, 45, 52]

第 1 次比較:搜尋範圍 [0, 8],中位數索引 = (0+8)÷2 = 4,arr[4] = 21。目標 27 > 21,所以排除左半邊(含中位數),新範圍 [5, 8]。

第 2 次比較:搜尋範圍 [5, 8],中位數索引 = (5+8)÷2 = 6(取整),arr[6] = 33。目標 27 < 33,所以排除右半邊(含中位數),新範圍 [5, 5]。

第 3 次比較:搜尋範圍 [5, 5],中位數索引 = 5,arr[5] = 27。目標 27 = 27,找到了!

總共比較了 3 次。注意題目說「每次比較後排除中位數」,所以找到中位數等於目標的那次,這次比較也算一次,答案是 3 次。

這就是選項 B 的正確答案:二分搜尋在這個陣列中找 27,最多需要 3 次比較

技術版:二分搜尋的概念與在 AI 應用中的位置

二分搜尋(Binary Search)是演算法基礎知識,核心概念是「每次把搜尋範圍砍半」,時間複雜度是 O(log n)。

三個前提條件:

  • 資料必須已排序(Sorted)
  • 能夠隨機存取(Random Access):陣列可以,鏈結串列不行
  • 有明確的比較規則(大於/小於/等於)

時間複雜度直覺:9 個元素,log₂(9) ≈ 3.17,最多 4 次(ceiling)但本題找到答案只需 3 次。1000 個元素最多 10 次。1 百萬個元素最多 20 次。線性搜尋 1 百萬個元素最壞需 100 萬次,差距巨大。

二分搜尋在 AI 中的應用:向量資料庫的近似近鄰搜尋、決策樹的特徵分裂點搜尋、超參數調整的網格搜尋都借鑒了「每次縮小搜尋範圍」的思想。排序後的特徵查找也大量使用二分搜尋提升效率。

為什麼出題者考這題:AI 應用規劃師需要有基本的演算法概念,了解資料結構和搜尋效率,在評估系統效能和選型時有判斷依據。這不是要你寫程式,而是要你理解「查找問題的複雜度」。

05 陷阱

為什麼其他選項是錯的

A2 次

字面在說什麼

說找到 27 只需要比較 2 次就夠。

為什麼不對

按照流程:第 1 次比較 arr[4]=21(範圍縮到 [5,8]),第 2 次比較 arr[6]=33(範圍縮到 [5,5]),還沒找到,必須進行第 3 次比較。2 次根本還沒找到答案,所以 A 不對。

誰會選錯

在第 2 次比較後,知道目標在 arr[5] 那個位置,就直接算「已知答案位置,不用再比」的人。但題目問的是「比較次數」,確認到 27 的那次比較也要算。

C4 次

字面在說什麼

說需要 4 次比較才能找到 27。

為什麼不對

第 3 次就找到了(arr[5] = 27),根本不需要第 4 次。可能是計算中位數時用了不同的公式(如向上取整),但標準二分搜尋 3 次就能找到。

誰會選錯

中位數索引計算錯誤的人。例如第 2 次範圍 [5,8],錯用 (5+8+1)÷2 = 7,arr[7]=45,再來 [5,6],再來 arr[5]=27,變成 4 次。正確的公式是 floor((left+right)/2)。

D5 次

字面在說什麼

說最多需要 5 次才能找到。

為什麼不對

9 個元素的陣列,log₂(9) ≈ 3.17,向上取整是 4 次(最壞情況)。3 次已經找到了,5 次超出合理範圍。選 D 代表對二分搜尋的效率完全沒有概念。

誰會選錯

完全沒有做計算,用「感覺應該要很多次」直覺選的人。

06 變形

同個考點下次怎麼變形

變形 1

二分搜尋的前提是資料必須「已排序」,如果資料沒排序怎麼辦?

直覺

沒排序就用不了二分搜尋,只能從頭搜?

答案

沒排序的資料只能用線性搜尋(O(n))。如果需要反覆搜尋,先排序再二分搜尋通常比每次線性搜尋划算。排序花費 O(n log n),之後每次搜尋只要 O(log n)。查一次:排序不划算。查一百萬次:先排序超划算。

變形 2

二分搜尋的時間複雜度 O(log n) 代表什麼意思?

直覺

log 是什麼?跟效率有什麼關係?

答案

O(log n) 代表隨著資料量 n 增大,需要的比較次數只增加 log₂(n) 倍。實際例子:n=10 需要最多 4 次;n=100 最多 7 次;n=1000 最多 10 次;n=1,000,000 最多 20 次。資料量增加 1000 倍,搜尋次數只增加不到 3 倍,效率非常高。

變形 3

相同的陣列,如果搜尋目標是 5(不存在於陣列中),二分搜尋需要幾次才能判斷?

直覺

找不到的情況要比幾次才能確定「找不到」?

答案

第 1 次:arr[4]=21 > 5,範圍縮到 [0,3]。第 2 次:arr[1]=8 > 5,範圍縮到 [0,0]。第 3 次:arr[0]=3 < 5,範圍縮到空(left > right),判定不存在。共 3 次。「找不到」和「找到」的比較次數差不多,都是 O(log n)。

變形 4

線性搜尋(Linear Search)和二分搜尋的最佳情況各是幾次?

直覺

「最壞情況」很重要,那「最佳情況」呢?

答案

線性搜尋最佳:目標在第一個位置,1 次。二分搜尋最佳:目標正好是第一次比較的中位數,1 次。兩者最佳情況一樣,但最壞情況差很大:線性 O(n),二分 O(log n)。選擇演算法通常看最壞情況。

變形 5

為什麼電商平台的商品搜尋不能只靠二分搜尋?

直覺

二分搜尋那麼快,電商用它就好了?

答案

二分搜尋只能找「完全匹配」的值,而電商搜尋需要「模糊匹配」(你打「蘋果」要找到「蘋果筆電」「蘋果耳機」)、語意理解(「便宜的手機」要理解「便宜」和「手機」的關係)、個人化排序(依你的瀏覽歷史排結果)。現代電商搜尋用的是全文檢索引擎(如 Elasticsearch)加 AI 語意搜尋,不是單純二分搜尋。

07 延伸

想再往下看,這 5 個

  • 演算法(Algorithm)解決特定問題的步驟化方法,二分搜尋是演算法效率設計的經典範例,時間複雜度 O(log n) 遠優於線性搜尋
  • 向量資料庫(Vector Database)儲存並快速檢索高維向量的資料庫,使用近似最近鄰演算法(非二分搜尋)實現語意相似度查詢
  • 語義搜尋(Semantic Search)理解查詢意圖而非關鍵字比對的搜尋技術,是電商精準搜尋的進化方向,與二分搜尋的精確匹配形成對比
  • K 近鄰(K-Nearest Neighbors)找出最相似的 K 個資料點的演算法,是二分搜尋精確定位的延伸概念,廣泛用於推薦系統和分類任務
  • 大數據(Big Data)資料量龐大時搜尋效率至關重要,二分搜尋的 O(log n) 複雜度正是應對大數據量的關鍵優勢
出處

iPAS 經濟部產業人才能力鑑定 ・ 115 年第一次 iPAS AI 應用規劃師 初級 科目一 人工智慧基礎概論 第 18 題

查看官方原文 PDF