最大流最小割 算法理解


by   http://blog.csdn.net/chinacoy/article/details/45040897

理解算法。 
首先從最簡單的開始,先看一幅圖: 
這里寫圖片描述 
有3個節點S,a,T,邊[S,a]的容量是10,邊[a,T]的容量是5,假設從S處要傳送數據到T,問最大傳送數據量是多少?應該是min(10,5)=5.如果超出5,[a,T]邊容不下,因此傳不過去,此時的最大流量就是5,[a,T]邊就是該圖的一條最小割。該圖可以想象成從S到T通水,需要修建水管,a是中間站點,S到a修建的水管可以容納下10單位的水量,a到T可容下5單位的水量,現在有個人不想讓S到T通水了,那么他得要切割水管,那么應該切割哪條水管呢?假設切割水管付出的代價和水管容量成正比。顯然,他需要切割a到T的水管,而不會切割S到a的水管,此時的割是最小割,容量是5,最大流是5,所以最大流=最小割。當然這個例子太簡單,不能說明普遍問題。 
來個稍微復雜的例子: 
這里寫圖片描述 
從S到T,中間經過a,b兩節點,問此時的最大流是多少? 
首先找一條從S到T的路徑[S,a,t],該路徑的最大流量是min(2,3)=2,因為[S,a]上面的容量已經被用了,所以路徑[S,a,b,t]就行不通了,割去[S,a]后圖變成了以下形式: 
這里寫圖片描述]![這里寫圖片描述 
該圖叫做殘留網絡或者叫殘留圖,此時再找從S到t的路徑[S,b,t],路徑的最大流量是min(3,6)=3.割去[b,t]后,圖如下: 
這里寫圖片描述 
此時就不存在從S到t的可行路徑了,則結束最大流的查找。此時的最大流是2+3=5,被割的邊容量和是2+3=5,即最大流=最小割。 
兩個例子我們已經能理解最大流和最小割大體的含義了,也發現最大流的確和最小割是相等的。只從這兩個小例子就證明最大流和最小割相等是絕對不嚴格的,嚴格的數學證明可google相關資料。回頭思考下,最大流到底是什么?如果以送貨為例,在可行的情況下,從一個節點到另一個節點所能送達的最大貨量即為最大流。打個比方,假設從S處開始放彈珠,讓其自動滾到t處,箭頭方向為下坡路,在不考慮時間和空間(即把彈珠想象成質點)的情況下,路徑中能容納的最大彈珠量即為最大流量,最小割就是把容納的彈珠量和容量相同的邊都割去,得到的割即為最小割,顯然最大流=最小割,因為最大流量完全由路徑和容量決定。割去這些邊之后,彈珠是沒法從S滾落到t的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM