最大流學習筆記(3)-推送重貼標籤演算法一

來源:互聯網
上載者:User

標籤:不能   定義   代碼   溢出   get   html   維護   image   沒有   

上一篇

 

1 預流:預流是一個$V\times V \rightarrow  R$的函數$f$,該函數對於每個節點$u\in V-\{s\}$滿足容量限制條件和下面的性質:

$\sum_{v\in V}f(v,u)-\sum_{v\in V}f(u,v)\geq 0$

定義$e(u)=\sum_{v\in V}f(v,u)-\sum_{v\in V}f(u,v)$為進入節點$u$的超額流。如果$e(u)>0$,稱$u$溢出

 

2 高度函數的定義:設G是一個流網路,如果函數$f:V\rightarrow N$滿足$h(s)=|V|,h(t)=0$,且對任意的邊$(u,v)\in E_{f}$,有$h(u)\leq h(v)+1$,那麼$h$是一個高度函數

 

3 對於任意兩個節點$u,v\in V$,如果$h(u)>h(v)+1$,那麼$(u,v)\notin E_{f}$

 

4 推送重貼標籤演算法的思想是在演算法的任何時候,維護一個預流$f$和高度函數$h$,並且使用推送操作和重貼標籤操作來進行更新。

 

5 推送操作:如果$u$是一個溢出節點,$c_{f}(u,v)>0$,且$h(u)=h(v)+1$,那麼推送操作$PUSH(u,v)$作用於節點$u,v$。設節點$u$的超額流存放在$u.e$,高度存放在$u.h$。下面是推送操作的虛擬碼:

 

每次從節點$u$推送到節點$v$的流量為$\Delta _{f}(u,v)=min(u.e,c_{f}(u,v))$,保證不會使得$u.e$變為負數,同時超過$c(u,v)$.

如果在一次$PUSH$ 操作後,$(u,v)$達到飽和狀態,即$c_{f}(u,v)=0$,那麼稱此次推送操作為飽和推送,否則為非飽和推送。

 

6 從節點$u$到節點$v$的一個非飽和推送之後,節點$u$將不再溢出。

 

7 重貼標籤操作:如果節點$u$溢出,且對於所有的邊$(u,v)\in E_{f}$,有$u.h\leq v.h$,那麼此時將進行重貼標籤操作$RELABEL(u)$。

這個操作被調用時,$E_{f}$中至少包含一條從$u$出發的邊。因為$e(u)=\sum_{v\in V}f(v,u)-\sum_{v\in V}f(u,v)>0$,所以至少有一個$v$使得$(v,u).f>0$,所以至少有一條邊$(u,v)\in E_{f}$。

 

8 演算法的整體流程:

(1)初始化

(2)主迴圈

 

9 設$f$為流網路G的一個預流,$h$為高度函數。如果一個節點$u$溢出,那麼要麼可以對$u$進行推送操作,要麼可以對$u$進行重貼標籤操作。

 

10 在GENERIC-PUSH-RELABEL的整個過程中,每個節點的高度不會減少,且每次重貼標籤操作會使得$u$的高度至少增加1.

 

11 在GENERIC-PUSH-RELABEL的整個過程中,將始終維持$h$是一個高度函數

 

12 在GENERIC-PUSH-RELABEL的整個過程中,不存在從源點到匯點的路徑。

 

13 如果GENERIC-PUSH-RELABEL演算法能夠終止,那麼計算出的$f$是一個最大流。

 

以下為證明

9的證明

對於任意殘存邊$(u,v)$有$h(u)\leq h(v)+1$。如果不能對$u$進行推送操作,那麼對任意的$(u,v)\in E_{f}$有$h(u)<h(v)+1$,即$h(u)\leq h(v)$,因此可以對$u$進行重貼標籤操作。

 

11的證明

(1)初始時,$h$ 是一個高度函數;

(2)重貼標籤操作作用於$u$後,對於所有的$(u,v)$仍然滿足$h(u)\leq h(v)+1$。對於進入$u$的邊,比如$(w,u)$,在重貼標籤之前有$w.h\leq u.h+1$,之後有$w.h< u.h+1$。因此重貼標籤操作將保持$h$仍然為高度函數。

(3)$PUSH(u,v)$操作之後可能增加一條邊$(v,u)$,$v.h=u.h-1<u.h+1$,因此$h$仍然是高度函數。還有可能刪掉邊$(u,v)$,這沒有任何影響。

 

12的證明

假設存在$p=<v_{0},v_{1},...,v_{k}>$,其中$s=v_{0},t=v_{k}.$由於$p$經過每個節點最多一次,那麼有$k<|V|$。由於$h(t)=0$,而對於任意一條邊$(v_{i},v_{i+1})$,$v_{i}$的高度最多比$v_{i+1}$的高度達1,,所以$h(s)\leq k<|V|$,這與$h(s)=|V|$矛盾

 

13的證明

(1)首先,在演算法的整個過程中,$f$都是一個預流。初始時是,演算法每個迴圈中,重貼標籤不影響$f$,推送操作結束後$f$也仍然是一個預流;

(2)如果演算法能夠終止,那麼終止時,沒有節點需要推送操作和重貼標籤操作,由9可知,沒有溢出節點存在,所以$f$是一個流。由12可知,沒有增廣路徑存在,所以由最大流最小割定理,$f$是最大流

 

最大流學習筆記(3)-推送重貼標籤演算法一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.