📚 由淺至深
第 01 章 入門 約 12 分鐘

演算法到底是什麼?(從泡麵說起)

用煮泡麵的步驟講清楚演算法的本質——不是寫 code,而是把事情做完的方法。

建議先看過: 00-welcome

你早就會寫演算法了

煮泡麵 = 一個演算法🍜泡麵+ 水輸入 Input①燒水 ②下麵 ③等 3 分④加調味 ⑤關火🔥⏰📦步驟 Steps🥣熱騰騰的一碗麵輸出 Output給定輸入 → 經過明確步驟 → 產出輸出,這就是演算法。

來看一份煮泡麵的步驟:

  1. 1燒水到沸騰
  2. 2放入麵體
  3. 3等 3 分鐘
  4. 4加調味包
  5. 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:高斯小時候想到的

做法 A:傻傻地加1 + 2 + 3 + … + 100🐢100 次加法做法 B:高斯公式n × (n+1) / 2🚀3 次運算

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 是多少?

怎麼下筆:用表格追蹤每一輪 imax 的值。

輪次 iA[i]max
0 (初始)3
113
244
314
455
599
629
769

答案:9。

這種題目大部分演算法考試都會出。看到 pseudocode 不要慌,畫表格追蹤就好。

這章記住三件事

  1. 演算法 = 把事情做完的步驟,不只限於電腦。
  2. 同一件事可以有不同演算法,有的快有的慢
  3. 看到 pseudocode 不要慌,用表格逐步追蹤就能解大部分題目。

下一章我們來看怎麼判斷一個演算法快不快——也就是傳說中的 Big-O。

學習進度只存在你的瀏覽器,不會上傳。