網絡流算法

 

必須知識:最短路徑問題
   1.Dijkstra
    適用於滿足所有權係數大於等於0(lij≥0)的網絡最短路問題,能求出起點v1到所有其他點vj的最短距離;
    樸素的Dijkstra算法複雜度爲O(N^2),堆實現的Dijkstra複雜度爲O(NlogN).


   2.bellman-ford
    適用於有負權係數,但無負迴路的有向或無向網絡的最短路問題,能求出起點v1到所有其它點 vj的最短距離。bellman-ford算法複雜度爲O(V*E)。

   3.Floyed
    適用於有負權係數,可以求出圖上任意兩點之間的最短路徑。DP思想的算法,時間複雜度爲O(N^3);
    for ( k= 1; k<= n; k++)
    for ( i= 1; i<= n; i++)
    if (graph[i][k]!=INF)
  for ( j= 1; j<= n; j++)
     if (graph[k][j]!=INF && graph[i][k]+graph[k][j]< graph[i][j])
   graph[i][j]= graph[i][k]+ graph[k][j];
 

NO.1  s-t最大流
 兩大類算法
 1.增廣路算法
  Ford-Fulkerson算法: 殘留網絡中尋找增加路徑
         STEP0:置初始可行流。
         STEP1:構造原網絡的殘量網絡,在殘量網絡中找s-t有向路。如果沒有,算法得到最大流結束。否則繼續下一步。
                STEP2:依據殘量網絡中的s-t有向路寫出對應到原網絡中的s-t增廣路。對於增廣路中的前向弧,置s(e)=u(e)- f(e)。對於反向弧,置s(e)=f(e)                        STEP3:計算crement=min{s(e1),s(e2),…,s(ek)}
                       STEP4:對於增廣路中的前向弧,令f(e)=f(e)+crement;對於其中的反向弧,令f(e)=f(e)-crement,轉STEP1。
  關鍵點:尋找可增廣路。決定了算法複雜度。
  實現:Edmonds-Karp  通過採用了廣度優先的搜索策略得以使其複雜度達到O(V*E^2)。 
        
  優化—> Dinic算法(*)
  Dinic算法的思想是爲了減少增廣次數,建立一個輔助網絡L,L與原網絡G具有相同的節點數,但邊上的容量有所不同,在L上進行增廣,將增廣後的流值回寫到原網絡上,再建立當前網絡的輔助網絡,如此反覆,達到最大流。分層的目的是降低尋找增廣路的代價。
  算法的時間複雜度爲O(V^2*E)。其中m爲弧的數目,是多項式算法。鄰接表表示圖,空間複雜度爲O(V+E)。


 2.預流推進算法  
  一般性的push-relabel算法: 時間複雜度達到O(V^2*E)。(*)
  relabel-to-front算法->改進
  最高標號預流推進:時間複雜度O(V^2*sqrt(E))
 

NO2. 最小費用最大流
  求解最小費用流的步驟和求最大流的步驟幾乎完全一致,只是在步驟1時選一條非飽和路時,應選代價和最小的路,即最短路。
  步驟1. 選定一條總的單位費用最小的路,即要給定最小費用的初始可行流,而不是包含邊數最小的路。
  步驟2. 不斷重複求最大流的步驟來進行,直到沒有飽和路存在爲止。然後計算每個路的總費用。
  和Edmonds-Karp標號算法幾乎一樣,因爲這兩種算法都使用寬度優先搜索來來尋找增廣路徑,所以複雜度也相同,都是O(V*E^2)。
  
  連續最短路算法 + 線性規劃對偶性優化的原始對偶算法(*)
       傳說中,沒見過,據說複雜度是O(V^3) 
 
NO3. 有上下屆的最大流和最小流(通過添加點來進行轉化)(*)

NO4. 相關圖論算法
 二分圖最大匹配: 加s和t構造最大流
  專用算法:hungary算法 O(M*N)

 二分圖最佳匹配: 加s和t構造最小費用最大流
  專用算法:KM算法
    樸素的實現方法,時間複雜度爲O(n^4)
    加上鬆弛函數O(n^3)

 最小路徑覆蓋:
       頂點數-二分圖的最大匹配

 s-t最小邊割集:
       最大流最小割定理:最小割等於最大流

 普通最小邊割集:
       Stoer-Wagner Minimum Cut O(n^3)
      
 二分圖的最大獨立集:
   N - 二分圖的最大匹配(POJ monthly)girls and boys
          反證法證明
        普通圖的最大獨立集是np問題。(*)
         

加*的爲目前我尚未有標程的算法.

 

轉自:http://hi.baidu.com/flymouse/blog/item/c4752df57a779325bc310982.html

發佈了80 篇原創文章 · 獲贊 14 · 訪問量 67萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章