當前位置:首頁 » 費用明細 » 如何判斷一個可行流是最小費用流
擴展閱讀
海上石油垃圾怎麼收集 2024-10-20 06:11:05
石油男異地怎麼戀愛 2024-10-20 06:05:10

如何判斷一個可行流是最小費用流

發布時間: 2022-02-04 12:13:22

⑴ 幫我解釋下網路流

必須知識:最短路徑問題
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問題。(*)

⑵ 一個可行流是最大流的充分必要條件是( )

可行流是最大流的充分必要條件是無增廣鏈。

從可行流和無增廣鏈關系來看,就可以知道一種尋求最大流的方法:從一個可行流開始,尋求關於這個可行流的可增廣鏈,若存在,則可以經過調整,得到一個新的可行流,其流量比原來的可行流要大,重復這個過程,直到不存在關於該流的可增廣鏈時就得到了最大流。

v這種演算法由Ford 和 Fulkerson於1956年提出,故又稱 Ford-Fulkerson標號法。

(2)如何判斷一個可行流是最小費用流擴展閱讀

對一個網路的某些點指定為發點,規定出提供能力;某些點指定為收點,規定出接收能力。

若一個流對每一發點滿足總流出量與總流入量之差不大於提供能力,對每一收點滿足總流入量與總流出量之差不小於接收能力,則稱這個流為可行流。

可行流存在的充分必要條件:對所有頂點子集s都滿足:由s到s的弧的總容量,不小於s中的收點總接收能力與s中的發點的總提供能力之差。

這個定理在圖論中有許多應用。

⑶ 最小費用最大流問題的相關定義

在網路D(V,A) 中,如果對連接發點vs和收點vt 的一條鏈P,方向規定為從vs 到vt,則當鏈P 中弧(vi,vj)
的方向與規定的方向一致時,稱弧(vi,vj) 為前向弧,否則稱為後向弧。不在這條鏈上的弧,不定義前向弧和後向弧。 設{fij}為一可行流(假設為非負值),如果存在從發點vs 到收點vt 的鏈P,在鏈P 上,下列兩條同時滿足,則稱P 為可擴充鏈:
①對於P 上的前向弧(vi,vj) 有fij<cij。
②對於P 上的後向弧(vi,vj) 有fij>0。 設對於可行流f 存在可擴充鏈P,當以ε=1 調整f 而得到可行流f' 時,兩流的費用之差成為可擴充鏈p 的費用。其中P+和P- 分別表示p 上的前向弧和後向弧。

⑷ 最小費用最大流問題的解決方法

