mysql最小費用最大流問題 最小費用最大流問題

2021-10-19 01:58:37 字數 2119 閱讀 3674

複雜網路中,單源單點的最小費用最大流演算法(mcmf)應用廣泛。

在實際網路問題中,不僅考慮從 vs到 vt的流量最大,還要考慮可行流在網路傳送過程中的費用問題,這就是網路的最小費用最大流問題。

最小費用最大流問題的一般提法:已知容量網路 d=(v ,a ,c),每條弧 (vi,vj) 除了已給出容量 cij 外,還給出單位流量的傳輸費用 bij≥0,記作d=(v, a, c, b),其中bij ∈b。要在費用、容量網路 d 中尋找 vs→vt的最大流 f=,且使流的總傳輸費用:

b(f)=σbijfij 最小

從上一講可知,最大流的求法就是在容量網路上從某個可行流出發,設法找到一條從 vs→vt 的增廣鏈,然後沿著此增廣鏈調整流量,作出新的流量增大了的可行流。在這個新的可行流基礎上再尋找它的增廣鏈。如此反覆進行,直至再找不出增廣鏈,就得到了該網路的最大流。

例子:給定費用、容量網路圖(bij,cij),試求網路的最小費用最大流。

解:(1)、初始取0流量,此時總費用為 f(0) = 0。

(2)、由原始網路構建費用網路圖(費用網路圖每條線路上的權重為bij,bij為單位流量的費用)。

(3)、通過當前費用網路圖找到乙個費用最少的路徑,即vs->v3->v2->vt。通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min = 5,即流量為5,當前的最小費用為 f(1) = 5*1+5*2+5*1 = 20。下圖為流量網路圖。

(4)、在(3)的基礎上構造新的費用網路圖,構造方法為:當線路沒流量通過時,流量方向不變,費用為原始費用。如vs->v2;

當線路流量等於該線路的最大容量時,則流量方向改變,費用為原始費用的負數。如v3->v2變為v2->v3;

當線路流量小於該線路的最大容量時,則增加反向流量,費用為原始費用的負數。如vs->v3新增v3->vs;

(5)、在(4)中得到的費用網路圖上,找到費用最少的路徑,即vs->v2->vt,通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min = 2,得到的最小費用流的流量為7,當前的最小費用為 f(2) = 2*4+5*1+5*2+7*1 = 30。

(6)、構造可行流 f2的費用網路圖。

(7)、在(6)中得到的費用網路圖上,找到費用最少的路徑,即vs->v3->v4->vt,通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min = 3,得到的最小費用流的流量為10,當前的最小費用為 f(3) = 2*4+8*1+5*2+7*1+3*3+3*2 = 42

(8)、構造可行流 f3 的費用網路圖。

(9)、在(8)的費用網路圖上,找到費用最少的路徑,即vs->v2->v3->v4->vt,通過該路徑上每條線段的容量得出該線路能通過的最大流量,即調整量θ = min = 1,得到的最小費用流的流量為11,當前最小費用為 f(4) = 3*4+8*1+4*2+7*1+4*3+4*2 = 55

(10)、構造可行流 f4 的費用網路圖。

由於無法找到從 vs->vt 的最短路,所以 f(4) 就是該網路的最小費用最大流。

mysql最小費用最大流問題 最小費用最大流問題

最小費用最大流就是在原來求最大流的基礎上,假設每條邊還有乙個單位流量所需要的費用,因為最小費用的出現,原本的平行邊變得有意義,並且允許反向增廣,基本上就是將原本bfs改為進行一次bellmanford演算法尋找最短路徑,只要初始流是該流量下的最小費用可行流,每次增廣後的新流都是新流量下的最小費用流。...

mysql最小費用最大流問題 最小費用最大流

最小費用最大流 修改的dijkstra ford fulksonff演算法 修改的dijkstra其實和johnson演算法的思想是一致的。乙個求最小費用最大流的樸素演算法是這樣的 1求最小費用增廣路2判斷是否存在增廣路,否的話演算法終止。3增加增廣路上邊的流量4在增廣路上新增必要的逆向負權邊5go...

最小費用最大流問題

網路流相關知識參考 出處 優you 大致題意 給定乙個n m的地圖,地圖上有若干個man和house,且man與house的數量一致。man每移動一格需花費 1 即單位費用 單位距離 一間house只能入住乙個man。現在要求所有的man都入住house,求最小費用。解題思路 費用流問題。構圖 把m...