演算法(Algorithm)
Definition, Properties & Prime Example
演算法(Algorithm)的定義 從輸入到輸出的解題步驟

演算法是一組明確的指令步驟,用於解決某個問題或完成特定任務。
可以把它想成:從「輸入」到「輸出」的一條路線圖,必須在有限時間內完成,且結果要正確、可預測。

演算法的五大特性 Input / Output / Finiteness / Definiteness / Effectiveness
  1. 輸入(Input)
    演算法可以接受零個或多個輸入。
    例:做菜需要一些食材及調味料。
  2. 輸出(Output)
    至少要產生一個輸出,通常是解決問題的結果。
    例:最後完成並端出一道菜。
  3. 有限性(Finiteness)
    演算法必須在有限步驟內結束,不會無限執行。
    例:不會無止盡一直「煮到宇宙毀滅」。
  4. 確定性(Definiteness)
    每個步驟都要清楚、沒有歧義。
    例:煮菜時不會寫成「加糖或加鹽,看心情」。
  5. 有效性(Effectiveness)
    每一步操作都要在有限時間內做完,而且人或機器都能執行。
    例:食譜的動作可以請廚師,或煮菜機器人完成。
生活與程式中的演算法例子 從食譜到排序
  1. 日常生活中的例子
    • 做菜的食譜就是一種演算法:按順序完成每一步,就能得到一道菜。
  2. 程式設計中的例子
    • 排序演算法:如冒泡排序(Bubble Sort)、快速排序(Quick Sort)。
    • 搜尋演算法:如線性搜尋(Linear Search)、二分搜尋(Binary Search)。
為什麼需要演算法? 效率、普適與可重用
  1. 效率性
    • 使用高效演算法可以大幅節省時間與資源。
  2. 普適性
    • 演算法提供一種解決問題的通用方式,可以套用到不同情境。
  3. 可重用性
    • 設計良好的演算法,可以在各種系統與專案裡重複使用。

很多「看起來不同」的應用,其實背後用的是同一種演算法。
例:排序學會一次,就能用在成績、價格、時間等各種資料。

質數判斷的演算法範例 Prime Number Check

問題:給定一個整數 n,若是質數則輸出 Yes,否則輸出 No。

先不要急著寫程式,先用步驟想一想:

簡碼(第一版) 流程圖(第一版)

步驟(第一版):

  1. 輸入整數 n。
  2. 設定旗標 f = false
  3. 設定除數從 2 開始除之。
    1. 若整除,則設定旗標 f = true
  4. 除數加 1,回到步驟 3,直到除數 = n − 1。
  5. 如果旗標 f = false,則輸出 Yes,否則輸出 No。

流程圖(第一版):

prime flowchart 1
程序優化:讓質數演算法更聰明 減少無謂計算

顯示/隱藏:優化思路

  1. 找到一個因數就知道不是質數,可以立刻離開迴圈。
  2. 搜尋範圍是否一定要從 2 到 n−1?
    • 除了 2 以外,所有偶數都不是質數,因此可以從 3 開始,每次加 2(只檢查奇數)。
  3. 終點也可以縮小到: $$\text{int}(\sqrt{n})$$ 因為如果 n 有大於 \(\sqrt{n}\) 的因數,必定也有一個小於 \(\sqrt{n}\) 的因數。
  4. 為了可讀性,可以把旗標名稱改成 prime
簡碼(優化版) 流程圖(優化版)

步驟(優化版):

  1. 輸入整數 n。
  2. 如果 n = 2,則輸出 "Yes" 並結束;否則繼續。
  3. 設定旗標 prime = true
  4. 設定除數從 3 開始,每次遞增 2(只檢查奇數)。
    1. 若整除,則設定 prime = false,並離開迴圈。

重複步驟 4,直到除數 = $$\text{int}(\sqrt{n})$$。

  1. 如果 prime = true 則輸出 Yes,否則輸出 No。

流程圖(優化版):

prime flowchart 2