圖論經典算法整理

草稿箱放風2.0。躺了幾個月到幾年不等的草稿們終於迎來了春天。


之前在《數據結構》的課程、《離散數學》的課程,甚至《計算機圖形學》中都接觸過圖論算法,現在網上搜羅若干經典圖論算法,以便後用。

1-3中,待求網絡是帶權圖,所謂的“短”和“小”指的是權值最小。

1. Dijkstra算法

求單源最短路徑的算法。即求網絡中某個特定點v到網絡中其他所有節點的最短路徑。

2. Floyd算法

求網絡中任意兩點間最短路徑的算法。

3. Prim算法

求連通圖中最小生成樹的算法。

最小生成樹即由網絡中的節點和邊組成的樹,該樹連接了網絡中的所有節點。

4. 拓撲排序算法

給有向無環圖中的節點排序:若(i,j)是網絡中的邊,則在排序中i在j的前面。 

應用:有向無環圖可看成AOV活動網。節點可看作某種活動,邊(i,j)表示活動i必須先與活動j進行。如,一個學生選課,數據結構的先修課是計算機基礎,那麼只有修完計算機基礎之後才能修數據結構。拓撲排序相當於給出了一個上課的順序。

5. 最大流問題

最大流研究的網絡用G(V,E,C)表示。其中,V,E,C分別表示節點集合,邊集合,以及邊的容量集合。

網絡的最大流,即在一個單源點,但匯點的網絡流中找到一條容量最大的路徑。

對於多源點、多匯點的情況:在網絡中增加s和t兩個點,其中s連接所有源點,t連接所有匯點,連邊的權重設爲無窮。

6. 最小割問題

割:設網絡中一些弧的集合爲C。若在網絡中去掉C中所有弧能使得從源點s到匯點t的路集爲空,稱C爲s和t間的一個割。

最小割:圖中所有割中,邊權值和最小的割。

最小割定理:任一網絡中,從s到t的最大流的流量等於分離s,t的最小割的容量。

求最大流的算法:Ford-Fulkerson算法。通過尋找增光路徑的方法尋找最大流。即,先找到一條可行流,計算其流量。詳情參照:https://blog.csdn.net/ivan_zgj/article/details/51580993http://www.zhiblue.com/xinxi/guangdian/201311/119.html

應用:物流配送規劃,二分圖匹配問題

7. 最小費用最大流

此問題研究的網絡用G(V,E,C,W)表示。其中,V,E,C,W分別表示節點集合,邊集合,邊的容量集合,以及邊的費用。

求出的是,流量v(f)最大的前提下,使流的費用cost(f)最小的路徑。

8. 二分圖匹配問題:匈牙利算法

可參考:https://blog.csdn.net/m0_37719760/article/details/77607666https://blog.csdn.net/c20180630/article/details/70175814

給二分圖兩邊的節點兩兩配對。中心思想是“挪”。將當前節點v和對應的第一個節點s配對,如果另一節點r已經和s配對了,就把r的配對節點換掉,把v配對到s。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章