1. 程式人生 > >求解任意圖的最小支配集

求解任意圖的最小支配集

給定一個無向圖G =(V,E),其中V表示圖中頂點集合,E表示邊的集合。G的最小控制頂點集合為V的一個子集S∈V;假設集合R表示V排除集合S後剩餘頂點集合,即R∩S=∅,R∪S=V;則最小控制頂點集合S滿足約束條件:R中任意一個頂點至少與S的一個頂點直接相連。給定一個圖,求出最小控制集。

 

控制集定義:

控制集又稱支配集(Minimun Dominating Set),支配集是圖G中的頂點集合S ⊆ V,滿足對於任何頂點v∈V,要麼v∈S,要麼v與集合S中至少一個頂點相鄰。

最小控制集:

對於支配集S0,不存在任何支配集S1,使|S1|<|S0|,則稱S0是圖G的最小支配集,γ(G)=|S0|稱為圖G的支配數;

 

最小支配集的性質:

1)求最小支配集問題被證明屬於NP完全問題,即對於給定問題域的輸入規模,目前尚無足夠的手段證明該問題能夠被判定在多項式時間內求解。

2)在含n個點的任意圖中,若任意點的度大於等於3,則該圖的最小支配集小於等於3n/8。

將圖論問題轉化為數學問題:

為了方便說明,我們定義圖中節點vi的閉鄰集為N[vi],若vi為支配點賦值為1,否則賦值為0。根據支配集的定義,我們可以看出,圖A中每個點要滿足的條件即為N[i]的和大於等於一,也就是說,vi及其臨集中至少含有一個支配點,而最小支配集則要求v1…vn的和最小,轉化為數學公式,也就是特殊的0-1整數規劃問題。

 

設計演算法:

輸入:一個任意圖,格式為,第一行n表示n個節點,接下來任意行,每行兩個數,a,b表示a到b有一條無向邊。

輸出:最小支配集(節點編號)

1)遍歷鄰接表,找出度為0的節點,直接加入支配集,度為1的節點,其相鄰節點加入支配集,並加入支配集,度為1的節點記錄為精確取值。

2)將鄰接集合按從大到小排序,貪心選擇最大的設為支配集,並動態維護鄰接集合,直到支配集滿足條件,將此支配集設為約束條件。

3)開始深度搜索,首先對該集合判斷是否滿足條件,若滿足,和當前約束條件比較,若小於當前上界,代替約束條件。

4)按順序遍歷節點,若已經明確加入支配集則跳過該節點,若已經超過上界,返回,否則分別將該節點置為0和1,跳到步驟4。