解決最小費用最大流問題,一般有兩條途徑。一條途徑是先用最大流演算法算出最大流,然後根據邊費用,檢查是否有可能在流量平衡的前提下通過調整邊流量,使總費用得以減少?只要有這個可能,就進行這樣的調整。調整後,得到一個新的最大流。
然後,在這個新流的基礎上繼續檢查,調整。這樣迭代下去,直至無調整可能,便得到最小費用最大流。這一思路的特點是保持問題的可行性(始終保持最大流),向最優推進。另一條解決途徑和前面介紹的最大流演算法思路相類似,一般首先給出零流作為初始流。這個流的費用為零,當然是最小費用的。然後尋找一條源點至匯點的增流鏈,但要求這條增流鏈必須是所有增流鏈中費用最小的一條。如果能找出增流鏈,則在增流鏈上增流,得出新流。將這個流做為初始流看待,繼續尋找增流鏈增流。這樣迭代下去,直至找不出增流鏈,這時的流即為最小費用最大流。這一演算法思路的特點是保持解的最優性(每次得到的新流都是費用最小的流),而逐漸向可行解靠近(直至最大流時才是一個可行解)。
由於第二種演算法和已介紹的最大流演算法接近,且演算法中尋找最小費用增流鏈,可以轉化為一個尋求源點至匯點的最短路徑問題,所以這里介紹這一演算法。
在這一演算法中,為了尋求最小費用的增流鏈,對每一當前流,需建立伴隨這一網路流的增流網路。例如圖 1 網路G 是具有最小 費用的流,邊旁參數為c(e),f(e),w(e),而圖 2 即為該網路流 的增流網路G′。增流網路的頂點和原網路相同。按以下原則建 立增流網路的邊:若G中邊(u,v)流量未飽,即f(u,v) < e(u,v),則G ' 中建邊(u,v),賦權w ' (u,v)=w(u,v);若G中邊(u,v)已有流量,即f(u,v)〉0,則G′中建邊(v,u),賦權w′(v,u) =-w(u,v)。建立增流網路後,即可在此網路上求源點至匯點的最短路徑,以此決定增流路徑,然後在原網路上循此路徑增流。這里,運用的仍然是最大流演算法的增流原理,唯必須選定最小費用的增流鏈增流。
計算中有一個問題需要解決。這就是增流網路G ′中有負權邊,因而不能直接應用標號法來尋找x至y的最短路徑,採用其它計算有負權邊的網路最短路徑的方法來尋找x至y的最短路徑,將 大大降低計算效率。為了仍然採用標號法計算最短路徑,在每次建立增流網路求得最短路徑後,可將網路G的權w(e)做一次修正,使再建的增流網路不會出現負權邊,並保證最短路徑不至於因此而改變。下面介紹這種修改方法。當流值為零,第一次建增流網路求最短路徑時,因無負權邊,當然可以採用標號法進行計算。為了使以後建立增流網路時不出現負權邊,採取的辦法是將 G中有流邊(f(e)>0)的權w(e)修正為0。為此, 每次在增流網路上求得最短路徑後,以下式計算G中新的邊權w (u,v):
w (u,v)=L(u)-L(v)+w(u,v) (*)
式中 L(u),L(v) -- 計算G′的x至y最短路徑時u和v的標號值。第一次求最短徑時如果(u,v)是增流路徑上的邊, 則據最短 路徑演算法一定有 L(v)=L(u)+w ' (u,v)=L(u)+w(u,v), 代入(*)式必有
w″(u,v)=0。
如果(u,v)不是增流路徑上的邊,則一定有:
L(v)≤L(u)+w(u,v), 代入(*)式則有 w 」(u,v)≥0。
可見第一次修正w(e)後,對任一邊,皆有w(e)≥0, 且有流 的邊(增流鏈上的邊),一定有w(e)=0。以後每次迭代計算,若 f(u,v)>0,增流網路需建立(v,u)邊,邊權數w ' (v,u)=-w(u,v) =0,即不會再出現負權邊。 此外,每次迭代計算用(*)式修正一切w(e), 不難證明對每一條x至y的路徑而言,其路徑長度都同樣增加L(x)-L(y)。因此,x至y的最短路徑不會因對w(e)的修正而發生變化。
【計算步驟】
⒈ 對網路G=[V,E,C,W],給出流值為零的初始流。
⒉ 作伴隨這個流的增流網路G′=[V′,E′,W′]。G′的頂點同G:V′=V。若G中f(u,v)<c(u,v),則G′中建邊(u,v),w(u,v)=w(u,v)。若G中f(u,v)>0,則G′中建邊(v,u),w′(v,u)=-w(u,v)。
⒊ 若G′不存在x至y的路徑,則G的流即為最小費用最大流, 停止計算;否則用標號法找出x至y的最短路徑P。
⒋ 根據P,在G上增流:對P的每條邊(u,v),若G存在(u,v),則(u,v)增流;若G存在(v,u),則(v,u)減流。增(減)流後,應保證對任一邊有c(e)≥ f(e)≥0。
⒌ 根據計算最短路徑時的各頂點的標號值L(v),按下式修 改G一切邊的權數w(e):
L(u)-L(v)+w(e)→w(e)。
⒍ 將新流視為初始流,轉2。

⑸ 高分:網路流問題

請問摟主用途,16歲已經上中學吧,高一對吧,通常計算機在高中的最高水平就在這個年齡了。
網路流牽涉到離散數學的很多概念,如果沒有這個基礎,就算告訴你了你也不能理解的很深刻。
上面已經很多人給了很多參考資料,難道你沒有時間去認真看一下嗎,既然你知道你能找到到,又何必花那麼多分來解決問題呢。
真正的高手擅長於從龐大的信息中分析出自己想要的答案,就算這個領域自己並未接觸過。
磨刀不誤砍柴功,我只想對你說這些。

⑹ 演演算法Network Flow 請問如何證明尋找流量網路G=(V,E)中的最大流量,遞增路徑最多隻需要搜尋E

中國第一家-----

和引進的最大流量問題,我們舉了一個最大的材料處理流程問題。如果這個問題的已知條件,包括每條邊運輸貨物的單位成本,然後如何運輸,以獲得最大的交通和運輸成本至少嗎?這是所謂的最小費用最大流問題。
最大流量定義的基礎上,如果每個除權號C(E)的邊緣(邊緣的能力)之外的另一權重W(E)(單位流量成本)網路,並已獲得的最大流量值F ,然後最小費用最大流問題,顯然可用來描述以下的線性規劃模型:

最小ΣW(E)F(E)
E∈E

滿足0≤F(E)≤C(E),所有e∈E
F +(V)= F(V),對所有的v∈V
F +(X) = F(最大流量限制)
(或f(y)= F)

