1. 程式人生 > >《演算法概論》8.10

《演算法概論》8.10

8.10題目描述:
Problem a 
子圖同構:給定兩個無向圖G和H,判斷G是否為H的一個子圖,如果是則返回V(G)到V(H)的相關對映。
Problem b 
最長路徑:給定圖G和整數g,求G中一條長為g的簡單路徑。
Problem c 
最大SAT:給定一個CNF公式和整數g,求滿足其中至少g個子句的真賦值。
Problem d 
稠密子圖:給定一個圖和兩個整數a和b,求G中的a個頂點,使得它們之間最少有b條邊。 
Problem e 
稀疏子圖: 給定一個圖和兩個整數a和b,求G中的a個頂點,使得它們之間最多有b條邊。 
Problem f 
集合覆蓋:經典SCP描述包含一個集合U以及U內元素構成的若干各小類集合S,目標是找到S 的一個子集,該子集滿足所含元素包含了所有的元素且使小類集合個數最少。 
Problem g 

可靠網路:給定兩個n*n矩陣,一個距離矩陣dij,一個連線需求矩陣rij以及預算b.要求一個圖G=({1,2,…,n},E)使得:(1) 其中所有邊的總代價不超過b;(2) 在任意兩個不同頂點i和j之間,存在rij條頂點互不相交的路徑。 

解答:
(a)令圖G 為一個環,環上的頂點數等於圖H 的頂點數。那麼若G 是H 的同構子
圖,則說明H 存在Rudrata 迴路。於是知Rudrata 迴路事實上是子圖同構問題的

一個特例。所以子圖同構問題是Rudrata迴路問題的推廣,因此子圖同構問題是NP-完全的。

(b)設圖中頂點數為V,令g = |V| - 1,轉化為Rudrata迴路問題。也就是說最長路徑問題是Rudrata 迴路

問題的推廣,所以最長路徑問題是NP-完全的。

(c)設CNF中共有n個子句,新增約束g = n,就轉化為SAT問題。所以最大SAT問題是SAT問題的推廣,它是NP-完全的。

(d)SAT問題邊和點的數目沒有明顯約束,所以考慮最大團問題。令b=(a-1)a/2,即每兩個點之間都有一條邊,就轉化為了求最大團問題。

所以稠密子圖問題是最大團問題的推廣,它是NP-完全的。

(e)與d不同的是,我們要找到一個邊數有上界的NPC問題,並且是稀疏子圖的特例。令b=0,則轉換為求圖G的獨立集。

所以稀疏子圖問題是獨立集問題的推廣,它是NP-完全的。

(f)從定義上來看,集合覆蓋和最小頂點覆蓋十分相似。設有一個圖G,其邊數和集合U中的元素數目相等,
令小類集合Si的元素為頂點i相鄰的邊,S集合為圖G中的邊集,則集合覆蓋就轉化為了最小頂點覆蓋,

所以集合覆蓋問題是最小頂點覆蓋問題的推廣,它是NP-完全的。

(g)根據提示可以想到TSP問題。dij為1時代表兩個城市之間有邊,為2時沒有邊。
預算b即為城市的數目,而第二個條件說明任意兩點都在一個圈上,這樣就轉化為了求解TSP問題。
所以可靠網路問題是TSP問題的推廣,它是NP-完全的。