目录
Big O
Sorting
Search
Graph
Greedy algorithm
Dynamic Programming
Integer Programming
P and NP
Distributed Algorithm
基本問題
河內塔
外部連結
演算法
需考慮到以下幾點:
時間複雜度
空間複雜度
Big O
Sorting
Sorting algorithm
Bubble sort
Quicksort
Bucket sort
$n\log n$
Search
Search algorithm
Binary search algorithm
針對已排序的串列進行搜尋。先與中間元素比較,根據結果與前列或是後列進行遞迴。
Breadth-first search
依序搜尋下層節點。使用 FIFO 佇列。
將根節點放入佇列。
從佇列中取出節點,檢視是否為目標。若否,將其相鄰節點依序放入佇列。重複此步驟直到佇列為空。
Depth-first search
優先搜索至葉節點。使用 LIFO 堆疊。
若葉節點不是目標,退回至最近的節點進行遞迴。
Graph
Shortest path problem
Dijkstra's algorithm
適用於給定起點,且圖中沒有權重為負的邊。
Bellman–Ford algorithm
相對於 Dijkstra's algorithm,可以處理邊上權重為負的圖。
Floyd–Warshall algorithm
原理為動態規劃 (dynamic programming)。
適用於求全局最短路径问题。
Strongly connected component
Minimum cut
Greedy algorithm
Greedy algorithm
適用於局部最佳解可決定全局最佳解的問題。
演算法的下一步都是選擇當下 (局部) 最佳解。
Shortest path problem
Dijkstra's algorithm
Minimum spanning tree
Kruskal's algorithm
Prim's algorithm
Huffman coding
演算法筆記: 貪婪演算法
Dynamic Programming
Dynamic programming
DP = Divide and Conquer + Memoization
適用於具有
最佳子結構 (optimal substructure)
和
重疊子問題 (overlapping subproblems)
的問題。
一個問題切割成數個子問題,其中子問題有所重複,為避免重複計算,動態規劃會將計算結果紀錄成表。演算法過程中會持續查表並加以更新,最終求得解。
Tower of Hanoi
Fibonacci number
遞迴求解過程中,重複解子問題,可動態規劃以減低計算量。
Matrix chain multiplication
演算法筆記: 動態規劃
http://www.avatar.se/molbioinfo2001/dynprog/dynamic.html
Integer Programming
Linear programming
問題包含目標函數和約束條件,若兩者皆可以用線性方程表示,則可以用線性規劃 (linear programming) 求解。
Travelling salesman problem
Vertex cover
Boolean satisfiability problem
P and NP
Distributed Algorithm
定義語意 (semantic)
定義操作 (operation)
假設有哪些失敗
The Power of Abstraction
Security of Internet Storage
Byzantine fault tolerance
Distributed Algorithms
基本問題
河內塔
河內塔
演算法筆記: Tower of Hanoi
外部連結
演算法筆記
非關語言: 常見程式演算