算法是解決問題的有限步驟序列。本文依據經典定義,闡述算法必須具備的五大核心特性,並說明其對程式設計的指導意義。
| 特性 | 定義 | 工程意義 |
|---|---|---|
| 有窮性 | 算法必須在有限步驟後終止,不能無限執行 | 避免死循環;遞歸需有基準情況;迴圈需有收斂條件 |
| 確定性 | 每一步驟定義明確、無歧義,相同輸入必產生相同輸出 | 拒絕「視情況而定」的模糊描述;條件分支條件必須精確 |
| 輸入 | 零個或多個輸入(初始數據、參數) | 函數參數、讀取文件、用戶輸入、環境變量等 |
| 輸出 | 一個或多個輸出(結果、狀態變化) | 返回值、寫入文件、打印輸出、修改全局狀態等 |
| 有效性 | 每步驟皆可在有限時間內用基本操作完成,並產生確定結果 | 拒絕「無限精度計算」「解決停機問題」等理論不可計算操作 |
<= vs <)是否明確?==?| 違反特性 | 代碼片段 | 後果 |
|---|---|---|
| 有窮性 | while (1) { ... } // 缺 break | 死循環,程式掛起 |
| 確定性 | if (x > 0) ... // x 為浮點數,極小正數判斷不穩 | 邊界行為不可預測 |
| 有效性 | // 試圖精確計算 π 的所有位數 | 無法在有限時間完成 |
五大特性是算法的「身份證」。程式設計師不僅要會寫代碼,更要會設計滿足五大特性的算法。將特性檢查內化為編碼前的肌肉記憶,能從源頭消除大類邏輯 Bug。