1. 程式人生 > >二分圖相關播客閱讀摘抄

二分圖相關播客閱讀摘抄

二分圖又稱作二部圖,是圖論中的一種特殊模型。設G=(V,E)是一個無向圖,如果頂點V可分割為兩個互不相交的子集(A,B),並且圖中每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i in A,j in B),則稱圖G是一個二分圖。

在圖論中,一個「匹配」(matching)是一個邊的集合,其中任意兩條邊都沒有公共頂點。例如,圖 3、圖 4 中紅色的邊就是圖 2 的匹配。

最大匹配:一個圖所有匹配中,所含匹配邊數最多的匹配,稱為這個圖的最大匹配。

完全匹配:如果一個圖的某個匹配中,所有的頂點都是匹配點,那麼它就是一個完全匹配

增廣路的定義(也稱增廣軌或交錯軌):從一個未匹配點出發,走交替路,如果途徑另一個未匹配點(出發的點不算),則這條交替路稱為增廣路(agumenting path)。

點覆蓋的概念定義:  對於圖G=(V,E)中的一個點覆蓋是一個集合S⊆V使得每一條邊至少有一個端點在S中。

最小點覆蓋:就是點的個數最少的S集合。 

邊覆蓋的概念定義:  邊覆蓋是圖的一個邊子集,使該圖上每一節點都與這個邊子集中的一條邊關聯,只有含孤立點的圖沒有邊覆蓋,邊覆蓋也稱為邊覆蓋集,圖G的最小邊覆蓋就是指邊數最少的覆蓋,圖G的最小邊覆蓋的邊數稱為G的邊覆蓋數。

二分圖的最小邊覆蓋數=圖中的頂點數-(最小點覆蓋數)該二分圖的最大匹配數

最大獨立集:

最大獨立集:在N個點的圖G中選出m個點,使這m個點兩兩之間沒有邊的點中,m的最大值。 結論: 二分圖的最大點獨立數=點的個數-最小點覆蓋數(最大匹配) 

DAG的最小路徑覆蓋

DAG的最小不相交路徑覆蓋

演算法:把原圖的每個點V拆成VxVx和VyVy兩個點,如果有一條有向邊A->B,那麼就加邊Ax−>ByAx−>By。這樣就得到了一個二分圖。那麼最小路徑覆蓋=原圖的結點數-新圖的最大匹配數。

證明:一開始每個點都是獨立的為一條路徑,總共有n條不相交路徑。我們每次在二分圖裡找一條匹配邊就相當於把兩條路徑合成了一條路徑,也就相當於路徑數減少了1。所以找到了幾條匹配邊,路徑數就減少了多少。所以有最小路徑覆蓋=原圖的結點數-新圖的最大匹配數。

因為路徑之間不能有公共點,所以加的邊之間也不能有公共點,這就是匹配的定義。

DAG的最小可相交路徑覆蓋

演算法:先用floyd求出原圖的傳遞閉包,即如果a到b有路徑,那麼就加邊a->b。然後就轉化成了最小不相交路徑覆蓋問題。

證明:為了連通兩個點,某條路徑可能經過其它路徑的中間點。比如1->3->4,2->4->5。但是如果兩個點a和b是連通的,只不過中間需要經過其它的點,那麼可以在這兩個點之間加邊,那麼a就可以直達b,不必經過中點的,那麼就轉化成了最小不相交路徑覆蓋。