1. 程式人生 > 其它 >圖論專題-學習筆記:網路流(基礎定義)

圖論專題-學習筆記:網路流(基礎定義)

目錄

1. 前言

網路流,屬於圖論的一種。

網路流看上去是一個新的東西,實際上就是新瓶裝舊酒,相信講完之後你會發現這玩意的一些基礎定義什麼的跟 有向圖 沒啥差別。

因為網路流演算法有點多,於是本文在講述基礎定義之外同時提供演算法導航,將後續的演算法學習筆記新增入本部落格中。

2. 詳解

首先我們需要明白一點:網路流是個啥?

實際上,網路流就是一張無向圖,只不過給圖上的東西換了換名字。

比如看看下面這張圖。

(繪圖工具:Graph Editor

看一下這張有向圖,這在網路流裡面叫做『網路』。

仔細看一下,你會發現圖中有兩個特別節點:\(s,t\)

\(s\) 叫做『源點』,\(t\) 叫做『匯點』。

圖上的邊權叫做『流量』。

看不懂沒關係,我初學的時候也看不懂,接下來拿一個例子來說明網路流到底是個啥:

假設 \(s\) 是一座水庫,含有無窮多的水,\(t\) 是你家所在的位置,途中有 5 個湖,標號為 \(1,2,3,4,5\),假設湖能夠存下無窮多的水。

當然,水要流到你家是需要經過一些路徑的,但是這些路徑不是無限量送水的,比如說從 \(s\)\(1\) 就只能送 \(2\) 單位的水,多的也不能送。

這樣就能理解網路流了吧?

這張有向圖就是網路流中的『網路』,在網路中『源點』就是水庫,『匯點』就是你家,而『流量』就是每條邊最多能夠通過的水量。

網路流的基礎定義就是這些。

3. 演算法導航

導航之前先簡要給出網路流中的幾個演算法:

  1. 最大流
    最大流就是問從源點到匯點最多能夠通過多少流量,也就是到你家最多還剩多少水。
  2. 最小割
    最小割有一點抽象,主要就是問刪掉哪些邊使得源點與匯點不再連通,輸出邊權最小值。
    可以證明,最大流=最小割。
  3. 最小費用最大流(簡稱費用流)
    比如說現在運輸要錢了,從一個湖到另一個湖運輸是要錢的,每運一單位的水就需要一定量的錢,請問在滿足最大水量的前提下最小的錢數。
  4. 上下界網路流
    這個時候,每一條邊的流量需要在一定範圍 \([l,r]\) 內,不能少於 \(l\) 也不能多於 \(r\),你需要確定每一條邊的流量使得除了源點匯點之外的所有點流出量等於流入量。
    或者你可以簡單理解為連線湖的路徑上面有些發電站,為了保證發電站正常工作,通過的水流量最少為 \(l\)
    ,但是不能太多以免損壞機器,最多為 \(r\)

演算法學習筆記導航: