資料結構筆記——圖
阿新 • • 發佈:2018-12-11
圖(Graph)
——2017.12.23
一、 什麼是圖
-
表示多對多的關係
-
包含
a) 一組定點:通常用V(Vertex)表示頂點集合
b) 一組邊:通常用E(Edge)表示邊的集合 (v,w)∈E,無向邊 <v,w>表示v指向w的邊
- 無向圖/有向圖,帶權重的圖稱為網路
二、 鄰接矩陣表示
- 鄰接矩陣
用一個長度為N(N+1)/2的一維陣列儲存
例題:有N個頂點的無向完全圖有多少條邊?N(N-1)/2
-
鄰接點:有邊直接相連的頂點
-
有向圖的度 出度:從該點出發的邊數為出度,指向該點的邊數為入度
三、 鄰接表表示
- 鄰接表
四、 圖的遍歷
-
深度優先搜尋(Depth First Search)
-
廣度優先搜尋(Breadth First Search)
五、 最短路徑
- 最短路徑問題抽象:在網路中,求兩個不同頂點之間的所有路徑中邊的權值之和最小的那一條路徑
a) 第一個頂點為:源點
b) 最後一個頂點為:終點
- 問題分類
a) 單源最短路徑問題:從某固定源除法,求其到所有其他頂點的最短路徑 無權圖/有權圖
b) 多源最短路徑問題:求任意兩頂點間的最短路徑
- 無權圖的單源最短路徑演算法
按照遞增的順序找出到各個頂點的最短路
有權圖的單源最短路演算法
有權圖的單源最短路亦被稱為Dijkstra演算法(單源最短路徑),首先要宣告這個演算法無法解決含有負值圈的圖
六、 最小生成樹(Minimum Spanning Tree)
- 什麼是最小生成樹
a) 是一個無迴路的樹,|V|個頂點一定有|V|-1條邊
b) 是生成樹,|V-1|條都在圖裡
- 貪心演算法
a) 什麼是貪:每一步都是最好的
b) 什麼是好:權重最小的邊
c) 需要約束:
i. 只能用圖裡有的邊 ii. 只能正好用掉|V|-1條邊 iii. 不能有迴路
d) Prim演算法
e) Kruskal演算法——將森林合併成書
七、 拓撲排序
- 什麼是拓撲排序
a) 拓撲序:如果圖中從V到W有一條有向路徑,則V一定排在W之前。滿足此條件的頂點序列稱為一個拓撲序
b) 獲得一個拓撲序的過程就是拓撲排序
c) AOV如果有合理的拓撲序,則必定是有向無環圖
- 關鍵路徑問題
a) 由絕對不允許延誤的活動組成的路徑