圖中有兩個點源結點s和匯點t。源結點是網路流的起點,匯點是流的終點
給定乙個流網路g、乙個源結點s、乙個匯點t,找到值最大的乙個流
定義:出發點為源點,接受流量 的匯聚點為匯點,邊上的權值為可以流過的最大值
殘存網路gf
:由仍可以對流量進行增加/減少的邊構成(流過的量不超過容量的邊),包含原圖中的邊,以及可能包含對應的反向邊
殘存容量c
f
:一條邊還可以增加的最大流量(原圖上各邊的容量c,可以看作是初始的殘存容量)
由cf再定義一次gf
:cf>0的邊
為什麼要在gf中加反向邊?
通過增加反向邊,讓我們可以撤銷原來的流量操作。為什麼要撤銷呢?
來自《資料結構與演算法分析》上的乙個例子
原圖
流圖(原圖上的流)
殘餘網路
說明
殘餘網路中沒有增加反向邊
s->t沒有新的可達路徑
演算法結束,但沒有達到目的
(得到最大流)
原來的網路流圖
0/5表示邊的容量為5
圖中每條邊上流量的乙個狀態
選擇一條可達路徑s-a-d-t
傳送流量=3到這條路徑上
增加了反向邊,
s->t存在新的可達路徑
把原來s-a-d-t的流撤銷一部分
被撤銷的部分可以分流到其它路徑
增廣路徑:給定流網路g=(v, e),增廣路徑是殘存網路中一條從源結點到匯點的簡單路徑(沒有分支)
流網路的切割
流網路g=(v, e)的乙個切割就是將結點集合劃分成兩個集合s和t(t=v-s)
設f為流網路g=(v, e)中的乙個流,該流網路的源結點為s,匯點為t,則下面的條件等價:
利用這幾個等價條件,可以作為解最大流的思路
基本步驟
找到一條增廣路徑p
找到p中各邊的最小殘存容量cf
(p)更新路徑上每條邊的資訊
直到沒有任何增廣路徑
圖中邊的結構:邊的起始點和終點,殘存容量,標識是在原圖還是新增的反向邊,流量
整理了一下概念,接下來找找例子再補一下
怎麼查詢增廣路徑?
參考
1. 《演算法導論》原書第3版
2. 《資料演算法與演算法分析——c語言描述》原書第2版
最大網路流
求網路流有很多演算法,這幾天學習了兩種,記錄一下ek演算法。首先是網路流中的一些定義 v表示整個圖中的所有結點的集合.e表示整個圖中所有邊的集合.g v,e 表示整個圖.s表示網路的源點,t表示網路的匯點.對於每條邊 u,v 有乙個容量c u,v c u,v 0 如果c u,v 0,則表示 u,v ...
最大網路流
1 基本概念和術語 1 網路 g 是乙個簡單有向圖,g v,e v 在 v 中指定乙個頂點 s 稱為源 和另乙個頂點 t 稱為匯 有向圖 g 的每一條邊 v,w e 對應有乙個值 cap v,w 0 稱為邊的容量 這樣的有向圖 g 稱作乙個網路 2 網路流 網路上的流 是定義在網路的邊集合 e 上的...
最大網路流問題
參考博文 之前參加阿里巴巴的筆試碰到一最大網路流的題目。因為之前沒有看過這類演算法,所以還是自然沒做出。今天抽空看了看。了解了下基本概念和求解流程。這裡簡單總結下。本圖示最大流的乙個例項。由此,可以引出最大流的一些基本的定義和概念 可以這樣看,圖就是一種管道,管道有最大通過流量的限制,圖中邊的權值就...