演算法(Algorithm)是在有限時間內,為了解決特定問題而設計的一組明確步驟或規則,用來從輸入推導出對應的輸出。它是電腦程式的核心邏輯,本質上就是「怎樣一步一步把事情做完」。
一、演算法的正式定義與特性
在數學與電腦科學中,演算法通常被定義為:由有限且定義清楚的一系列指令所組成,執行時從初始輸入開始,經過有限步驟後產生輸出並停止。
常見的幾個關鍵特性如下:
-
明確性:每一步指令必須有清楚、不含糊的描述,相同輸入在相同條件下結果應一致。
-
有限性:必須在有限步驟、有限時間內結束,而不能無限循環。
-
可行性:每一步在實際運算上都能有效執行,且所需資源(時間、記憶體)在可接受範圍內。
-
輸入與輸出:可以有零個或多個輸入,至少有一個明確的輸出結果。
二、演算法與程式的關係
一個程式可以視為「資料結構 + 演算法 + 程式語言與開發環境」的組合,其中演算法負責描述如何操作與處理資料,是程式的「靈魂」。
-
資料結構:資料如何被儲存與組織,例如陣列、鏈結串列、樹、圖。
-
演算法:針對這些資料要執行的具體步驟,例如搜尋、排序、遍歷、更新。
-
程式語言與工具:將演算法以程式碼形式實作並在電腦上執行。
在實務上,「先設計演算法,再用程式語言實作」是一個標準流程,良好的演算法設計往往比單純的語法技巧更為關鍵。
三、演算法的用途與例子
演算法可用於計算、資料處理與自動推理等多種任務,是電腦處理資訊的核心機制。
常見應用示例:
-
排序:如氣泡排序、快速排序,用來將資料依大小或字典序排列。
-
搜尋:如線性搜尋、二元搜尋,從資料集中找出目標項目。
-
最佳化與路徑:如最短路徑演算法,用於導航、物流規劃。
-
資料處理:如統計計算、成績單列印、薪資計算等商業邏輯。
-
平台與推薦:社群媒體、影音平台的推薦、廣告投放排序等,也都是一種「決策演算法」。
一個日常化比喻是把演算法想成「食譜」:食材是資料,食譜上的每一個步驟是指令,照著步驟做完,就得到預期的菜餚結果。
四、演算法設計與分析
設計演算法時,會先建立問題的抽象模型並明確求解目標,然後選擇合適的方法與步驟來完成。
常見考量包括:
-
正確性:對所有合法輸入都能產生正確輸出。
-
時間複雜度:執行所需時間大致如何隨輸入規模成長(例如以 nn 表示輸入大小時的成長階)。
-
空間複雜度:需要多少額外記憶體。
-
可維護性與可讀性:是否易於理解、除錯與改進。
在教學與實務中,演算法分析常用來比較不同方案的效率,例如對同一批資料,快速排序通常比氣泡排序在大多數情況下更有效率。
五、電腦演算法的類型與分類
電腦可執行的演算法大致可分為數值運算與非數值運算兩大類。
-
數值運算演算法:處理數值計算,例如代數運算、方程解法、數值近似。
-
非數值運算演算法:處理事務、文字或結構化資料,例如檔案管理、帳務系統、資料庫查詢。
此外,演算法也可依策略與結構進一步分類(例如分治法、貪心法、動態規劃、回溯法等),這些屬於演算法設計的典型模式,幫助在不同問題上重複運用成熟思路。