歡迎來到演算法的世界!
你好!今天我們要深入探討電腦科學歷程中最重要的一個章節:跟隨與編寫演算法 (Following and writing algorithms)。這是「程式設計 (Program design)」的核心。你可以把演算法想像成電腦的「食譜」。就像廚師需要清楚的指示來烤蛋糕一樣,電腦也需要明確的演算法來解決問題。別擔心一開始覺得有點抽象——看完這些筆記,你就會成為追蹤和轉換演算法的高手!
1. 究竟什麼是演算法?
簡單來說,演算法 (algorithm) 是一連串為了完成任務而必須遵循的步驟。然而,要在電腦科學中被稱為「正式的」演算法,它必須具備一個非常重要的特性:它必須能夠終止 (it must always terminate)。這意味著它不能無止境地運行下去;它必須有一個終點。
現實生活中的類比: 想像你正在教朋友如何泡一杯茶。你可能會說:
1. 把水燒開。
2. 將茶包放入馬克杯。
3. 將開水倒入杯中。
4. 等待 3 分鐘。
5. 取出茶包。
這就是一個演算法!它有明確的開端、一連串的步驟,並且在茶泡好後結束。
你知道嗎?
「演算法 (algorithm)」這個詞其實源自於 9 世紀波斯數學家花拉子米 (al-Khwarizmi) 的名字!他是最早寫下解決數學問題之逐步規則的人之一。
快速複習:
一個演算法必須是:
- 一連串的步驟。
- 能完成特定的任務。
- 保證會結束(終止)。
重點總結: 演算法就是為了解決問題並最終停止而設計的逐步指令。
2. 虛擬碼:通往程式設計的橋樑
在我們使用 Python 或 C# 等語言編寫實際程式碼之前,我們通常會使用虛擬碼 (pseudocode)。虛擬碼並不是電腦可以執行的「真正」程式語言,而是一種用類似英文的詞彙寫出程式邏輯的方法。它的好處是讓你專注於邏輯,而不用擔心漏掉分號或括號。
在考試中,你不會被要求從零開始編寫虛擬碼,但你必須能夠看懂它並跟隨它在做什麼。
常見的虛擬碼術語:
- OUTPUT: 向使用者顯示訊息。
- USERINPUT: 從使用者獲取資訊。
- IF / ELSE: 做決定(選擇結構)。
- WHILE / FOR: 重複執行某項任務(迭代結構)。
記憶小撇步:「白話文」技巧
閱讀虛擬碼時,試著像讀一般句子一樣把它唸出來。例如:"IF score > 50 THEN OUTPUT 'Pass'" 指的就是「如果分數超過 50 分,就告訴使用者他們通過了」。
重點總結: 虛擬碼是用於規劃演算法邏輯的「偽代碼」,其設計目的是讓人們易於閱讀。
3. 將虛擬碼轉換為高階語言
你需要為 Oxford AQA 考試掌握的技能之一,就是將以虛擬碼編寫的演算法轉換為高階語言程式碼 (high-level language program code)(例如 Python、VB.Net 或 C#)。
逐步轉換指南:
1. 識別變數: 找出數據存儲的位置。(例如:Count ← 0 變為 count = 0)。
2. 尋找選擇結構: 將 IF/THEN/ELSE 轉換為你所使用語言的特定語法。
3. 尋找迭代結構: 將 REPEAT/UNTIL 或 WHILE 迴圈轉換為對應的程式碼版本。
4. 檢查邏輯: 確保你的程式碼完全遵循與虛擬碼相同的步驟。
避免常見錯誤:
轉換時不要試圖去「優化」演算法!即使你認為有更快的方法,你的任務是準確地將現有的演算法轉換為程式碼。
重點總結: 轉換就像是把書從一種語言翻譯成另一種語言;保持意義(邏輯)完全相同,但使用新語言正確的語法 (syntax)。
4. 手動追蹤演算法(追蹤表)
如果你覺得演算法很困惑,別擔心!電腦科學家會使用一種稱為手動追蹤 (hand-tracing) 的技術。這涉及像電腦一樣逐行執行演算法,並隨時記錄變數的變化。
進行此操作的最佳工具是追蹤表 (Trace Table)。追蹤表為每個變數提供一欄,並為輸出提供一欄。
如何建立追蹤表:
1. 將所有變數列為欄位標題。
2. 新增一欄作為輸出 (Output)。
3. 逐行跟隨演算法。
4. 每當變數的值發生變化時,就在該變數對應欄位的新列中寫下新值。
範例說明:
想像這個簡單的演算法:
1. X ← 10
2. Y ← 5
3. X ← X + Y
4. OUTPUT X
你的追蹤表看起來會像這樣:
行數 | X | Y | 輸出
1 | 10 | |
2 | 10 | 5 |
3 | 15 | 5 |
4 | 15 | 5 | 15
記憶小撇步:T.R.A.C.E.
T (Table) - 表格: 先把它畫出來。
R (Read) - 閱讀: 目前的程式行。
A (Action) - 動作: 變更變數或輸出。
C (Check) - 檢查: 迴圈結束了嗎?
E (End) - 結束: 當演算法終止時結束任務。
快速複習:
- 每次變化都使用新的一列。
- 永遠不要猜測!嚴格按照寫好的指令執行,即使它們看起來有錯。
- 別忘了記錄最終輸出。
重點總結: 手動追蹤是找出演算法中錯誤(臭蟲/bugs)並準確理解其運作方式的最佳方法。
最後的鼓勵
演算法感覺就像謎題一樣。有時需要嘗試幾次才能解開,這完全沒問題!你練習手動追蹤和轉換虛擬碼的次數越多,操作起來就會越自然。記住,電腦聰明與否取決於你給它的演算法——你才是真正掌控的那個人!
第 3.3.3 章總結:
- 演算法是必須結束的逐步指令。
- 虛擬碼幫助我們規劃邏輯,而無需擔心嚴格的編碼規則。
- 使用追蹤表進行手動追蹤是理解程式執行期間變數如何變化的「秘密武器」。