跳到內容

序言

演算法是一個好的解決問題流程,程式從接收到輸入值在經過處理得到明確的輸出,在電腦科學領域追求著將程序邏輯以更高效的方式處理事情,雖然單個程序的執行消耗可能非常小,但在網站後端或處理大量內容時,演算法的效率會明顯影響系統的延遲和響應速度。對於硬體性能和記憶體有限的嵌入式設備,需要盡可能好的做法來處理內容。

演算法在這個領域以學習的角度來看實際上就是解題和寫程式,從怎麼用代碼寫出需要的內容,到怎麼用更好的方式來運作,下面將展示一個不同做法的差異。

有一個樓梯有 n 階,每次可以走1或2步,有多少種走法

  • 從第0階開始,每次嘗試走1步或2步
  • 對每個可能的選擇再重複同樣的操作,直到到達第n階
class Solution {
public:
int climbStairs(int n) {
return climb(0, n); // 從第0階開始
}
int climb(int current, int n) {
if (current == n) return 1; // 到達頂層
if (current > n) return 0; // 超過頂層
// 從current爬1步或2步
return climb(current + 1, n) + climb(current + 2, n);
}
}

此代碼為LeetCode 70. Climbing Stairs解題範例,輸出在climbStairs函數的return
時間複雜度:O(2ⁿ),在LeetCode提交可以發現超時了

提升解題能力培養演算法程度,是學習寫程式的良好過程,學會演算法的同時,也能輕鬆的編寫複雜的程式邏輯。