給定一個具有頂點u和v的加權DAG,每個邊權重爲-1或1.如何確定從u到v的路徑是否具有零權重和?我只能想出一個算法來計算從u到v的所有路徑,然後總結權重以查看路徑是否可以滿足要求。我聽說過類似問題的A *方法,但我認爲這個問題不應該那麼複雜。這個問題有更好的算法嗎?在兩個頂點之間找到一條具有零權重總和的路徑
回答
考慮具有後繼節點n_i
的頂點u
,其各自的邊權重爲w_i
。
你有重路徑W的u
到v
如果您有:從n_0
到v
體重W - w_0
路徑,或
從
n_1
到v
體重W - w_1
路徑,或- ...
- 等
可以作出上述的基礎上,一個DP算法,並在一組的形式memoizing子問題的解決方案,包含<n,w>
雙,意爲「有來自n
的路徑v
體重w
。 「 如果該套件最終包含<u,0>
,則您有解決方案。
空間複雜度最差爲O(| V || E |),因爲在所有路徑中不能超過2 | E | +1個不同的權重(路徑可以達到最高重量是| E |,最低的是| | E |)。 –
合理的解決方案。但如何確定子問題的數量? – haruhi93
@ haruhi93:每個不同的(頂點,總重量)對至多有一個子問題。這不是太多(參見我以前的評論),所以你可以解決*每一個這樣的對。 –
- 1. 如何查找DAG中兩個頂點之間的最大權重路徑?
- 2. 確定無向圖具有兩個頂點之間的路徑
- 3. 要找到兩個給定節點/頂點之間的最大路徑
- 4. 非循環圖 - 頂點之間每條路徑的最小權重
- 5. 找到頂點之間給定路線的最短路徑python
- 6. 如何使用QuickGraph查找兩個頂點之間的所有路徑
- 7. 遊戲尋路:找到具有加權表面的兩點之間的最短路徑
- 8. Neo4j - 如何找到兩個節點之間的最短路徑
- 9. 找到任意兩個節點之間最長的路徑
- 10. 查找兩個節點之間的所有路徑
- 11. Django發現圖中兩個頂點之間的路徑
- 12. 兩個頂點之間的最長路徑
- 13. 查找具有循環圖的兩點之間的所有簡單路徑
- 14. Android谷歌地圖在兩點之間繪製一條路徑
- 15. 平衡二叉樹中兩個節點之間的最短路徑如何受到路徑「權重」的影響?
- 16. 算法在一個連接所有頂點的圖中找到最小權重的線性路徑
- 17. 具有頂點權重和邊權重的最小Spanninjg樹
- 18. neo4j - 找到兩個以上節點之間的所有最短路徑
- 19. 查找二叉樹(Java)的兩個樹葉之間的最大路徑總和
- 20. 找到網格上一個點和一行之間的最短路徑
- 21. 有向圖中從一個頂點到另一個頂點的最短路徑
- 22. 如何找到與加權節點圖的最佳路徑和頂點
- 23. 繪製兩點之間的路徑
- 24. 兩點之間最長的路徑
- 25. 如何找到兩個形狀之間的最短路徑?
- 26. 使用加權有向圖中的DFS查找兩個節點之間的所有路徑
- 27. 得到兩個點之間的最短路徑
- 28. 如何找到兩個節點之間的循環圖中最長的路徑?
- 29. 在定義的約束下在網格中兩點之間的路徑找到
- 30. 在兩個點之間創建一條具有歸一化矢量的曲線
您可以使用DP來解決它,因爲它是一個DAG。 – Sayakiss
是的,DP可以解決它。但是不知道這些子問題是怎麼樣的:/ – haruhi93