歡迎來到演算法的世界!
在本章中,我們將一起探索計算機科學的「藍圖」。你可以把演算法想像成一份食譜:在焗製蛋糕之前,你需要一份清晰的步驟清單。同樣地,在電腦執行程式之前,也需要一套明確的指令。如果現在覺得這些概念有點抽象,別擔心,我們會把它們拆解開來,逐一攻破!
你將會學到:
• 如何定義和解釋演算法。
• 如何將大問題拆解成小問題(分解 Decomposition)。
• 如何忽略不重要的細節(抽象 Abstraction)。
• 如何利用流程圖和偽代碼(Pseudo-code)來呈現這些步驟。
• 如何使用追蹤表(Trace tables)來檢查演算法是否正確運作。
1. 什麼是演算法?
簡單來說,演算法(Algorithm)就是為完成某項任務而遵循的一系列步驟。無論你是繫鞋帶還是計算一個數字的平方根,你其實都在執行一個演算法。
重要的區別:
演算法是計劃,而電腦程式則是行動。想像一下建築師的藍圖與實際建成的房子:藍圖就是演算法;而房子就是程式。
比喻:如果你告訴朋友如何泡一杯茶,你就是給了他一個演算法。如果他走進廚房實際去泡茶,他就是在「執行」那個演算法。
快速回顧:演算法是一套指令;程式則是這些指令以電腦能執行的代碼所寫成的版本。
2. 拆解問題:分解 (Decomposition)
有時候,問題看起來太大,簡直不可能解決。分解(Decomposition)的過程就是將複雜的問題拆解成更小、更易於處理的部分(子問題)。
每一個子問題都應該能完成一項特定的任務,你甚至可以將這些子問題進一步再細分!
例子:如果你的問題是「舉辦一個生日派對」,你可以將其分解為:
1. 建立賓客名單。
2. 購買零食。
3. 發送邀請卡。
4. 打掃屋企。
重點總結:將大型任務拆解成小型任務,解決起來會容易得多!
3. 簡化視角:抽象 (Abstraction)
抽象(Abstraction)是從問題中移除不必要的細節,讓你專注於重要部分的過程。如果你加入太多細節,演算法就會變得混亂。
例子:想想倫敦地鐵圖。它並沒有顯示路軌的每一個彎位,也沒有顯示地面上的樹木位置,它只顯示了車站和路線。這就是抽象——它移除了「雜訊」,讓你更容易找到路。
你知道嗎?沒有抽象,電子遊戲根本無法運行!開發人員隱藏了背景中數以百萬計的複雜數學方程,只向你展示螢幕上移動的角色。
4. 呈現演算法
一旦你有了計劃,就需要把它寫下來,讓其他人(和電腦)都能明白。主要有三種方式:
A. 流程圖 (Flowcharts)
這是一種視覺圖表,使用不同的形狀來展示演算法的流程。常見形狀包括:
• 橢圓形:開始或結束。
• 矩形:處理程序(例如計算)。
• 菱形:決策(是非題)。
• 平行四邊形:輸入或輸出。
B. 偽代碼 (Pseudo-code)
這是一種編寫指令的方法,看起來有點像程式碼,但更容易讓人閱讀。它不像 Python 或 C# 那樣有嚴格的語法規則,但 AQA 考試中會使用標準化的版本。
偽代碼例子:
OUTPUT '輸入你的年齡'
USERINPUT age
IF age >= 18 THEN
OUTPUT '你可以投票!'
ELSE
OUTPUT '年齡不足,不能投票。'
ENDIF
C. 程式碼 (Program Code)
這是最終版本,用特定的程式語言(如 Python、C# 或 VB.NET)編寫,電腦可以直接執行。
記憶小撇步:使用 FPP 來記住這三種方法:Flowchart(流程圖)、Pseudo-code(偽代碼)、Program code(程式碼)。
5. 輸入、處理與輸出 (IPO)
每一個簡單的演算法都可以用這三個階段來解釋:
1. 輸入 (Inputs):進入演算法的數據(例如:輸入你的名字)。
2. 處理 (Processing):用來改變或使用該數據的步驟(例如:將兩個數字相加)。
3. 輸出 (Outputs):產生的結果(例如:在螢幕上顯示總和)。
比喻:自動販賣機。
• 輸入:按下「可樂」按鈕並投幣。
• 處理:機器檢查金額是否足夠並定位飲料。
• 輸出:飲料掉進取物槽。
快速回顧:觀察任何演算法時,請試著問自己:它要求什麼?它在做什麼?它顯示了什麼?
6. 確定目標:追蹤表 (Trace Tables)
我們如何知道演算法是否運作正常?我們使用追蹤表 (Trace table)。這是一種透過手動記錄每個步驟中變數的值來測試演算法的技巧,通常被稱為「乾跑」(dry run)。
追蹤表的步驟:
1. 為演算法中的每個變數建立欄位。
2. 逐行跟隨指令。
3. 每當變數發生變化,就在表格的下一行寫下新的數值。
常見錯誤:千萬不要跳行!即使你覺得自己知道答案是什麼,逐行執行演算法仍是找出「邏輯錯誤」(計劃中的錯誤) 的唯一方法。
重點總結:追蹤表能幫助你「像電腦一樣思考」,清楚看到演算法在每一刻的具體行為。
總結:演算法工具箱
• 演算法:一步一步的計劃。
• 分解:將問題拆解成碎片。
• 抽象:隱藏不重要的細節。
• 偽代碼/流程圖:繪製或編寫計劃的方法。
• 追蹤表:檢查計劃以確保其運作正常。
繼續練習吧!演算法就像邏輯謎題。你「追蹤」的次數越多,就越容易理解。