第 01 章 入門 約 12 分鐘
演算法到底是什麼?(從泡麵說起)
用煮泡麵的步驟講清楚演算法的本質——不是寫 code,而是把事情做完的方法。
建議先看過: 00-welcome
你早就會寫演算法了
來看一份煮泡麵的步驟:
- 1燒水到沸騰
- 2放入麵體
- 3等 3 分鐘
- 4加調味包
- 5關火、開動
這就是一個演算法。 真的。
演算法 (Algorithm) 的定義就這麼簡單——
一組有限的、明確的步驟,給定輸入後能產出想要的輸出。
| 對照 | 煮泡麵 | 演算法 |
|---|---|---|
| 輸入 | 一包泡麵、水 | 你要處理的資料 |
| 步驟 | 燒水、下麵、等待… | 程式邏輯 |
| 輸出 | 一碗熱泡麵 | 你想要的答案 |
💡所以為什麼學校要教?
因為有些事可以有很多種做法,有的快、有的慢、有的省瓦斯。 電腦在處理「一百萬筆資料」時,快慢差異會放大成「3 秒 vs 3 小時」。 演算法課就在學「哪種做法比較好,為什麼」。
一個演算法要符合三個條件
老師上課可能會說演算法要滿足「五大特性」、「七大性質」之類的。把它記成這三個就夠:
✋
會結束
不能跑到天荒地老。煮泡麵 3 分鐘起鍋,不是煮 3 天。
🎯
每步明確
「加適量鹽」不行,要寫「加 1 茶匙鹽」。電腦不會猜。
📦
有輸入輸出
給它一包麵 → 還你一碗麵。給它一串數字 → 還你排好的。
同一件事可以有不同演算法
來看一個例子。從 1 加到 100 等於多少?
做法 A:傻傻地加
sum = 0
for i = 1 to 100:
sum = sum + i
return sum
要做 100 次加法。
做法 B:高斯小時候想到的
return 100 * (100 + 1) / 2
只要做 1 次乘法 + 1 次加法 + 1 次除法。
💡重點來了
兩個演算法做同一件事,但 B 快非常多。 這就是為什麼要學演算法——學會挑那個「比較聰明的做法」。
怎麼描述演算法?認識 Pseudocode
演算法不是 Python、不是 Java,是想法。 為了在紙上寫想法,我們用「假程式碼」(Pseudocode):
// 找出陣列中最大的數
Algorithm FindMax(A):
max ← A[0]
for i ← 1 to n-1 do
if A[i] > max then
max ← A[i]
return max
幾個約定俗成的寫法:
←是「指派」(等同=)。寫成箭頭比較不會跟「等於」搞混。- 縮排 表示這幾行是同一個 block。
A[i]表示陣列 A 的第 i 格。陣列大多從 0 開始算。- 不用煩惱分號、括號——你是在寫想法,不是 code。
📝考試會這樣考
題型:給你 pseudocode,問結果。
例:以下 pseudocode 給定 A = [3, 1, 4, 1, 5, 9, 2, 6],最後 max 是多少?
怎麼下筆:用表格追蹤每一輪 i 和 max 的值。
| 輪次 i | A[i] | max |
|---|---|---|
| 0 (初始) | — | 3 |
| 1 | 1 | 3 |
| 2 | 4 | 4 |
| 3 | 1 | 4 |
| 4 | 5 | 5 |
| 5 | 9 | 9 |
| 6 | 2 | 9 |
| 7 | 6 | 9 |
答案:9。
這種題目大部分演算法考試都會出。看到 pseudocode 不要慌,畫表格追蹤就好。
這章記住三件事
- 演算法 = 把事情做完的步驟,不只限於電腦。
- 同一件事可以有不同演算法,有的快有的慢。
- 看到 pseudocode 不要慌,用表格逐步追蹤就能解大部分題目。
下一章我們來看怎麼判斷一個演算法快不快——也就是傳說中的 Big-O。
學習進度只存在你的瀏覽器,不會上傳。