回答
這看起來是NP-Hard:跨越子圖問題的最小權重強連接。我相信哈密爾頓循環問題可以歸結爲:給定一個圖G(V,E),構造一個有權邊1的邊DG的邊DG的權重爲1的有向圖DG(| V | +1) 「T。 DG具有與權重子圖完全相關的最小權重強關聯| V |當且僅當G有一個哈密爾頓循環。這裏
紙張上有一個近似算法:http://portal.acm.org/citation.cfm?id=844363
即使他們不是他們自己的權利,同時遵循維塔利的維基百科鏈接時間過得很快發現這個算法:
http://en.wikipedia.org/wiki/Chu%E2%80%93Liu/Edmonds_algorithm
拆分每個節點在圖中爲兩個節點。一個節點將接受所有到達原始節點的傳入邊,另一個節點將具有所有傳出邊。然後,在所有邊上放下方向,這樣圖形就是無向的。然後你可以在圖上運行一個標準的MST算法(Prim's,Kruskal's),你將確保每個原始節點都可以被其他原始節點所傳播。
不幸的是,這不會起作用,因爲它會在最終的圖表中添加不必要的邊緣。至少有一個節點會附加一個額外的邊緣,即使它不需要邊緣。例如,在具有頂點A,B,C和邊AB,BA,BC,CB,AC,CA的圖中,圖的最小跨度可以僅僅是邊AB,BC,CA。但是使用你的方法,這3條邊不會相互連接,並且需要添加額外的邊來完成MST。 – 2010-05-11 22:16:51
選擇任一節點,並將其返回。
難道你或許意味着找到(除去可能的節點的數量最少)的最大的強連接子,或最小權重跨度子(不允許節點清除)?
標題說'生成樹',所以我認爲後者。 – 2010-05-19 19:46:28
@Moron:啊,我錯過了:)在這種情況下,你的回答是正確的。 – 2010-05-19 19:54:30
這是一個導演斯坦納樹問題。作爲斯坦納樹,它是NP-Hard。
你可以在這裏找到一些aproximate算法:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.38.8774&rep=rep1&type=ps
但是,一個定向的斯坦納樹需要一個根,不是嗎? – highBandWidth 2011-04-30 03:05:39
可以通過算法找到最佳根頂點,但是您可以指定一個根以及該頂點集。 – jwinandy 2011-05-15 19:44:47
- 1. subquadratic時間有向圖中的雙向生成樹
- 2. Boruvka算法針對有向圖的最小生成樹
- 3. Boost Graph Library - 有向圖的最小生成樹
- 4. 從最小生成樹的二值圖像創建網絡無向加權圖
- 5. 最小瓶頸生成樹與最小生成樹有什麼不同?
- 6. 只有葉子的最小生成樹?
- 7. 多重最小生成樹圖
- 8. 關於最小生成樹圖
- 9. 最小生成樹:Kruskal&Prim
- 10. 動態最小生成樹
- 11. 通用最小生成樹
- 12. 查找有向加權圖的所有生成樹
- 13. 完整圖的最小生成樹數(MST)的最小值
- 14. C#有向圖生成庫
- 15. 針對有向圖的約束最大生成子樹的逼近算法
- 16. 雙向圖,最短連接?
- 17. 具有多個根頂點的圖中的最小生成樹
- 18. 最小產品生成樹是否與最小生成樹不同?
- 19. 樹是有向圖還是無向圖?
- 20. 最快最小生成樹算法
- 21. 最小生成樹和最短路徑
- 22. Sollin的最小生成樹算法
- 23. 查找具有最大最小度的生成樹
- 24. SciPy - 從有向圖派生的約束最小化
- 25. 雙向多對一生成SELECT N + 1
- 26. 雙向電力 - 動態生成
- 27. SAS雙向計數表:如何生成?
- 28. 有向圖最小切割庫
- 29. 最小支配集有向圖
- 30. 最小生成樹使用Kruskal算法
愛德蒙的算法只保證在圖中每個節點將是從根訪問,不是每個節點都將是所有其他節點進行訪問。 – 2010-05-11 07:51:21
這是NP-Hard。 -1。 – 2010-05-19 16:20:24
我的鏈接的NP分類與它與原始問題的相關性有什麼關係? – Mathew 2010-05-19 20:27:52