解決最小費用最大流問題,有兩個一般的方法。的方式計算的最大流量,最大流量演算法,然後基於成本的邊緣,檢查是否有可能通過調整邊緣交通流平衡的前提下,使總成本可降低?只要存在這樣的可能性,這樣的調整。調整到一個新的最大流量。
然後繼續檢查在這個新的流程的基礎上,調整。迭代下去,直到沒有調整是可能的,他們將有最小費用最大流。這一思路的特點是保持的可行性問題(始終保持最大流量)的最佳推進。的最大流量演算法思想的方式和在前面所描述的另一種解決方案是類似的,通常開始與被給定為零流量的初始流動。此流的成本是零,當然,是最小的成本。流動增值鏈,然後尋找一個源點到匯點,但這種增加的流動鏈必須是所有增量流鏈成本中最小的一個。如果他們能找到,以增加流動鏈,增加,增加流鏈,揭示了一個新的流。作為初始流的流治療,並繼續尋找增加流量鏈增加流量。本次迭代中繼續進行,直到沒有找到增加的流動鏈,當流量的最低成本的最大流量。的想法?該演算法是其特徵在於通過維持最優(每一個新的流是最小費用流),同時逐漸靠近的可行的解決方案(可達的最大流量是一個可行的解決方案)。
由於到第二演算法和最大流演算法描述的方法和演算法,以最小的成本增加流動鏈,可以轉化為求源點??到匯點的最短路徑問題,所以在這里介紹的演算法。

在該演算法中,為了尋求最小費用流鏈的增加,每個電流的流動,需要建立的網路流量網路流量不斷增加。例如,圖1 G的網路是一個具有最低成本的,邊緣的下一個參數是c(e)中,「中f(E),瓦特(E),而圖2是網路的流的增加的流網路G'。網路的頂點和原來的網路流量的增加。在網路邊緣增加流量按以下原則:如果G邊(u,v)的交通是不完整的,即F(U,V??) 0,G'CCT邊(V ,U)授權W'(V,U)= W(U,V)。增加流動網路的建立,可以通過網路和源點的最短路徑,匯點,這決定增加流動路徑,這條路徑在原有的網路流量增加。使用還增加了流動原則的最大流演算法,最小費用流鏈的增加,增加了流動CD必須選擇。
計算需要解決的一個問題。這是一個在流網路G'負側增加,並且因此不能被直接施加到找到的最短路徑x到y的標記方法,使用其他方法計算網路的最短路徑的負側,以找到的最短路徑x到y,將極大地減少了計算效率。不過標簽的方法來計算最短路徑,增加的流量每次你創建了一個網路獲得的最短路徑,在網路G的權重w(E)做了修正,不會出現消極的一面,建立增加流動網路,最短路徑不會改變。下面是這種方法。
時的流量值為零,第一建增流網路的最短路徑,由於負側的情況下,當然,可以用標記的方法來計算。之後,以建立一個提高網路消極的一面,採取的方法流邊(F(E)> 0)的權利W(E)的G修正0。為此,每增加流動網路獲得的最短路徑,下面的公式為y =-L G新的邊權重W(U,V):

W(U,V)X(V) L(U)+ W(U V)(*)

其中,L(U),L(V) - G'最短路徑計算時,u和v的數值。首先計算最短路徑,如果(U,V)的流路側,根據最短路徑演算法必須有L(V)= L(U)+ W(U,V)= L(U )+ W(U,V),成(*),必須

瓦特「(U,V)= 0。

(U,V)不增加流動路徑上的優勢,你必須具備:
L.(V)≤L(U)+ W(U,V) BR />代(*)W(U,V)≥0。

可見瓦特(e)第一修正案,對任何一方,有W(E)≥0,邊緣流(側鏈上的流量增加),必須是w( E)= 0。每次迭代後,如果f(U,V)> 0,由流動網路需要建立(V,U)的邊緣,邊緣的權重w(V,U)=-W(U,V)= 0,即不再出現在消極的一面。
此外,每次迭代計算(*)的公式解決所有的W(E),它是很容易證明,每個路徑的x到y,同樣提高其路徑的長度L(X)-L( Y)。因此,x到y的最短路徑是不是由於瓦特(五)的變化的校正。

1。流網路G = [V,E,C,W],初始流量值是零。
2。伴隨著的增長的流網路G'= [V',E',W']。頂點
G',G:V'= V
如果G F(U,V??)<C(U,V),G'建設的邊緣(U,V), W(U,V)= W(U,V)。
G,F(U,V??)> 0,則G'中建邊(V,U)(V,U)W'= W(U,V)。
3。 G'有沒有的路徑x,Y G流的最小費用最大流的
停止計算,否則標記方法,找到最短的路徑P x到y。
4。 P增加G流:每邊的P(U,V),如果G(U,V),(U,V)的流量,如果G(V,U)(V,U)是流。增加(減少)的流量應確保任一側上的c(五)≥(五)≥0。
5。根據計算出的最短路徑的每個頂點的標簽值L(V),下面的公式多少G的所有邊緣的權重w(五):

L(U) - L( V)+ W(E)→W(E)。

6。新的數據流作為初始流動開啟2。
-----------------的
======================
>下面是英語-----

最大流問題的介紹中,我們列出了一個流量最大的貨物配送。如果這個問題還包括已知的條件下,各單位的交付貨物的成本,那麼如何運輸到最低限度,以獲得最多的流量,和運輸成本?這是所謂的最大流問題的最低成本。
最大流量的基礎上,定義,如果雙方的第一優先受償權數C(E)(即邊緣的能力),但也有另一權重W(E)(單位成本流),並一直在尋求最大的網路流量F值,然後最小費用最大流問題,它是清除下面的線性規劃模型可以用來描述如下:

