演算法 期末考 筆記
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
課本習題的解答多看有益身心健康
https://walkccc.me/CLRS/Chap24/24.3/
https://sites.math.rutgers.edu/~ajl213/CLRS/CLRS.html
ch12 Binary Search Trees
-
INORDER_TREE_WALK(x)
- Θ(n)
- 補充:Inorder、Preorder、Postorder tree walk
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
TREE_SEARCH(x, k)
-
ITERATIVE_SEARCH(x, k)
- 例題12.2-1 哪個組合不可能是BST search 363的過程?
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 參考答案:c、e是錯的
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 例題12.2-4 Professor Bunyan發現一個屬性
search path左邊的所有節點a < search path上的所有的節點b < search path右邊的所有節點c
解釋是否正確?
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 參考答案:不正確 (以下範例假設要search key 4)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
TREE_MINIMUM(x)
-
TREE_MAXIMUM(x)
-
TREE_SUCCESSOR(x)
-
如果x.right不是null,先找x右子樹的最小值TREE-MINIMUM(x.right) (ex.15的successor為17)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
如果x.right是null,往上找x的祖先y,直到找到第一個y的左子樹是x的祖先 (ex.13的successor為15)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- The dynamic-set operations:O(h)(tree of height h)
- 例題12.2-5 證明一個node有兩個小孩,則他的successor沒有左邊小孩,他的predecessor沒有右邊小孩
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 參考解答:
假設node x有兩個小孩
x的successor是x的right tree中最小的,不可能還有左邊小孩
x的predecessor是x的left tree中最大的,不可能還有右邊小孩
-
Tree-Insert(T, z)
-
Tree-Delete(T, z)
- O(h)
- Transplant(T, u, v)
- Replace the subtree of u with the subtree of v
- TREE_MINIMUM(x)
Deletion
- z has no children
- z has just one child
a. 若z.left = NIL,z.right取代z
b. 若z.right = NIL,z.left取代z
- z has two children
取y為Tree-Minimum(z.right)
c. 若y.p=z,y取代z,z的左子樹變成y的左子樹
d. 若y.p!=z,先將y的右子樹取代y,再將y取代z,z的左子樹變成y的左子樹
(這裡要注意y是z的右子樹的最小值,不會有left,所以圖上y.left都畫NIL)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
The dynamic-set operations:O(h)
ch13 Red-Black Trees
-
13.1 Properties of red-black tree
- 在最壞的情況下花費O(log n)時間
- 紅黑樹是一種BST額外增加一個bit紀錄顏色(紅/黑)
- 透過顏色標記的限制方式,讓the root to a leaf的path不會超過其他path的兩倍,使BST大約平衡
- 符Red-Black Tree的條件(可能會考如何判斷是不是紅黑樹 ex.課本例題13.1-2)
1.每個點不是紅就是黑
2.root是黑色
3.所有leaf(NIL)是黑色
4.如果某個節點是紅色,那他的小孩一定是黑色
5.以某個節點為起點,往下到所有葉子的的路徑上的黑點數量相同
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- Lemma13.1:A red-black tree with n internal nodes has height at most 2lg(n+1).
-
13.2 Rotations
- The code for RIGHT-ROTATE is symmetric.
- Both LEFT-ROTATE and RIGHT-ROTATE run in O(1) time.
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 可能會考如何畫rotation前後如何畫圖(ex.如下圖)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
13.3 Insertion
- O(lg n)
- Insert Node的方法和Binary Search Tree大致相同相同,假設insert Node z,最後要分別做以下動作讓樹的結構還是一個RB-Tree
- z.left=NIL
- z.right=NIL
- z.color=Red
- RB-INSERT-FIXUP(T, z)
- RB-INSERT-FIXUP(T, z)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- Insert後如果z的parent是Red時
- 如果z的parent是z的爺爺的左邊小孩(z.p=z.p.p.left),有三種情況與處理方式
Case 1: z’s uncle y is red
ToDo:將z的parent和z的uncle顏色換成black,把z的爺爺換成red,z變成的爺爺(z=z.p.p),如圖a到圖b的過程
Case 2: z’s uncle y is black and z is a right child
ToDo:z變成z的parent(z=z.p),進行LEFT-ROTATE(T, z),如圖b到圖c的過程
Case 3: z’s uncle y is black and z is a left child
ToDo:將z的parent變成黑色,將z的爺爺變成紅色,再進行RIGHT-ROTATE(T, z.p.p),如圖c到圖d的過程
重要:最後要把root圖黑(無論如何root一定要是黑色!!!)
- 如果z的parent是z的爺爺的右邊小孩(z.p=z.p.p.right)的三種情況與處理方式,只要把上面情況的left/right互換即可
- 要隨時注意z和y的位置變化比較好理解
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 例題13.3-2 Show the red-black trees that result after successively inserting the keys 41; 38; 31; 12; 19; 8 into an initially empty red-black tree.
- 參考答案:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
13.4 Deletion
- O(lg n)
- RB-DELETE(T,z)
- 如果被刪除的節點是紅色 => RB tree的平衡還在
- 如果被刪除的節點是黑色 =>會違反RB Tree的原則,要執行RB-DELETE-FIXUP
- RB-DELETE-FIXUP(T, x)
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-如果x不是root && x是黑色
- 觀念:不管x點是紅還是黑,y少掉的黑帶在x身上 => 只要是x都多帶一個黑
- 如果x是x的parent的左邊小孩(x=x.p.left),有四種情況與處理方式
Case 1: x’s sibling w is red
ToDo:w塗黑,x的parent塗紅,LEFT-ROTATE(T, x.p),new w為x.p.right,如圖a
Case 2: x’s sibling w is black, and both of w’s children are black
ToDo:w塗紅,new x為x.p,如圖b
Case 3: x’s sibling w is black, w’s left child is red, and w’s right child is black
ToDo:w塗紅,w.left塗黑,RIGHT-ROTATE(T,w),new w為x.p.right,如圖c
Case 4: x’s sibling w is black, and w’s right child is red
ToDo:w塗x的parent的顏色,x的parent塗黑,LEFT-ROTATE.T(x,p),new x為T.root,如圖d
重要:最後要把x(root)塗黑(無論如何root一定要是黑色!!!)
- 如果x是x的parent的右邊小孩(x=x.p.right),有四種情況與處理方式,只要把上面情況的left/right互換即可
- 要隨時注意x和w的位置變化比較好理解
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- 例題13.4-3 依照13.3-2的結果依序刪除8; 12; 19; 31; 38; 41.
- 參考答案:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
ch18 B-Trees
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
ch19 Fibonacci Heaps
-
Structure of Fibonacci heaps

