簡體   English   中英

如何證明樹上頂點覆蓋的貪婪算法的正確性?

[英]How do I prove the correctness of my greedy algorithm for vertex cover on a tree?

樹上的頂點覆蓋問題如下。

輸入:一個無環簡單無向圖G
輸出:一組頂點W,對於每個uv邊,u∈W或v∈W。我們希望最小化W的大小。

我的貪婪算法是初始化W =∅,然后,當G不為空時,重復以下步驟。 令L為G的葉頂點。令N(L)為與L中某個頂點相鄰的頂點集。更新W = W∪N(L)。 從G刪除頂點L∪N(L)及其入射邊。

到目前為止,我在所有情況下都可以使用該算法。 我如何證明它正確? 到目前為止,這就是我所擁有的。

假設還有另一個集合S是最優解。 矛盾的是,我想確定要么S不能覆蓋所有邊緣,要么S與我的貪婪算法產生的集合相同。

這是一個合理的開始,但是我看到兩個問題。 首先,最佳解決方案可能不是唯一的。 考慮具有四個最佳解的四頂點路徑abcd{a,c}, {b,c}, {b,d} 其次(您可能已經在這樣做了,但是您沒有這么說),有必要考慮將樹植根。 否則,例如在圖ab上,我們有L = {a,b}N(L) = {b,a} ,並且產生的頂點覆蓋率是W = {b,a} ,這不是最佳的。 通過將a指定為根,從定義上將其排除在葉子集中。

為了正式證明涉及循環的程序的正確性,通常最好使用歸納法來建立循環不變式。 請允許我提出兩個建議。

  1. 對於所有時間t(時間=循環迭代次數),令G(t)為時間t時G的剩余量,令W(t)為時間t時W的值。 對於G(t)的每個頂點覆蓋X,集合W(t)∪X是G(0)的頂點覆蓋,其中0是開始時間。

  2. 對於所有時間t,都存在一個包含W(t)作為子集的最優解。

設T為結束時間。 由於G(T)是空圖,所以X =∅是G(T)的有效頂點覆蓋,因此不變量1確定W(T)是G(0)的頂點覆蓋。 不變量2確定W(T)包含在某個最優解中。 由於W(T)本身是一個頂點覆蓋,因此W(T)本身必須是該最優解。

給定不變式2的歸納步驟是,給定一個包含W(t-1)但不包含W(t)的最優解,將其推算為另一個包含W(t)的最優解。 這涉及正式化您的直覺,即將葉子的鄰居帶到葉子上至少總是同樣有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM