歡迎來到演算法的世界!
歡迎來到你的決策數學 1 (D1) 之旅的第一步。你可能在想:「演算法究竟是什麼?」簡單來說,演算法就是完成一項任務的指令集。你可以把它想像成製作蛋糕的食譜,或是你綁鞋帶時會遵循的步驟。只要嚴格按照步驟執行,每次都能得到同樣的結果!
在本章中,我們將探討如何整理數據、尋找特定項目以及進行高效率的裝箱。這些技巧每天都在使用,例如 Amazon 用來整理包裹,或者 Google 用來搜尋結果。
1. 基本概念:流程圖與文字
演算法可以寫成一連串的文字指令,也可以用視覺化的流程圖呈現。如果剛開始覺得流程圖看起來像個迷宮也不用擔心;它們不過是一張「是/否」的決策地圖而已。
重要前置知識:尋找中間項
在 Edexcel D1 中,尋找列表中間項有一條特定規則。如果一個列表有 \(n\) 個項目,中間項的位置計算方式為:\( \frac{n+1}{2} \)。
如果結果不是整數,必須無條件進位(向上取整)。
例子:
如果你有 5 個項目:\( \frac{5+1}{2} = 3 \)。第 3 項就是中間項。
如果你有 6 個項目:\( \frac{6+1}{2} = 3.5 \)。無條件進位到 4。第 4 項就是中間項。
關鍵提醒:一定要完全按照寫好的指令執行,即使你覺得自己發現了捷徑。在考試中,分數是給予展示過程的人,而不僅僅是最終答案!
2. 排序演算法:氣泡排序法 (Bubble Sort)
氣泡排序法是一種將數字列表排序(遞增/從小到大,或遞減/從大到小)的簡單方法。
運作方式:
1. 從列表的開頭開始。
2. 比較前兩個數字。如果它們順序不對,就交換它們。如果順序正確,則保持不動。
3. 移動到下一對(第 2 和第 3 個數字),重複上述步驟,直到到達列表末尾。這稱為一輪 (pass)。
4. 在第一輪結束時,最大的數字會像氣泡一樣「浮」到最後面。
5. 重複進行,直到出現一輪完全沒有進行任何交換的情況。這意味著列表已經排好序了!
記憶小撇步:想像沉重的氣泡沉到底部(列表末尾),或者輕的氣泡浮到頂部。
常見錯誤:學生往往在列表看起來排好序時就停下來。你必須完成最後一輪「沒有交換」的檢查,才能向演算法證明它已經完成了!
3. 排序演算法:快速排序法 (Quick Sort)
對於長列表而言,快速排序法比氣泡排序法快得多,但需要更專注。它利用一個樞紐 (pivot) 來分割列表。
步驟流程:
1. 選擇樞紐:遵循 Edexcel 規則,選擇列表的中間項(使用 \( \frac{n+1}{2} \) 規則)。
2. 分割:將所有小於樞紐的數字寫在它的左邊,將所有大於樞紐的數字寫在它的右邊。(這會產生兩個子列表)。
3. 重複:將每個子列表視為一個新的小型列表,並為每個列表選擇一個新的樞紐。
4. 確認:一旦某個項目被選為樞紐,它就處於最終排序位置。通常我們會在這些項目上畫個方框或圓圈以作標記。
快速回顧:
- 氣泡排序法:慢,比較相鄰對,需要一輪「無交換」來確認結束。
- 快速排序法:快,使用樞紐,將列表拆分成較小的部分。
4. 搜尋演算法:二分搜尋法 (Binary Search)
想像你在字典裡找一個詞。你不會從第 1 頁開始讀每個詞,對吧?你會跳到中間,然後判斷你要找的詞是在那一頁之前還是之後。這就是二分搜尋法。
關鍵規則:你只能對已經排好序的列表使用二分搜尋法。如果列表是亂序的,搜尋就不會成功!
流程:
1. 找到整個列表的中間項。
2. 這是你要找的目標值嗎?如果是,停止!
3. 如果目標值小於中間項,捨棄中間項以及列表的整個右半部分。
4. 如果目標值大於中間項,捨棄中間項以及列表的整個左半部分。
5. 對剩餘的部分重複上述步驟,直到找到目標值,或者沒有項目剩下(代表該數值不存在)。
你知道嗎?二分搜尋法非常高效。即使你有 1,000,000 個項目的列表,只需 20 個步驟就能找到任何項目!
5. 裝箱問題 (Bin Packing)
裝箱問題是指將不同大小的物品放入固定容量的「箱子」中。例如,將檔案儲存到 USB 隨身碟,或將箱子裝入送貨車。
方法 A:首次適應法 (First-Fit)
按照給定的順序取每個項目,並將其放入第一個有足夠空間的箱子中。
類比:這就像一個「懶惰」的包裝工——直接抓起下一個物品,隨手塞進看到的第一個空隙裡。
方法 B:首次適應遞減法 (First-Fit Decreasing)
1. 首先,將列表排序為遞減順序(從大到小)。
2. 然後,應用「首次適應法」。
類比:這就像一位專業的包裝工——先放入大型、形狀尷尬的物品,這樣小物件就能填補剩餘的空間。這通常會使用較少的箱子!
裝箱問題關鍵提醒:檢查你的減法!常見的錯誤是以為物品放得進去,但實際上卻少了 1 個單位的空間。
摘要速查
- 演算法:一組指令集。
- 中間項: \( \frac{n+1}{2} \),無條件進位。
- 氣泡排序法:比較相鄰對,需要一輪「無交換」來結束。
- 快速排序法:利用樞紐進行分治。
- 二分搜尋法:僅適用於已排序列表;不斷減半搜尋範圍。
- 首次適應遞減法:先按從大到小排序,再進行裝箱。
如果這些過程剛開始讓你覺得有點重複也不要擔心——這正是演算法設計的目的!繼續練習這些步驟,你會發現這是你在進階數學 (Further Maths) 考試中,最能穩拿分數的題目之一!