- 上層為root list,root list最小的點為H.min
- 曾經失去一個小孩就會變成黑色(H.mark=true)
- 變成別人小孩就會變成白色(H.mark=false)
-
Potential function
= number of trees + 2 * number of marks
-
Maximum degree
- D(n) = O(lg n) → 任何人的小孩個數頂多lgn個
-
Creating a new Fibonacci heap
-
Inserting a node
- O(1)
- Fib-Heap-Insert(H, x)
- 將key insert到root list,通常放在H.min的左邊,如果新增的key比較小就指定為H.min,以下為insert key 21的範例

-
Finding the minimum node (找最小值)
- O(1)
- Minimum(H)
- 最小值在H.min
-
Uniting two Fibonacci heaps (將H1、H2合併)
- O(1)
- Fib-Heap-Union(H1, H2)
- 將H1、H2的root list連在一起,再比較H1.min和H2.min誰比較小,指定為新的Heap的H.min
-
Extracting the minimum node(取出最小值)
- O(D(n)) = O(lg n)
- Fib-Heap-Extract-Min(H)
- z=H.min,將z的兒子都放到root list,取出z,並指定z的右邊root為新的H.min,如圖b
- 從H.min往右使用一個陣列紀錄degree,若遇到將相同degree的root就做合併,小的當root,一直到沒有相同degree的root,如圖c到l
- 將root list最小值指定為H.min,如圖m


