讓T =(V,E)是|V|
頂點樹和|E| = |V-1|
邊,具有已知成本。我們要構建一個最小權重完整圖G =(V,E')跨越牛逼其獨特的最小生成樹。查找跨越給定的最小生成樹的最小權重完整圖形
示例:考慮以下樹T。 紅色的邊緣有給定的成本。虛線邊將被添加以構造來自該樹的完整圖。
最小重量完全圖摹跨越牛逼其獨特的MST如下:
我試圖找到一個(多項式時間)算法來生成該圖。我期待的主要是小費,而不是完整的解決方案。到目前爲止,我已經設計了以下算法:
1)查找包含重量爲w_max
的最重MST邊緣並且沒有其他MST邊緣的圖的切口。所有其他邊緣必須是w_max + 1
。下面的圖片說明了我的想法:
邊緣(1--2)(1--4),(4-5),(2-3)和(2--5 )包含在此切割C中。包含在MST中的唯一邊緣是邊緣(2--3),它是MST中最重的邊緣,其中w=56
。因此,所有其他邊緣應該有w=57
。證明:假設相反;我們可以用另一條邊代替(2-3),並保持樹連接。現在樹的重量更輕,因此(2-3)不屬於MST。矛盾。
2)對重量遞減順序的重量爲w_i
的MST的所有其他邊緣e_i
重複。採取只包括e_i
,並沒有其他MST邊緣的剪輯。此切割的任何未知非MST邊緣應具有w_i + 1
的權重。
問題:
1)是上述算法是否正確?根據Cut屬性,它應該是。
2)我能更有效地做到這一點?我沒有一個算法來尋找我的頭頂上的切割,但我不覺得這種方法可能是有效的。
編輯:另一種方法,我曾在我的腦海裏是一個基於Kruskal算法的方法:
1)使用聯盟查找,我遍歷所有MST邊緣,按升序成本,統一相同組件下的相應頂點。
2)在每個步驟中,通過成本邊緣w
來統一兩個不同的組件。在相同(新)組件中形成循環的任何其他邊緣的成本應爲w+1
。
我不能正式證明它,但它似乎克魯斯卡爾方法和你的切割方法是間接相同的,不知道如果你的削減算法有一個不好的複雜性 – sashas
你是正確的關於克魯斯卡爾,它是正確和有效的 – sashas