🔴 Tier A・全新演算法概念

二分搜尋

M3-00 二分搜尋入門暖身

1什麼是二分搜尋

你玩過「猜數字」遊戲嗎?對方心裡想一個1到100的數字,你每猜一次,對方告訴你「太大」或「太小」。如果你每次都亂猜,運氣不好可能要猜99次才猜到;但如果你每次都猜「目前範圍的中間值」,最多只要猜7次左右就一定找得到——這就是二分搜尋的核心想法:每一次都把可能的範圍砍半,而不是一個一個慢慢找。

這是你第一次真正體會到「同一個問題,方法不一樣,效率差很多」——之前你在清單裡找一個數字,都是從頭到尾一個一個看過去(叫「線性搜尋」),資料越多、要花的時間就跟著等比例變長。二分搜尋只有在資料已經排好順序的前提下才能用,但只要能用,資料再多也只需要一次次砍半,速度快非常多。這也是為什麼你在M1-07/M1-08已經先學過排序法。

猜 1~100 之間的數字 73,每次猜中間值

1
…
50
…
100
猜 50 → 太小 → 丟掉左半邊,只留右半邊
↓
51
75
…
100
猜 75 → 太大 → 丟掉右半邊,範圍再砍半
↓
51
73
74
猜 73 → 命中!只花 3 次,而不是逐一從 1 猜到 100
🆕 補充圖解:每猜一次,可能範圍就砍半,找起來快很多新增

2核心概念,依課程題目的順序拆解

1

判斷目標在不在清單裡

你要做的事:給一個已經由小到大排序的清單,判斷某個目標數字在不在裡面。用二分搜尋的做法:先看清單正中間的數字,如果剛好是目標就找到了;如果目標比中間值小,代表目標只可能在左半邊,直接把右半邊丟掉,只在左半邊繼續找;如果目標比中間值大,同樣道理丟掉左半邊。每比較一次,可能的範圍就砍半,直到找到,或範圍縮到沒東西為止。

神祕數字找找看(M3-00-01)

⚠️ 常見誤區
清單沒有排序就用二分搜尋——二分搜尋能「砍半丟掉一邊」的前提,是清單已經照順序排好,如果清單是亂的,砍掉的那一半可能剛好藏著答案。
2

找出目標在清單中的位置

跟概念1幾乎一樣,差別是找到之後不是輸出「有/沒有」,而是輸出目標所在的位置(從第1個算起);如果清單裡沒有,輸出0。

神祕數字在第幾個(M3-00-02)

3

體會「猜的策略」如何影響次數——猜數字裁判

這一題讓你從「玩家」的視角切換到「裁判」的視角:給定正確答案跟一串依序猜測的數字,判斷玩家是第幾次才猜中。寫這支程式本身只需要依序比對每一次猜測,但做這一題的用意是讓你觀察:如果輸入的猜測序列本身就是照「二分搜尋策略」在猜(每次猜目前範圍的中間值),猜中所需的次數會遠比亂猜少很多——這是幫助你建立「為什麼要學二分搜尋」的直覺。

猜數字裁判(M3-00-03)

4

找插入位置——即使沒有完全命中,也要能定位

你要做的事:書架上的書已經照編號排好,決定一本新書該插入第幾個位置,插入後仍要保持排序。這一題比概念1、2更進一步:目標不一定會剛好等於清單裡的某個數字,二分搜尋這時候要做的是「持續砍半,直到範圍剩下一個位置,那個位置就是答案」,而不是「找不到就放棄」。

新書該插第幾格(M3-00-04)

⚠️ 常見誤區
直接照搬概念1「找到相等就停」的寫法,遇到清單裡沒有完全相同的數字時就不知道該怎麼辦——插入位置類的二分搜尋,重點是持續縮小範圍直到只剩一個可能位置,不是在等一個「相等」的時刻。
5

一次查詢多筆——同一招重複套用

你要做的事:同一份已排序清單,要查詢很多筆不同的目標值是否存在。這一題沒有新概念——把概念1的做法,對每一筆查詢各自獨立跑一次二分搜尋,重複套用即可。

訂單一次查(M3-00-05)

6

找門檻落點——找「小於等於目標的最大值」

你要做的事:門檻清單由小到大排序,判斷某筆消費金額達到第幾個門檻(即金額大於等於的最大門檻編號;如果沒有達到任何門檻,輸出0)。這是二分搜尋的另一種變化型——你要找的不是「完全相等」,也不是「插入位置」,而是「符合某個條件的最後一個/最大的那個」。

打折門檻落點(M3-00-06)

⚠️ 常見誤區
把概念4(插入位置)跟概念6(門檻落點)的方向搞混——插入位置找的是「第一個比目標大的位置」,門檻落點找的是「最後一個小於等於目標的位置」,兩者的比較方向相反,寫之前先確認題目到底要哪一種。

3建議練習順序對照表

順序概念題目課程
1存在性判斷神祕數字找找看(M3-00-01)M3-00
2找出位置神祕數字在第幾個(M3-00-02)M3-00
3建立策略直覺猜數字裁判(M3-00-03)M3-00
4找插入位置新書該插第幾格(M3-00-04)M3-00
5多筆查詢訂單一次查(M3-00-05)M3-00
6找門檻落點打折門檻落點(M3-00-06)M3-00
🆕 本頁新增內容說明
以下視覺元素為 Cowork 潤飾時新增,MD 正本中沒有:① 猜數字砍半過程的格子圖(1~100猜73為範例)。若確認保留,建議之後補進 MD 正本。