-
Decreasing a key (把某個key的值變小)
- O(1)
- Fib-Heap-Decrease-Key(H, x, k)
- 用途:將key變小,就可以用Extracting the minimum node方法將key刪除
- 步驟: *每人最多失去一個孩子,若超過,移到root list
- 將key值變小後放到root,如果key原本的parent為白色(H.mark=false),則塗成黑色,如圖b、c
- 如果放到root的key原本的parent是黑色(H.mark=true),也要放到root,如圖d
- 重新指定H.min
- 以下舉例46→15和35→5

-
Deleting a node
- O(D(n)) = O(lg n)
- FIB-HEAP-DELETE(H, x)
- 將要刪除的key值變成負無限大 → FIB-HEAP-DECREASE-KEY(H,x,-∞)
- 取出最小值後刪除 → FIB-HEAP-EXTRACT-MIN(H)
ch21 Data Structures for Disjoint Sets
-
Disjoint Sets:「互斥集」的意思是一堆集合們,大家擁有的元素都不相同,也就是說這些集合們之間都沒有交集。
- ex. A = {1,2,3} B={4,5,6} C={1,2,7},則AB構成Disjoint Sets,AC不構成Disjoint Sets。
-
Disjoint Set的操作:
- MAKE-SET(x):MAKE 建立一個只含x的set。因為互斥,所以x不能在其他集合出現過。
- UNION(x,y):Union 是將兩個含有x和y的集合合併。
- FIND-SET(x):Find 則是查詢某個元素所在的集合。
-
參數定義:
- m:總共有m個opterations(make、union、find)
- n:其中包含n個make operations
-
CONNECTED-COMPONENTS:一開始將每個點單獨看成不同的集合,對於每一條edge(u,v),假設u,v在不同的集合之內,就將包含他們的集合聯集起來,最後看剩下幾個集合,就是有幾個connected component。
- 例題21.1-1

- 參考答案:

-
Linked List v.s. rooted tree
|
linked List |
rooted tree |
make |
O(1) |
O(1) |
union |
O(n^2) 費時 |
O(α(n)) 快 |
find |
O(1) 快 |
O(mα(n)) 慢→快 |
- α(n)是Ackermann’s function的反函數,其成長速率非常慢。在所有可能的應用中,α(n) <= 4 (近乎常數頂多是4)
- rooted tree的find function本來很慢改善後可以變快→O(mα(n)) worst case
-
Linked-list representation of disjoint sets
- A simple implementation of union(不考慮每個set的長度)
- 以序列中第一個元素當作代表人(representative)。


- A weighted-union heuristic(考慮每個set的長度,短的併到長的)
- 每一個representative存放其代表的序列的長度。
- 把較短的序列附加在較長的序列之後。(可以節省union時間)
-
Disjoint-set forests (rooted tree)
- Tree的root為代表人(representative)。

- 改善running time的方法:
- Union by rank: 由較小高度的的tree的root連到較大的tree的root。
- Path compression: 在執行Find-Set(x)過程中,把所有經過的node都掛在root底下。 (壓縮)

ch22 Elementary Graph Algorithms (初級圖演算法)
22.1 Representations of graphs(圖形表示)
- 無方向(Undirected graph: no orientation is specified)
- 有方向(Directed graphs: Oriented, the adjency matrix is not necessarily symmetric)
- 矩陣 [adjacency-matrix representation (dense)]
- 串列 [adjacency-list representation (sparse)]
- 無方向:矩陣&串列表示法

- 有方向:矩陣&串列表示法

