1. 程式人生 > >資料結構筆記——圖

資料結構筆記——圖

圖(Graph)

——2017.12.23

一、 什麼是圖

  1. 表示多對多的關係

  2. 包含

a) 一組定點:通常用V(Vertex)表示頂點集合

b) 一組邊:通常用E(Edge)表示邊的集合 (v,w)∈E,無向邊 <v,w>表示v指向w的邊

  1. 無向圖/有向圖,帶權重的圖稱為網路

二、 鄰接矩陣表示

  1. 鄰接矩陣

用一個長度為N(N+1)/2的一維陣列儲存

例題:有N個頂點的無向完全圖有多少條邊?N(N-1)/2

  1. 鄰接點:有邊直接相連的頂點

  2. 有向圖的度 出度:從該點出發的邊數為出度,指向該點的邊數為入度

三、 鄰接表表示

  1. 鄰接表

四、 圖的遍歷

  1. 深度優先搜尋(Depth First Search)

  2. 廣度優先搜尋(Breadth First Search)

五、 最短路徑

  1. 最短路徑問題抽象:在網路中,求兩個不同頂點之間的所有路徑中邊的權值之和最小的那一條路徑

a) 第一個頂點為:源點

b) 最後一個頂點為:終點

  1. 問題分類

a) 單源最短路徑問題:從某固定源除法,求其到所有其他頂點的最短路徑 無權圖/有權圖

b) 多源最短路徑問題:求任意兩頂點間的最短路徑

  1. 無權圖的單源最短路徑演算法

按照遞增的順序找出到各個頂點的最短路

有權圖的單源最短路演算法

有權圖的單源最短路亦被稱為Dijkstra演算法(單源最短路徑),首先要宣告這個演算法無法解決含有負值圈的圖

六、 最小生成樹(Minimum Spanning Tree)

  1. 什麼是最小生成樹

a) 是一個無迴路的樹,|V|個頂點一定有|V|-1條邊

b) 是生成樹,|V-1|條都在圖裡

  1. 貪心演算法

a) 什麼是貪:每一步都是最好的

b) 什麼是好:權重最小的邊

c) 需要約束:

i. 只能用圖裡有的邊 ii. 只能正好用掉|V|-1條邊 iii. 不能有迴路

d) Prim演算法

e) Kruskal演算法——將森林合併成書

七、 拓撲排序

  1. 什麼是拓撲排序

a) 拓撲序:如果圖中從V到W有一條有向路徑,則V一定排在W之前。滿足此條件的頂點序列稱為一個拓撲序

b) 獲得一個拓撲序的過程就是拓撲排序

c) AOV如果有合理的拓撲序,則必定是有向無環圖

  1. 關鍵路徑問題

a) 由絕對不允許延誤的活動組成的路徑