最大網路流

2022-05-08 12:21:12 字數 2050 閱讀 4805

圖中有兩個點源結點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 上的...

最大網路流問題

參考博文 之前參加阿里巴巴的筆試碰到一最大網路流的題目。因為之前沒有看過這類演算法,所以還是自然沒做出。今天抽空看了看。了解了下基本概念和求解流程。這裡簡單總結下。本圖示最大流的乙個例項。由此,可以引出最大流的一些基本的定義和概念 可以這樣看,圖就是一種管道,管道有最大通過流量的限制,圖中邊的權值就...