22.2 Breadth-first Search (BFS:廣度優先)
- BFS(G,s):圖形G中,計算s到其他點的最短距離
- Analysis Complexity:O(V+E)
- 應用:Queue(先進先出);ENQUEUE(Q,s):s放入Queue中;DNQUEUE(Q):Queue中取值
- 屬性
- color:顏色註記[白色(未搜尋過),灰色(已搜尋過,丟Queue中)和黑色(搜尋完成,沒有相鄰點,移出Queue)]
- d:距離(distance )
- π:前一個節點
- adj[u]:u點相鄰的點集合

- line:1-8,初始化
- line:1-4,s外的點給予初值
- line:5-7,s點給予初值
- line:8,Queue給予初值
- line:9,起點s放入Queue中,透過Queue的特性完成廣度優先搜尋
- line:10,持續執行到Queue為空為止 (loop level1)
- line:11,取出Queue的值為u
- line:12,將u相鄰的點依序取出為v (loop level2)
- line:13-17,若v顏色為白色者(未搜尋過)則註記為灰色,將該點v的距離(d)紀錄為u的距離加1,並留下v的前一個節點(π)為u後放入放入Queue中
- line:18,將u標記為黑色視為以搜尋完成所有相鄰的點

參考網址:Graph: Breadth-First Search(BFS,廣度優先搜尋)
http://alrightchiu.github.io/SecondRound/graph-breadth-first-searchbfsguang-du-you-xian-sou-xun.html
- Shortest paths:當我們用BFS找端點對端點最短路時,從出發點開始,第一次遍歷到終點時過的那條路徑就是最短的路徑。
22.3 Depth-First Search (DFS:深度優先)
- Complexity:O(V+E)
- 應用:Recursion的方式做深度優先持續往下鑽
- 屬性
- color:顏色註記[白色(未拜訪過),灰色(已拜訪過,可拜訪相鄰的點)和黑色(拜訪完成,沒有相鄰點可拜訪)]
- d:發現(discovered)
- f:完成(finished)
- π:前一個節點
- adj[u]:u點相鄰的點集合

- line:1-3,loop所有點初始化
- line:4,time初值
- line:5-7,loop所有點u,判斷白色(未拜訪過)的點後執行[DFS-VIST(G,u) Recursion]recurse

- line:1-3,透過time累計拜訪次數,並將目前次數賦予目前拜訪的點 u.d 後將該點顏色註記為灰色
- line:4-7,loop所有u相鄰的點v,判斷白色(未拜訪過)的點,紀錄前一個節點(π)為u後執行[DFS-VIST(G,v) Recursion]recurse
- Classification of edges:
- Tree edges:2-4以外的邊。
- Back edges(B):經過的邊拜訪到的點為灰色時。
- Forward edges(F):經過的邊拜訪到的點為黑色時。
- Corss edges©:不同component的edge。

參考網址:Graph: Depth-First Search(DFS,深度優先搜尋)
http://alrightchiu.github.io/SecondRound/graph-depth-first-searchdfsshen-du-you-xian-sou-xun.html
22.4 Topological Sort (拓撲排序)
- 有方向無循環(directed acyclic graph)
- 正確的Topological Sort可能不止一種

- 透過DFS(G)計算各節點完成時間(標記黑色的順序)
- 將各節點完成時間由大到小排序

- 做DFS下鑽到最後一個點時,因沒有相鄰的而返回表示無循環;反之,有相鄰的點但皆為灰色點而返回表示有循環
參考網址:Graph: 利用DFS尋找DAG的Topological Sort(拓撲排序)
http://alrightchiu.github.io/SecondRound/graph-li-yong-dfsxun-zhao-dagde-topological-sorttuo-pu-pai-xu.html
22.5 Strongly connected components (強關聯元件)

- 透過DFS(G)計算各節點完成時間(u.f:標記黑色)[如下圖(a)]
- 將圖的所有方向顛倒產生GT(Transpose of Graph)[如下圖(b)]
- 透過DFS(GT)計算,DFS主程式的loop按line:1的完成時間(u.f)遞減順序執行
- line:3運行DFS主程式的loop每判斷為白色(未拜訪過)做recurse為一個component(each tree in the depth-first forest)

