1. 程式人生 > >圖:圖的應用(最小生成樹、拓撲排序、關鍵路徑)

圖:圖的應用(最小生成樹、拓撲排序、關鍵路徑)

一:求最小生成樹

應用場景:例如要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間都可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同,因此另一個目標是要使鋪設光纜的總費用最低。這就需要找到帶權的最小生成樹。

  • 普里姆演算法:

    該演算法的核心就是依次增大連通圖的過程:

    1. 首先任意選擇一個節點,作為一個連通圖
    2. 然後找到與該連通圖相鄰的一個節點(權值最小),連線
    3. 重複上述步驟,知道包含所有結點和 n - 1條邊
      這裡寫圖片描述
  • 克魯斯卡爾演算法:

    該演算法的核心就是依次挑選最小權值的邊的過程:

    1. 將圖中的所有邊都去掉。
    2. 將邊按權值從小到大的順序新增到圖中,保證新增的過程中不會形成環
    3. 重複上一步直到連線所有頂點,此時就生成了最小生成樹。
      這裡寫圖片描述

二:拓撲排序

常用於判斷某個有向圖是否有環。通常再求圖的關鍵路徑前先用拓撲排序來確保圖無環。

拓撲步驟:
1. 在有向圖中選一個沒有前驅的頂點並且輸出。
2. 從圖中刪除該頂點和所有以它為尾的弧。
3. 重複上述兩步,知道全部頂點均已輸出,或者當前圖中不存在無前驅的頂點為止。
注意:有向無環圖的拓撲有序序列不一定唯一。

三:圖的關鍵路徑

主要用來評估工程的完成時間,主要用來解決一下問題:

  1. 完成整個工程至少需要多少時間?
  2. 那些活動是影響工程進度的關鍵?

    這裡寫圖片描述

    如圖所示:假想是一個有7項活動的AOE網,其中有7個事件(V1,V2,V3…V7)。
    每個事件表示在它之前的活動已經完成,在它之後的活動可以開始。
    如V0表示整個工程開始,V7表示整個共結束,V5表示a4和a8已經完成,a9可以開始。

下一節將詳細來給大家講解影響工程的關鍵邊、關鍵路徑、事件和活動的最早最遲執行時間等的求法。