歡迎來到演算法的世界!
你好!歡迎來到電腦科學中最重要的一個章節。在這部分,我們將探討如何將一個龐大且複雜的問題,轉化為電腦能理解的一系列明確指令。這就是所謂的演算法表示(representing algorithms)。
如果剛開始覺得這聽起來有點「技術性」,別擔心。你可以把演算法想像成製作蛋糕的食譜,或是組裝 LEGO 模型時的說明書。只要說明書夠清晰,任何人都能照著做!讓我們馬上開始吧。
1. 什麼是演算法?
簡單來說,演算法(algorithm)就是為了完成一項任務而遵循的一系列步驟。
重要區分:電腦程式(program)是在機器上運行的實際代碼(例如 Python 或 C#)。而演算法則是這些代碼背後的邏輯或「計畫」。
類比:演算法就像是樂譜(紙上的音符),而程式則是實際的音樂演奏。
快速複習:演算法 vs. 程式
• 演算法:計畫/步驟(與程式語言無關)。
• 程式:實作結果(以特定程式語言編寫)。
2. 分解(Decomposition):拆解問題
有時候,一個問題太過龐大,無法一次解決。分解(Decomposition)是指將複雜的問題拆解成更小、更容易處理的部分(子問題)。
每個子問題都應完成一項特定的任務。這些子問題通常可以進一步拆解,直到它們變得容易解決為止。
現實生活範例:如果你想「打掃房子」,你可以將其分解為:
1. 清潔廚房。
2. 吸客廳的地板。
3. 刷洗浴室。
3. 抽象化(Abstraction):專注於重點
抽象化(Abstraction)是指從問題中移除不必要的細節,讓你能夠專注於重要的部分。如果包含太多細節,演算法就會變得令人困惑。
最佳類比:倫敦地鐵圖。
地鐵圖不會告訴你軌道在地下轉彎的確切位置,或是軌道在地底有多深。它移除了這些「細節」(抽象化),只展示你需要知道的資訊:車站以及車站之間的連接。
總結重點:
分解(Decomposition)是將問題拆成碎片。抽象化(Abstraction)是去除雜質。
4. 表示演算法的方法
當我們建立一個演算法時,我們需要一種方式將其記錄下來,以便其他人(和電腦)能夠跟隨。AQA 課程大綱主要強調三種方式:
A. 流程圖(Flowcharts)
流程圖(flowchart)是演算法的視覺化圖表。我們使用特定的形狀代表不同的動作:
• 橢圓形:開始與結束點。
• 矩形:處理程序(例如:計算:總分 = 分數 + 10)。
• 平行四邊形:輸入與輸出(例如:獲取使用者名稱 或 輸出「你好」)。
• 菱形:決策(例如:分數是否 > 50?)。這些通常有兩條路徑:是/否 或 真/假。
B. 偽代碼(Pseudo-code)
偽代碼(Pseudo-code)是一種編寫指令的方式,看起來像程式語言,但使用的是簡單的英文單字。它沒有像真實代碼那樣嚴格的語法規則,但 AQA 有一套考試時會用到的「標準版本」。
範例:
IF 分數 > 50 THEN
OUTPUT "你及格了!"
ELSE
OUTPUT "再試一次。"
ENDIF
C. 程式碼(Program Code)
這是用 Python、C# 或 VB.NET 等程式語言編寫的實際代碼。這是電腦最終執行版本。
5. 輸入、處理與輸出 (IPO)
每一個簡單的演算法都可以用這三個階段來解釋:
1. 輸入(Inputs):進入演算法的數據(例如:使用者輸入年齡)。
2. 處理(Processing):使用該數據進行的計算或決策(例如:檢查年齡是否超過 18 歲)。
3. 輸出(Outputs):演算法產生的結果(例如:顯示「允許進入」)。
你知道嗎?你使用的幾乎所有應用程式,從 TikTok 到計算機,都遵循這個基本的 IPO 模式!
6. 判斷演算法的目的
如果有人給你一個演算法並問你「這是做什麼的?」,有兩種方法可以找出答案:
視覺檢查(Visual Inspection)
這只是簡單地觀察代碼或流程圖,並從邏輯上「閱讀」它,以了解其目標。
追蹤表(Trace Tables)
追蹤表(trace table)是用來追蹤演算法運行時變數值變化的工具。它能幫助你精確地看到每一步發生了什麼事。
追蹤表的步驟:
1. 為演算法中的每個變數建立一列。
2. 為「輸出」建立一列。
3. 逐行遵循指令,並在數值變動時更新表格中的數值。
避免常見錯誤:
使用追蹤表時,千萬不要跳行!即使某個變數在當前步驟沒有改變,也要堅持逐行跟隨邏輯,以確保不會遺漏任何決策(菱形)或迴圈。
快速複習清單
• 演算法:分步計畫。
• 分解:將問題拆解。
• 抽象化:隱藏細節。
• 流程圖:視覺地圖。
• 偽代碼:「模擬」代碼。
• 追蹤表:測試是否有效的工具。
做得好!你已經掌握了演算法表示的基礎知識。記住,演算法只是邏輯路徑——一旦你學會識別輸入和決策的模式,你就能夠解決任何問題!