- component graph一定是directed acyclic graph(DAG)。
參考網址:Graph: 利用DFS尋找Strongly Connected Component(SCC)
http://alrightchiu.github.io/SecondRound/graph-li-yong-dfsxun-zhao-strongly-connected-componentscc.html
ch23 Minimum Spanning Trees (MST,最小生成樹)
- 從圖中找出最小生成樹(MST)的問題
- 無向圖(undirected graph),端點都有連接(connected)且有權重(weight)的圖,希望找出沒有循環並能連接所有點的子集合,且總權重要是最小的。
- Spanning Tree:沒有循環且連結所有點

23.1 Growing a minimum spanning tree

- line:1,A為邊的空集合,初始化
- line:2-4,A集合還未形成spanning tree下,持續loop找出一個對A集合是安全(safe)的邊(edge)後,聯集(union)到A集合中。
- 安全(safe)定義:區分點(vertex)的集合和邊(edge)的集合,演算法中為邊(edge)的集合,而以下定義有部分在說點的集合。
- 名詞解釋:
- cut(切割):點(vertex)集合,分成兩部分的partition(分割),spanning tree用的點集合
- crosses(交叉):邊(edge)集合,一個邊(edge)串連cut的partition與圖其他點的邊,稱為crossing edge
- respects(尊敬):Set A中沒有任何一條edge是crossing edge
- light edge(輕量邊):crossing edge中權重(weight)最小的邊
- 定理1:符合四點表示安全(safe)
- 圖要相連、有權重且無方向的圖
- 集合A是MST的子集合
- 集合A要有respects
- line:3找的邊要為crossing edge且要是light edge
- 推論2:如下集合A的connected component也符合安全(safe)
- 同定理1,2點的情境
- 集合A中的數個connected component皆可視為一棵樹
- 連結各個connected component的light edge(同定理4)
參考網址:Minimum Spanning Tree:Intro(簡介)
http://alrightchiu.github.io/SecondRound/minimum-spanning-treeintrojian-jie.html
- Kruskal and Prim summary
- Kruskal’s algorithm:所有邊找權重由小到大完成MST
- Prim’s algorithm:從一個起始點開始往外找每個點相鄰的最小權重的邊
23.2 Algorithms of Kruskal and Prim
Kruskal’s algorithm

- line:1-3,初始化
- line:4,把圖的所有邊(edges)以權重(weight)由小到大做排序
- line:5-8,loop所有邊(edges)依權重由小到大運行,判斷邊 u 和 v 在不同集合中,便將邊(u,v)放入A集合中,u 和 v 的點集合聯集


參考網址:Minimum Spanning Tree:Kruskal's Algorithm
http://alrightchiu.github.io/SecondRound/minimum-spanning-treekruskals-algorithm.html
Prim’s algorithm

- line:1-4,初始化
- line:5,所有點丟入a min-priority queue Q based on a key attribute
- line:6-7,Queue中取出最小的做為 u 至Queue取空為止 (loop level 1)
- line:8-11,所有 u 的相鄰的點依序取出為 v (loop level 2),判斷 v 點仍存在於Queue中,且 u 到 v 之間的權重找最小者

參考網址:Minimum Spanning Tree:Prim's Algorithm
http://alrightchiu.github.io/SecondRound/minimum-spanning-treeprims-algorithm.html
ch24 Single-Source Shortest Paths
-
shortest-path weight δ(u,v) from u to v

