演算法需考慮到以下幾點:
- 時間複雜度
- 空間複雜度
Big O
Sorting
$n\log n$
Search
-
-
- 針對已排序的串列進行搜尋。先與中間元素比較,根據結果與前列或是後列進行遞迴。
-
- 依序搜尋下層節點。使用 FIFO 佇列。
- 將根節點放入佇列。
- 從佇列中取出節點,檢視是否為目標。若否,將其相鄰節點依序放入佇列。重複此步驟直到佇列為空。
-
- 優先搜索至葉節點。使用 LIFO 堆疊。
- 若葉節點不是目標,退回至最近的節點進行遞迴。
-
Graph
-
-
- 適用於給定起點,且圖中沒有權重為負的邊。
-
- 相對於 Dijkstra's algorithm,可以處理邊上權重為負的圖。
-
- 原理為動態規劃 (dynamic programming)。
- 適用於求全局最短路径问题。
-
Greedy algorithm
-
- 適用於局部最佳解可決定全局最佳解的問題。
- 演算法的下一步都是選擇當下 (局部) 最佳解。
-
-
Dynamic Programming
-
- DP = Divide and Conquer + Memoization
- 一個問題切割成數個子問題,其中子問題有所重複,為避免重複計算,動態規劃會將計算結果紀錄成表。演算法過程中會持續查表並加以更新,最終求得解。
-
- 遞迴求解過程中,重複解子問題,可動態規劃以減低計算量。
Integer Programming
-
- 問題包含目標函數和約束條件,若兩者皆可以用線性方程表示,則可以用線性規劃 (linear programming) 求解。
P and NP
Distributed Algorithm
- 定義語意 (semantic)
- 定義操作 (operation)
- 假設有哪些失敗