Chapter 4 圖

糖醋麻辣蝦發表於2018-03-25

Chapter 4 圖

.

1-   圖的儲存結構

無向圖:對稱

有向圖:……

2-   圖的遍歷

1   深度優先搜尋(DFS)

     類似於二叉樹的先序遍歷

2   廣度優先搜尋(BFS)

     類似於二叉樹的層序遍歷

3-   最小(代價)生成樹(針對無向圖)MST

1   Prim演算法  O(|V2|)

     只與頂點數有關,與邊無關

2   Kruskal演算法  O(|E|log|E|)

     只與邊數有關,與頂點數無關

//什麼樣的圖最小生成樹唯一?圖中所有權值不相等。

4-   最短路徑

1   Dijkstra  O(|V2|)

     單源最短路徑

     l  要找出所有節點的最短路徑,需要對每一個結點用Dijkstra O(|V3|)

     l  邊上有負權值,不適用

2   Floyd  O(|V3|)

     求解任意一對頂點間的最短距離

     l  允許帶有負權值的邊,但不允許有負權值邊組成的迴路

5-   拓撲排序  O(|V|+|E|)

1   AOV

     以頂點表示活動,以邊表示活動的先後次序,且沒有迴路的有向圖

2   對有向無環圖的拓撲排序

     可能不唯一:如果有多個入度為0的頂點,可任選一個輸出

6-   關鍵路徑

1   AOE

     活動在邊上的網,與AOV網相比

     相同點:都是有向無環圖

     不同點:AOE網邊表示活動、有權值,表示活動持續時間。頂點表示事件,事件是圖中新活動開始舊活動結束的標誌。

     AOV網邊表示活動之間的相互關係,無權值,頂點表示活動。

     l  只存在一個入度為0的點稱為源點

求關鍵路徑的步驟:

1   拓撲排序

2   事件Vk的最早發生時間Ve(k)

     V1->Vi  max

3   時間Vk的最遲發生時間Vl(k)

     從後向前算 min = 後-max

4   活動ai的最早開始時間e(i)

     邊上首結點的Ve(k)

5   活動ai的最遲開始時間l(i)

     邊上尾結點的Vl(k)-ai

6    d = l(i) - e(i)

//可以通過加快那些在所有關鍵路徑上的關鍵活動來縮短工期

//關鍵路徑不唯一

注:

1-   鄰接矩陣的空間複雜度O(|V2|)

2-   鄰接表—方便找出所有鄰邊(不唯一)

      鄰接矩陣—給定的兩個頂點是否存在邊

3-   十字連結串列—有向圖的鏈式儲存

      容易求得頂點的入度和出度

      圖的十字連結串列表示不唯一,但一個十字連結串列可以唯一確定一個圖。

4-   鄰接多重表是無向圖的另一種鏈式儲存結構

5-   BFS藉助一個輔助佇列,空間複雜度是O(|V|)

      鄰接表O(|V|+|E|),鄰接矩陣O(|V2|)

6-   DFS藉助一個棧,空間複雜度是O(|V|)

      鄰接表O(|V|+|E|),鄰接矩陣O(|V2|)

7-   當各邊權值相等時,廣度優先演算法可以解決單源最短路徑問題。

8-   Prim  O(|V2|)

      Kruskal  O(|E|log|E|)

      Dijkstra  O(|V2|)

      Floyd  O(|V3|)

      拓撲  O(|V|+|E|)

9-   最短路徑一定是簡單路徑

10- 可以判斷有向圖是否有環:深度優先搜尋,拓撲排序

 

相關文章