-
v.d = d[v]指的是目前到v點的距離
v.π指的是v的前一個點(predecessor)
-
single-source shortest-paths problem與他的三種變形 (Variants)
- single-source shortest-paths problem
從單一vertex,抵達Graph中其餘所有vertex之最短路徑。(一對多)
- Single-destination shortest paths problem
從Graph中的每一個vertex抵達某個特定vertex之最短路徑,剛好與第1種問題的子問題相反。(多對一)
- Single pair shortest path problem
從單一vertex,抵達某個特定vertex之最短路徑,此為第1種問題的子問題。(一對一)
- All-pair shortest paths problem
Graph中的所有vertex抵達其餘所有vertex之最短路徑。(多對多)
- 若把每一個vertex都當作起點,即可利用第1種問題之方法解決。
- 不過Ch25介紹的Floyd-Warshall Algorithm有更好的答案。
-
Optimal substructure of a shortest path
-
Optimal substructure定義:原問題的最佳解是由其子問題得的最佳解算出來的
-
Lemma 24.1. Subpaths of shortest paths are shortest paths(最短路徑中的子路徑也都是最短路徑)

-
順帶一提:最長路徑不為Optimal substructure
-
Negative-weight edge/cycle
- 最短路徑的weight可正可負,但不能包含負的cycles(Negative cycles),因為一直繞會變-∞
ex.下圖的ef和hij,都造成Negative cycles使結果變成-∞

-
Shortest paths are not necessarily unique, and neither are shortest-paths trees
Shortest paths可以有多組解,如下圖b和c陰影路徑都呈現了最短路徑的解,都以s為起點但結構不同的shortest-paths trees

-
Relaxation 鬆弛
考慮是否使用u→v這條線edge(u,v)會比較好?
如果v.d > u.d + w(u,v),則可以走edge(u,v)
此時紀錄v.d的值為u.d + w(u,v),v.π = u
time complexity= O(1)


- Properties of relaxation (不想看就跳過)

-
The Bellman-Ford algorithm 貝爾曼-福特演算法
-
Single-source shortest paths in directed acyclic graphs(有向無環圖)
- Time complexity O(V+E)
- 先把topological sort做完,再沿路relax


- 補充:
之前說過shortest path是簡單的題目,longest path是難的題目,但是如果是directed acyclic graphs(有向無環圖),則longest是簡單的題目。
-
Dijkstra’s algorithm 戴克斯特拉演算法
-
Time complexity O(V^2) (使用BFS方法)

-
權重不能有負號
-
模擬BFS方法沿路relax,但途如果有多個點可以走,EXTRACT_MIN(Q)取值最小的點繼續往下走,如圖b(5比10小),如圖c(7比8和14小),以此類推,直到所有點都已經塗黑
-
EXTRACT_MIN(Q)即是採用Greedy strategy


ch25 All-Pairs Shortest Paths
25.1 Shortest paths and matrix multiplication
25.2 The Floyd-Warshall algorithm
Transitive closure of a directed graph (傳遞閉包)


ch26 Maximum Flow
26.1 Flow networks
Flow networks and flows
26.2 The Ford-Fulkerson method (福特福克森方法)
計算網絡流的最大流的貪心算法。 之所以稱之為「方法」而不是「算法」,是因為它尋找增廣路徑的方式並不是完全確定的,而是有幾種不同時間複雜度的實現方式。
FORD-FULKERSON-METHOD(G,s,t)
三個重要應用:
- Residual networks (剩餘網路)
- Augmenting paths
- Cuts
Residual networks (剩餘網路)
residual capacity (剩餘容量)
Augmenting paths
Cuts
S在左;T在右,中間切一刀
Corollary 26.5
The value of any flow f in a flow network G is bounded from above by the capacity of any cut of G.
流量網絡G中任何流量f的值都由G的任意割斷的能力從上方限制。
Theorem 26.6 (Max-flow min-cut theorem)
The basic Ford-Fulkerson algorithm
FORD-FULKERSON(G,s,t)
running time:O(E|f*|)
26.3 Maximum bipartite matching
最多的配對

ch |
algorithm |
Complexity |
ch12 |
Binary Search Trees |
O(h) |
ch13 |
Red-Black Trees |
O(log n) |
ch18 |
B-Trees |
O(th)=O(t logtn) |
ch19 |
Fibonacci Heaps |
O(lg n) |
ch21 |
Data Structures for Disjoint Sets |
O(mα(n)) |
ch22 |
Elementary Graph Algorithms |
O(V+E) |