對EK的一些理解

2021-08-26 12:07:32 字數 2247 閱讀 2976

首先是網路流問題的提出:

乙個源點,乙個匯點,不斷又源點向匯點輸送,其中路徑上有最大速度,求匯點收貨的最大速度是多少。

在求之前可以先模擬一下過程如果源點現在只能出乙個單位的貨,那麼他會找乙個未達到最大速度的路進行運輸,接著我們不斷將運輸的量放大,即不斷地從起點開始尋找增廣路,每次都對其進行增廣,直到源點和匯點不連通,也就是找不到增廣路為止。可知當找不到增廣路的時候,當前的流量就是最大流

那麼像這種先擴張再找終點的情況可以用bfs來實現,即將點存在佇列裡。

但這樣找到的只是先從這條路開始找所找到的最大流,故應該是他在發現不是最大時具備回溯的能力,但回溯搜尋會使我們的效率就上公升到指數級,因此我們引入反向邊即每條邊(i,j)都有一條反向邊(j,i),反向邊也同樣有它的值,在把路上每一段的容量減少delta的同時,也把每一段上的反方向的容量增加delta。

這樣方法就有了,就差構建了

變數定義

#define maxn 201

int maxdata = 0x7fffffff;

int capacity[maxn][maxn]; //記錄殘留網路的值

int flow[maxn];//標記從源點到當前節點實際還剩多少流量可用

int pre[maxn];//標記在這條路徑上當前節點的前驅,同時標記該節點是否在佇列中

queue

ekqueue;

bfs搜尋

通過搜尋找出增廣路

int bfs(int src,int des)//bfs用來找由src到des的最大值

pre[src]=0;

flow[src]= maxdata;//源點的值是無限大

ekqueue.push(src);//將源點入隊

while(!ekqueue.empty())//bfs一直搜尋到沒有擴張點}}

if(pre[des]==-1)//殘留圖中不再存在增廣路徑,即找到了乙個最大流

return -1;

else

return flow[des];

}

接著我們將增廣後的增量新增到總價值裡

int maxflow(int src,int des)//最大流

sumflow += increasement;

}return sumflow;

}

這樣看可能還是不大好懂那麼我們以一組樣例為例:

「 5 4 」

「 1 4 20 」

「 1 2 40 」

「 2 4 20 」

」 2 3 30 」

」 3 4 10 」

對第一條邊:

1. flow[1]=inf,pre[1]=0;

源點1進佇列,開始找增廣路,

capacity[1][2]=40>0,則flow[2]=min(flow[1],40)=40;

capacity[1][4]=20>0,則flow[4]=min(flow[1],20)=20;

capacity[2][3]=30>0,則flow[3]=min(folw[2]=40,30)=30;

capacity[2][4]=30,但是pre[4]=1(已經在capacity[1][4]這遍歷過4號點了)

capacity[3][4].....

當index=4(匯點),結束增廣路的尋找

傳遞歸increasement(該路徑的流),利用前驅pre尋找路徑

這時由1到4出現了一條零路,由4到1的價值為20(反向邊)

2.flow[1]=inf,pre[1]=0;

源點1進佇列,開始找增廣路,capacity[1][2]=40>0,則flow[2]=min(flow[1],40)=40;

capacity[1][4]=0!>0,跳過

capacity[2][3]=30>0,則flow[3]=min(folw[2]=40,30)=30;

capacity[2][4]=30,pre[4]=2,

則flow[2][4]=min(flow[2]=40,20)=20;

capacity[3][4].....

當index=4(匯點),結束增廣路的尋找

傳遞歸increasement(該路徑的流),利用前驅pre尋找路徑

一直這樣搜下去

最終sumflow=20+20+10=50(這個就是最大流的值)

對Linux inode的一些理解

檔名 inode device block 一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次...

對棧的一些理解

之前總結過一篇有關函式棧幀的部落格 函式棧幀以及呼叫約定相關的一些總結 但是感覺自己還是有一點知識點沒有弄懂,今天中午跟郭哥吃過飯一起 有關殼的問題的時候,順便把這個問題請教了一下郭哥,終於弄明白了,在此要特地感謝他,這裡把一些心得體會寫出來 先看一幅圖 選自ida權威指南 注意圖中是基於esp的棧...

對SharedNothing的一些理解

share nothing 每乙個cpu都有私有記憶體區域和私有磁碟空間,而且2個cpu不能訪問相同磁碟空間,cpu之間的通訊通過網路連線。share memory 多個cpu共享同一片記憶體,cpu之間通過內部通訊機制 interconnection network 進行通訊 share disk...