最小ΣW( E)F(E)
?∈E

滿足0≤F(E)≤C(E),所有e∈E
F +(V)= F - (V),對所有的v∈V
F +(X)= F(最大流量限制)
(或F-(Y)= F)

]演算法思想

解決最小費用最大流問題,一般有兩種方式。一種方法是使用的最大流量的演算法來計算的最大流量,然後根據在成本方面,檢查它是否可以平衡流的流量調節側,這樣就降低總成本嗎?只要存在這樣的可能性,在這種調整。調整後的新的最大流量。
然後,新的流的基礎上,繼續檢查和調整。迭代下去,直到沒有調整可能,他們將有最小費用最大流。這一思路的特點是保持的可行性問題(始終保持最大流量),以促進最佳。到另一個解決方案,並在前面的最大流演算法,介紹了類似的思路,首先,由於作為初始零流的一般流程。的流量為零的成本,當然,成本是最小的。 ,然後找到一個源到匯點的流鏈,這條產業鏈的要求,必須是一個流的全產業鏈成本最低。如果我們能找到的流程鏈,鏈中的流動,增加流量,一個新的流。將被視為初始流的流動,繼續通過增加流的搜索鏈接。此迭代下去,直到發現通過流鏈,則該流程是最小費用最大流。 ?的特點,該演算法的理念是保持最佳的解決方案(每個新的收費標準是最小的流),但逐漸接近可行的解決方案(最大流量是一個可行的解決方案時)。
第二種演算法的結果,並引進的最大流演算法發現的最小費用流鏈的演算法,可以變成一個源到匯點的最短路徑,因此該演算法在這里。

在該演算法中,為了尋求增加最小費用流鏈,目前流通的每一個陪同下,需要建立一個網路流的流量網路。例如,圖1是網路G的最小費用流,旁邊的參數C(E),F(E),W(E),圖2是網路流量的流網路G'。由峰值流作為原來的網路的網路和相同的。通過下面的G中邊(u,v)的原則,按照建立網路邊緣的流:如果沒有足夠的流量,即f(U,V) 0,則G'建設邊(V,U),使W'(V,U)= - W(U,V)。建立網路的流媒體,你可以在這個網路中尋求的交匯點源最短路徑,流動路徑所決定的,然後在這條道路在原有的網路流量。在這里,使用的最大流演算法的原則,增加流量,但必須選擇以最小的鏈流的成本。
計算,是一個需要解決的問題。這是流網路G'的權利,有消極的一面,因此標簽法不能直接找到x到y的最短路徑,使用權等消極的一面計算網路的方式的最短路徑x y以找到最短路徑,將極大地減少了計算效率。為了使用標簽的方法來計算最短路徑,每個數據流通過網路來??實現的最短路徑,在網路G可以是正確的W(E)的修訂,這樣做流建立網路將不會是一個負的右側,和保證的最短路徑不改變。這種後的方法描述如下。
當流量值為零,第一內置流量網路的最短路徑,非負的右側的結果,當然,可用於計算標簽法。為了增加流量的網路負的時間是不成立後,右側所採取的方法是邊流G(F(E)> 0),W(E)修訂為0。為此,每次的最短路徑,新的瓦特的右側下面的計算中的G「(U,V):通過以下方式獲得的流網路

瓦特」(U,V)= ?(U)L(V)+ W(U,V)(*)

L(U),L(V) - G'的最短路徑x到y的計算時u和v的值的標簽。最短路徑(U,V)的第一時間,如果是由邊緣的流路,然後,根據最短路徑演算法必須具有L(ⅴ)= L(U)+ w'的(U,V)= L (U)+ W(U,V),代入(*)類型必須

W「(U,V)= 0。

如果(U,V)而不是由側流道,它必須具備:
L(V)≤L(U)+ W(U,V),
(*)型,W(U ,V)≥0。

