問題描述:無向圖g=(v,e)的頂點覆蓋是它的頂點集v的乙個子集v』包含於v,使得若(u,v)是g的一條邊,則v∈v』或u∈v』。頂點覆蓋v』的大小是它所包含的頂點個數|v』|。
下面的近似演算法以無向圖g為輸入,並計算出g的近似最優頂點覆蓋,可以保證計算出的近似最優頂點覆蓋大小不會超過最小頂點覆蓋大小的2倍。
;從e1中刪去與u和v相關聯的所有邊;
}returnc}
view code
cset用來儲存頂點覆蓋中的各頂點。初始為空,不斷從邊集e1中選取一邊(u,v),將邊的端點加入cset中,並將e1中已被u和v覆蓋的邊刪去,直至cset已覆蓋所有邊。即e1為空。
圖(a)~(e)說明了演算法的執行過程及結果。(e)表示演算法產生的近似最優頂點覆蓋cset,它由頂點b,c,d,e,f,g所組成。(f)是圖g的乙個最小頂點覆蓋,它只含有3個頂點:b,d和e。
下面考察近似演算法的效能。若用a記為演算法迴圈中選取出的邊的集合,則a中任何兩條邊沒有公共頂點。演算法終止時有|cset|=2|a|.
另一方面,圖g的任一頂點覆蓋,一定包含a中各邊的至少乙個端頂點,g的最小頂點覆蓋也不例外。因此,若最小頂點覆蓋為cset*,則|cset*|>=a.由此可得,|cset|<=2|cset*|.即演算法的效能比為2.
對於上圖,我們來執行下近似演算法。比如我們任意選擇一條邊,比如說1和2關聯的邊。
選了之後,覆蓋集含有1和2兩個頂點,然後刪除與1和2頂點關聯的邊
再次選擇3,4頂點,然後3,4頂點進入覆蓋集。
刪除與3,4頂點關聯的邊。
重複上述步驟,此時選擇5,6頂點。
近似演算法輸出1,2,3,4,5,6.但最優解是1,3,6,9.故近似演算法有誤差。
參考:王曉東《演算法設計與分析》第二版
北大《演算法設計與分析第二版》
近似演算法 貪心演算法與近似演算法
1.1 教室排程問題 假設有如下課程表,你希望將盡可能多的課程安排在某間教室上。你沒法讓這些課都在這間教室上,因為有些課的上課時間有衝突。你希望在這間教室上盡可能多的課。如何選出盡可能多且時間不衝突的課程呢?這個問題好像很難,不是嗎?實際上,演算法可能簡單得讓你大吃一驚。具體做法如下。1 選出結束最...
裝箱問題近似演算法概述
問題描述 一維經典裝箱問題可描述如下 s s1,s2,sn 其中0 si 1,稱之為第i個物體的體積 或重量 1 i n,現有n個容積 或載重量 為1 的箱子,要求如何設法將s1,s2,sn放入盡可能少的箱中。裝箱問題是np問題,即在多項式時間內無法精確求解,一般採用近似演算法,即啟發式演算法,這樣...
近似演算法作業
近似演算法作業 題目 證明g中的最大團size為 等價於 g m中最大團size為m 證明 充分性 若g中最大團size為 根據g m的構造過程,g m中至少有存在乙個size為m 的團。首先g m中的最大團不可能小於m 如果小於小於m 則說明,構成g m最大團,每個g貢獻了少於 的結點,這種情況是...