給定一個圖無向G =(V,E)和一組節點P.我需要找到一個包含這些節點的週期(不是最短長度週期)?我如何找到這個循環?如何在圖中找到包含一組節點的循環?
回答
包含哈密爾頓週期(對於P = V),因此決策問題(只知道是否有這樣的事情)是NP完全的。所以沒有有效的算法,除非P = NP。
我可能會開始通過選擇P中的第一個節點(我們稱之爲P [0])來設計算法,然後從P [0]運行深度優先搜索,並記下任何時候P [0]是再次達到。您必須存儲重新達到P [0]的路徑(或者至少是否已到達P的其他節點),以便您知道任何找到的週期都包含P中的所有節點。運行時間應該是與深度優先搜索相同,我相信它是O(V + E)。
有人可能會想出更好的解決方案,並且某些啓發式技術可能會用於幫助,但這應該讓您開始。 (例如,你可以得出結論,你應該在P的節點與邊緣,而不是爲P開始[0]最少的開始。)
編輯:我認爲
一件事...當通過深度優先搜索到達P中的另一個節點時,不需要從頭開始「重新開始」,或者考慮不包含這個新找到的節點的路徑。在沒有這種循環的情況下,該屬性可以幫助您更快地終止算法。
進一步編輯:
沒關係最後一次編輯 - 它只會工作,如果它能夠確定有屬於P P [0]和P中的節點之間的不同路徑上沒有節點達不到另一種方式無法達到的程度,而且我們不知道如果沒有整個DFS的話。
關於哈密爾頓週期的答案,我不知道在手邊的問題中的週期檢測是如何完成的。是的,我們必須遍歷從起始點到達的整個圖(所有頂點和邊),以確定是否存在符合問題標準的週期。此外,我們需要知道在與先前訪問的頂點接觸時,頂點的「前進路徑」將確定是否存在滿足標準的循環。因爲我們不關心最短的這種循環,但我不確定我們是如何找到哈密爾頓循環的。照顧開導?
哈密頓循環遍歷所有節點,因此不會更短或更長。讓我一步一步來。考慮這個問題的特殊情況(如果特例是NP-hard,一般情況也是NP-hard):圖G =(V,E)和節點集P = V(這就是它的特殊之處案件)。現在,通過所有節點V的最短和最長週期同樣長,| V |。問題變得只是發現是否存在這樣的事情,而這正是哈密爾頓週期,它是NP完全的。所以我只是發現HC在這個問題的「內部」。問題不在於HC,而是包含它。說得通? – piccolbo 2010-10-14 17:59:05
- 1. 在圖中,如何找到一組節點的最近節點?
- 2. 如何在有向圖中找到包含某個頂點的所有循環?
- 3. 如何用循環找到鏈表的循環節點?
- 4. EJS,包含每個循環的節點js包括
- 5. 如何找到兩個節點之間的循環圖中最長的路徑?
- 6. Swift:在超視圖中查找視圖(不包含for循環)
- 7. 在數組中查找包含元素的節點
- 8. 如何在有向循環圖中找到最長的簡單路徑(包括所有中間節點)?
- 9. 在Drupal中,如何在一個節點中包含另一個節點?
- 10. 在Robot Framework中的循環中包含一個循環
- 11. 將節點添加到僅包含一個節點的循環鏈接列表中
- 12. 在一個對象中使用for循環,其中包含一個對象的數組節點js
- 13. 如何找到包含子字符串的節點?
- 14. 找到一個不包含屬性的節點?
- 15. 如何查找鏈表中循環的節點數?
- 16. 添加到一組包含循環的集合
- 17. 如何找到一個數組的索引在PHP while循環
- 18. 從數組中的Foreach循環以及如何包含它
- 19. 如何提取pentaho中的XML節點值和循環節點?
- 20. 查找包含有向圖中特定節點的路徑
- 21. C:如何將節點添加到循環中的樹中?
- 22. XSL循環:如何在節點名稱增量處循環
- 23. 如何在包含多個根節點時包含biml文件?
- 24. 如何從一組線中找到包圍點的多邊形?
- 25. 如何找到一小頂點,使得從起始節點到結束節點圖中的所有路徑都包含這些頂點
- 26. 如何在點擊時顯示包含圖像細節的數組?
- 27. 如何在二叉樹中找到節點的父節點?
- 28. 在屏幕/視圖中包含一個精靈節點
- 29. 如何打破循環而不打破包含它的循環?
- 30. 如何找到如果選定節點是樹視圖的第一個節點
你有任何條件在所需的週期? – Frank 2010-10-11 17:11:30
循環中沒有條件 – Bruce 2010-10-11 17:14:12
您是否在尋找歐拉循環? – mattbasta 2010-10-11 17:27:38