可見,W(E),對任何一方的第一次修正,有W(E)≥0,流側(側鏈流),將W(E)= 0。後,每一次迭代計算,如果F(U,V??)> 0,需要建立網路流量(V,U)邊,邊的權重w(V,U)= - 瓦特(U,V)= 0,即,右側將不會是一個負側。
另外,每次迭代的計算與(*)修復了所有的w(五),它是不難證明每個路徑x到y,它的所有相同的增加路徑長度L(x)的L(y)的,因此,x和y不會是最短路徑為w(e)該修正變化。 / a>
] [計算步驟

在網路G = [V,E,C,W],初始值是零流。
2。陪同這流網路G'= [V',E'W'。
G'的頂點G:V'= V
如果F(U,V??)中的G 0,則(U,V),然後在建築物的邊緣G'(U,V),W(U,V)= W(U,V)。
G'建設邊(V,U),W(V,U)= - W(U,V)。
3。如果G'X到Y的路徑不存在,則G是最大流量,最小費用流
要停止計算;否則標記方法,用來找到x到y的最短路徑P.
4。據至P,G中的流量增加:每個邊緣的P (U,V),如果?(U,V),(U,V)流,如果G(V,U)(V,U),由流動增加(減少)的流量應任一側上,以確保有是c(五)≥(五)≥0。
5。根據計算的最短路徑的標簽L的峰值的時間(v)中,按G型的所有邊的權重W(E):

L(U)(V)-L + W(E)→W(E)。
6。新的流作為初始流量為2。=========

希望能滿足您的要求----

⑺ 管理運籌學 最小費用最大流問題 3道 。希望能幫我講一下詳細解答流程,越詳細越好,感激不盡!

這個應該有例題吧,把每個例題研究一下,看看每個點怎麼標數字,每個數字什麼意思。把例題看一下就好了,還是比較簡單的。我去年才考了,可惜現在忘得差不多了。這個其實不難,我上課也沒聽,考前花了兩天時間看了兩遍書,就過了。

⑻ 最大截量最小流量定理的證明

首先,要知道截量的定義:把截集中所有弧的容量之和成為截集的容量(即截量)。所以:
任何一個可行流的流量v(f)都不會超過任一截集的容量。
顯然,如果對於一個可行流f^,網路D=(V,A,C)中有一個截集(V^1,V~1),使v(f^)=c(V^1,V~1),則f^必是最大流,而(V^1,V~1)必是D的所有截集中,容量最小的一個,即最小截集。

證明:由截量定義:把截集中所有弧的容量之和成為截集的容量,可知
任何一個可行流的流量v(f)都不會超過任一截集的容量。
如果對於一個可行流f^,網路D=(V,A,C)中有一個截集(V^1,V~1)
∵v(f^)=c(V^1,V~1)
∴f^必是最大流
∵(V^1,V~1)是D的所有截集中的一個。
∴c(V^1,V~1)最小,即是最小截集。
證畢。

謝謝採納!

⑼ 網路流的資料

編輯本段定義
圖論中的一種理論與方法,研究網路上的一類最優化問題 。1955年 ,T.E. 哈里斯在研究鐵路最大通量時首先提出在一個給定的網路上尋求兩點間最大運輸量的問題。1956年,L.R. 福特和 D.R. 富爾克森等人給出了解決這類問題的演算法,從而建立了網路流理論。所謂網路或容量網路指的是一個連通的賦權有向圖 D= (V、E、C) , 其中V 是該圖的頂點集,E是有向邊(即弧)集,C是弧上的容量。此外頂點集中包括一個起點和一個終點。網路上的流就是由起點流向終點的可行流,這是定義在網路上的非負函數,它一方面受到容量的限制,另一方面除去起點和終點以外,在所有中途點要求保持流入量和流出量是平衡的。如果把下圖看作一個公路網,頂點v1…v6表示6座城鎮,每條邊上的權數表示兩城鎮間的公路長度。現在要問 :若從起點v1將物資運送到終點v6去 ,應選擇那條路線才能使總運輸距離最短�這樣一類問題稱為最短路問題 。 如果把上圖看作一個輸油管道網 , v1 表示發送點,v6表示接收點,其他點表示中轉站 ,各邊的權數表示該段管道的最大輸送量。現在要問怎樣安排輸油線路才能使從v1到v6的總運輸量為最大。這樣的問題稱為最大流問題。
最大流理論是由福特和富爾克森於 1956 年創立的 ,他們指出最大流的流值等於最小割(截集)的容量這個重要的事實,並根據這一原理設計了用標號法求最大流的方法,後來又有人加以改進,使得求解最大流的方法更加豐富和完善 。最大流問題的研究密切了圖論和運籌學,特別是與線性規劃的聯系,開辟了圖論應用的新途徑。
目前網路流的理論和應用在不斷發展,出現了具有增益的流、多終端流、多商品流以及網路流的分解與合成等新課題。網路流的應用已遍及通訊、運輸、電力、工程規劃、任務分派、設備更新以及計算機輔助設計等眾多領域。

網路流演算法
一、網路流的基本概念
先來看一個實例。
現在想將一些物資從S運抵T,必須經過一些中轉站。連接中轉站的是公路,每條公路都有最大運載量。如下圖:
每條弧代表一條公路,弧上的數表示該公路的最大運載量。最多能將多少貨物從S運抵T?
這是一個典型的網路流模型。為了解答此題,我們先了解網路流的有關定義和概念。
若有向圖G=(V,E)滿足下列條件:
1、 有且僅有一個頂點S,它的入度為零,即d-(S) = 0,這個頂點S便稱為源點,或稱為發點。
2、 有且僅有一個頂點T,它的出度為零,即d+(T) = 0,這個頂點T便稱為匯點,或稱為收點。
3、 每一條弧都有非負數,叫做該邊的容量。邊(vi, vj)的容量用cij表示。
則稱之為網路流圖,記為G = (V, E, C)
譬如圖5-1就是一個網路流圖。
1.可行流
對於網路流圖G,每一條弧(i,j)都給定一個非負數fij,這一組數滿足下列三條件時稱為這網路的可行流,用f表示它。
1、 每一條弧(i,j)有fij≤cij。
2、 除源點S和匯點T以外的所有的點vi,恆有:
該等式說明中間點vi的流量守恆,輸入與輸出量相等。
3、 對於源點S和匯點T有:
這里V(f)表示該可行流f的流量。
例如對圖5-1而言,它的一個可行流如下:
流量V(f) = 5。
2.可改進路
給定一個可行流f=。若fij = cij,稱<vi, vj>為飽和弧;否則稱<vi, vj>為非飽和弧。若fij = 0,稱<vi, vj>為零流弧;否則稱<vi, vj>為非零流弧。
定義一條道路P,起點是S、終點是T。把P上所有與P方向一致的弧定義為正向弧,正向弧的全體記為P+;把P上所有與P方向相悖的弧定義為反向弧,反向弧的全體記為P-。
譬如在圖5-1中,P = (S, V1, V2, V3, V4, T),那麼
P+ = {<S, V1>, <V1, V2>, <V2, V3>, <V4, T>}
P- = {<V4, V3>}
給定一個可行流f,P是從S到T的一條道路,如果滿足:
那麼就稱P是f的一條可改進路。(有些書上又稱:可增廣軌)之所以稱作「可改進」,是因為可改進路上弧的流量通過一定的規則修改,可以令整個流量放大。具體方法下一節會重點介紹,此不贅述。
3.割切
要解決網路最大流問題,必須先學習割切的概念和有關知識。
G = (V, E, C)是已知的網路流圖,設U是V的一個子集,W = V\U,滿足S U,T W。即U、W把V分成兩個不相交的集合,且源點和匯點分屬不同的集合。
對於弧尾在U,弧頭在W的弧所構成的集合稱之為割切,用(U,W)表示。把割切(U,W)中所有弧的容量之和叫做此割切的容量,記為C(U,W),即:
例如圖5-1中,令U = {S, V1},則W = {V2, V3, V4, T},那麼
C(U, W) = <S, V2> + <V1, V2> + <V1, V3>+<V1, V4>=8+4+4+1=17
定理:對於已知的網路流圖,設任意一可行流為f,任意一割切為(U, W),必有:V(f) ≤ C(U, W)。
通俗簡明的講:「最大流小於等於最小割」。這是「流理論」里最基礎最重要的定理。整個「流」的理論系統都是在這個定理上建立起來的,必須特別重視。
下面我們給出證明。
網路流、可改進路、割切都是基礎的概念,應該扎實掌握。它們三者之間乍一看似乎風馬牛不相干,其實內在聯系是十分緊密的。
二、求最大流
何謂最大流?首先它必須是一個可行流;其次,它的流量必須達到最大。這樣的流就稱為最大流。譬如對圖5-1而言,它的最大流如下:
下面探討如何求得最大流。
在定義「可改進路」概念時,提到可以通過一定規則修改「可改進路」上弧的流量,可以使得總流量放大。下面我們就具體看一看是什麼「規則」。
對可改進路P上的弧<vi, vj>,分為兩種情況討論:
第一種情況:<vi, vj>∈P+,可以令fij增加一個常數delta。必須滿足fij + delta ≤ cij,即delta ≤ cij – fij。
第二種情況:<vi, vj>∈P-,可以令fij減少一個常數delta。必須滿足fij - delta ≥ 0,即delta ≤ fij
根據以上分析可以得出delta的計算公式:
因為P+的每條弧都是非飽和弧,P-的每條弧都是非零流弧,所以delta > 0。
容易證明,按照如此規則修正流量,既可以使所有中間點都滿足「流量守恆」(即輸入量等於輸出量),又可以使得總的流量有所增加(因為delta > 0)。
因此我們對於任意的可行流f,只要在f中能找到可改進路,那麼必然可以將f改造成為流量更大的一個可行流。我們要求的是最大流,現在的問題是:倘若在f中找不到可改進路,是不是f就一定是最大流呢?
答案是肯定的。下面我們給出證明。
定理1 可行流f是最大流的充分必要條件是:f中不存在可改進路。
證明:
首先證明必要性:已知最大流f,求證f中不存在可改進路。
若最大流f中存在可改進路P,那麼可以根據一定規則(詳見上文)修改P中弧的流量。可以將f的流量放大,這與f是最大流矛盾。故必要性得證。
再證明充分性:已知流f,並且f中不存在可改進路,求證f是最大流。
我們定義頂點集合U, W如下:
(a) S∈U,
(b) 若x∈U,且fxy<cxy,則y∈U;
若x∈U,且fyx>0,則y∈U。
(這實際上就是可改進路的構造規則)
(c) W = V \ U。
由於f中不存在可改進路,所以T∈W;又S∈U,所以U、W是一個割切(U, W)。
按照U的定義,若x∈U,y∈W,則fxy = cxy。若x∈W,y∈U,則fxy = 0。
所以,
又因 v(f)≤C(U,W)
所以f是最大流。得證。
根據充分性證明中的有關結論,我們可以得到另外一條重要定理:
最大流最小割定理:最大流等於最小割,即max V(f) = min C(U, W)。
至此,我們可以輕松設計出求最大流的演算法:
step 1. 令所有弧的流量為0,從而構造一個流量為0的可行流f(稱作零流)。
step 2. 若f中找不到可改進路則轉step 5;否則找到任意一條可改進路P。
step 3. 根據P求delta。
step 4. 以delta為改進量,更新可行流f。轉step 2。
step 5. 演算法結束。此時的f即為最大流。
三、最小費用最大流
1.問題的模型
流最重要的應用是盡可能多的分流物資,這也就是我們已經研究過的最大流問題。然而實際生活中,最大配置方案肯定不止一種,一旦有了選擇的餘地,費用的因素就自然參與到決策中來。
圖5-8是一個最簡單的例子:弧上標的兩個數字第一個是容量,第二個是費用。這里的費用是單位流量的花費,譬如fs1=4,所需花費為3*4=12。
容易看出,此圖的最大流(流量是8)為:fs1 = f1t = 5, fs2 = f2t = 3。所以它的費用是:3*5+4*5+7*3+2*3 = 62。
一般的,設有帶費用的網路流圖G = (V, E, C, W),每條弧<Vi, Vj>對應兩個非負整數Cij、Wij,表示該弧的容量和費用。若流f滿足:
(a) 流量V(f)最大。
(b) 滿足a的前提下,流的費用Cost(f) = 最小。
就稱f是網路流圖G的最小費用最大流。
2.演算法設計
我們模仿求最大流的演算法,找可改進路來求最小費用最大流。
設P是流f的可改進路,定義 為P的費用(為什麼如此定義?)。如果P是關於f的可改進路中費用最小的,就稱P是f的最小費用可改進路。
求最小費用最大流的基本思想是貪心法。即:對於流f,每次選擇最小費用可改進路進行改進,直到不存在可改進路為止。這樣的得到的最大流必然是費用最小的。
演算法可描述為:
step 1. 令f為零流。
step 2. 若無可改進路,轉step 5;否則找到最小費用可改進路,設為P。
step 3. 根據P求delta(改進量)。
step 4. 放大f。轉step 2。
step 5. 演算法結束。此時的f即最小費用最大流。
至於演算法的正確性,可以從理論上證明。讀者可自己思考或查閱有關運籌學資料。
2.最小費用可改進路的求解
求「最小費用可改進路」是求最小費用最大流演算法的關鍵之所在,下面我們探討求解的方法。
設帶費用的網路流圖G = (V, E, C, W),它的一個可行流是f。我們構造帶權有向圖B = (V』, E』),其中:
1、 V』 = V。
2、 若<Vi, Vj>∈E,fij<Cij,那麼<Vi, Vj>∈E』,權為Wij。
若<Vi, Vj>∈E,fij>0,那麼<Vj, Vi>∈E』,權為-Wij。
顯然,B中從S到T的每一條道路都對應關於f的一條可改進路;反之,關於f的每條可改進路也能對應B中從S到T的一條路徑。即兩者存在一一映射的邏輯關系。
故若B中不存在從S到T的路徑,則f必然沒有可改進路;不然,B中從S到T的最短路徑即為f的最小費用可改進路。
現在的問題變成:給定帶權有向圖B = (V』, E』),求從S到T的一條最短路徑。
考慮到圖中存在權值為負數的弧,不能採用Dijkstra演算法;Floyd演算法的效率又不盡如人意——所以,這里採用一種折衷的演算法:迭代法。
設Short[k]表示從S到k頂點的最短路徑長度;從S到頂點k的最短路徑中,頂點k的前趨記為Last[k]。那麼迭代演算法描述如下:(為了便於描述,令n = |V』|,S的編號為0,T的編號為n+1)
step 1. 令Short[k]  +∞(1≤k≤n+1),Short[0]  0。
step 2. 遍歷每一條弧<Vk, Vj>。若Short[k] + <k, j> < Short[j],則令Short[j]  Short[k] + <k, j>,同時Last[j]  k。倘不存在任何一條弧滿足此條件則轉step 4。
step 3. 轉step 2.
step 4. 演算法結束。若Short[n + 1]= +∞,則不存在從S到T的路徑;否則可以根據Last記錄的有關信息得到最短路徑。
一次迭代演算法的時間復雜度為O(kn2),其中k是一個不大於n的變數。在費用流的求解過程中,k大部分情況下都遠小於n。
3.思維發散與探索
1)可改進路費用:「遞增!遞增?」
設f從零流到最大流共被改進了k次,每i次選擇的可改進路的費用為pi,那麼會不會有p1≤p2≤p3≤……≤pk呢?
2)迭代法:「小心死循環!嘿嘿……」
迭代法會出現死循環嗎?也就是說,構造的帶權有向圖B中會存在負迴路嗎?
3)費用:「你在乎我是負數嗎?」
網路流圖中的費用可以小於零嗎?
4)容量:「我管的可不僅是弧。」
網路流圖中的「容量」都是對弧而言的,但若是給每個頂點也加上一個容量限制:即通過此頂點的流量的上限;任務仍然是求從S到T的最小費用最大流。你能解決嗎?
四、有上下界的最大流
上面討論的網路流都只對每條弧都限定了上界(其實其下界可以看成0),現在給每條弧<Vi, Vj>加上一個下界限制Aij(即必須滿足Aij≤fij)。
例如圖5-9:
弧上數字對第一個是上界,第二個是下界。若是撇開下界不看,此圖的最大流如圖5-10(a)所示,流量是6;但若是加入了下界的限制,它的最大流量就只有5了,具體方案見圖5-10(b)。
那麼有上下界的網路最大流怎麼求呢?
一種自然的想法是去掉下界,將其轉化為只含上界的網路流圖。這種美好的願望是可以實現的。具體方法如下:
設原網路流圖為G = (V, E, C, A),構造不含下界的網路流圖G』 = (V』, E』, C』):
1、 V』 = V∪{S』, T』}
2、 對每個頂點x,令 ,若h-(x)≠0,就添加一條弧<S』, x>,其上界為h-(x)。
3、 對每個頂點x,令 ,若h+(x)≠0,就添加一條弧<x, T』>,其上界為h+(x)。
4、 對於任何<Vi, Vj>∈E,都有<Vi, Vj>∈E』,其上界C』ij = Cij – Aij。
5、 新增<T, S>∈E』,其上界CTS = +∞。
在G』中以S』為源點、T』為匯點求得最大流f』。若f』中從S』發出的任意一條弧是非飽和弧,則原網路流圖沒有可行流。否則可得原圖的一個可行流f = f』 + A,即所有的fij = f』ij + Aij。(其正確性很容易證明,留給讀者完成)
然後再求可改進路(反向弧<Vi, Vj>必須滿足fij≥Aij,而非fij≥0),不斷放大f,直到求出最大流。
我們看到,上幾節所討論的一種可行網路流實際上是{Aij = 0}的一種特殊網路流,這里提出的模型更一般化了。解決一般化的復雜問題,我們採取的思路是將其轉化為特殊的簡單問題,加以研究、推廣,進而解決。這是一種重要的基本思想:化歸——簡單有效。基於這種思想,請讀者自行思考解決:
1、 有上下界的最小流。
2、 有上下界的最小費用最大流。
五、多源點、多匯點的最大流
已知網路流圖有n個源點S1、S2、……、Sn,m個匯點T1、T2、……、Tm,,求該圖的最大流。這樣的問題稱為多源點、多匯點最大流。
它的解決很簡單:
1、 增設一個「超級源」S』,對每個源點Si,新增弧<S』, Si>,容量為無窮大。
2、 增設一個「超級匯」T』,對每個匯點Ti,新增弧<Ti, T』>,容量為無窮大。
3、 以S』為源點、T』為匯點求最大流f。
4、 將f中的S』和T』去掉,即為原圖的最大流。
演算法正確性顯然。
六、頂點有容量限制的最大流
上一節已經提出了這個問題,即對於進出每個頂點的流量也規定一個上限,這樣的最大流如何求?
既然我們已經解決了「邊限制」問題,現在何不把「點限制」問題轉化為「邊限制」呢?具體辦法如下:
1、 對除源點和匯點之外的每個頂點i拆分成兩個頂點i』和i』』。新增一條弧<i』, i』』>,其容量為點i的流量限制。
2、 對於原圖中的弧<i, j>,我們將其變換成<i』』, j』>。
3、 對變換後的圖求最大流即可。
這里我們又一次運用到了化歸的思想:將未知的「點限制」問題轉化為已知的「邊限制」問題。
七、網路流與二部圖的匹配
{二部圖和匹配的定義可參見本書專門介紹二部圖匹配的章節}
設二部圖為G = (X, Y, E)。
增設點S』,對於所有i∈X,新增弧<S』, Xi>,容量為1;增設點T』,對於所有i∈Y,新增一條弧<Yi, T』>,容量也為1。原圖中所有的弧予以保留,容量均為+∞。對新構造出來的網路流圖以S』為源點、T』為匯點求最大流:流量即為最大匹配數;若弧<Xi, Yj>(i∈X,j∈Y)的流量非零,它就是一條匹配邊。
二部圖最大匹配問題解決。
那麼二部圖的最佳匹配問題又如何?
仍然按照上述方法構圖。同時令原圖中弧的費用保持不變;新增弧的費用置為0。然後以S』為源點、T』為匯點求最小費用最大流即可。最大流的費用即為原二部圖最佳匹配的費用。

復制的我快吐了~