我正在尋找解決以下問題,與最短路徑有關的問題。給定一個有向圖G =(V,E),源s,目標t 1,t 2,...,tk,並且行進邊{i,j}的成本爲cij。現在我想知道從s到t1,...,tk的最短路徑。但是,如果使用vertext v i(不是源或目標),那麼我們有額外的成本C.請注意,兩條路徑使用相同的vertext vi,成本C只支付一次。最短路徑變化
最短路徑變化
回答
標準爲O(n^3)動態規劃解決方案...
http://en.wikipedia.org/wiki/Dijkstras_algorithm
...仍然有效,只有一個小的調整:
纔算直接鄰接矩陣成本,然後通過考慮快捷方式進行迭代,但是在計算vi上的快捷方式添加成本時。
創建修改weightning功能:
w'(u,v) = w(u,v) + C if v == c
w'(u,v) = w(u,v) otherwise
不難看出,
如果您正在尋找最短路徑,每條路徑是,如果用c然後penaltised當運行dijkstra's algorithm或Bellman Ford時,使用w'
任何使用c
的路徑都會受到C
的懲罰,因爲如果c
出現在路徑中 - 它看起來只有一次,因此C
被添加到總重量中[注意c
在最短路徑中不能出現多次],當然如果c
未在此路徑中使用,則不會有任何處罰。
編輯:我不知道我的理解正確,如果有什麼@SaeedAmiri被提的是正確的,並且如果你想給的懲罰只有一次[和路徑總和最小化到T1, ...,TK]那麼你應該使用不同的解決方案 - 用類似的想法:
創建weightning函數w」,使之:
w'(u,v) = w(u,v) + C + epsilon if v == c
w'(u,v) = w(u,v) otherwise
注意,重要的是小量是一個小尺寸,只能在w'上實現,並且尺寸最小。與w
圖表
- 運行Dijkstra算法或BF,讓我們表示權重,如結合
w'
圖表W1
- 運行Dijkstra算法或BF讓我們表示權重
W2
- 如果
W1[ti] == W2[ti]
每個TI ∈ {t1,...,tk} - 那麼最短路徑中不需要c
,總結果是SUM(W1[ti])
- 否則 - 結果爲min {SUM(W1 [ti])+ C,SUM(W2 [ti])`
落後第4步的想法是你有兩種可能性:
- 你可以得到所有的T1,...,TK不使用c,它會更便宜,然後使用具有路徑它,所以你返回W2的總和。
- 或者,如果忽略
c
- 只會更加寬廣 - 因此您可以自由使用它[並返回W1的總和],並僅添加一次懲罰。
但是,OP提到的C將會被計算一次。但是Vi可以有多種路徑。 – 2012-04-17 10:42:20
@SaeedAmiri:我對這個問題的理解有點不同,我編輯了答案來引用這個問題,因爲這可能確實是OP的內容。 – amit 2012-04-17 11:32:42
你還沒有告訴我們到底是什麼問題,但有一個明確的片段,承認了一個保守的客觀保留減少。
對於集合封面的任意實例,爲每個集合設置一個包含源,頂點和每個元素頂點的圖。終端t1,...,tk是元素頂點。每個集合頂點的權重爲0的邊和與其元素對應的頂點的權重爲零。在這張圖上,我們必須購買一套封面以便從源頭到達終端,並且每套封面都足夠了。
除非有你可以告訴我們的關於你的實例的東西,多項式時間算法的近似比率不會比Theta(log n)好,所以我建議整數編程。
- 1. 最短路徑
- 2. DAG最短路徑
- 3. 圖最短路徑?
- 4. 圖上用權重變化的最短路徑
- 5. 最短路徑Dijkstra Java
- 6. Python,圓形最短路徑
- 7. OrientDB:在最短路徑
- 8. 最短路徑查找器
- 9. OrientDB獲取最短路徑()
- 10. 最短路徑/僞代碼
- 11. 最短路徑tsp算法
- 12. Trie中的最短路徑
- 13. 最短路徑算法
- 14. 最短路徑程序
- 15. JGraphT圖最短路徑
- 16. 最短路徑練習
- 17. Neo4j 2.2.5 - Dijkstra最短路徑
- 18. Dag的最短路徑
- 19. 變化路徑
- 20. 爲什麼我們不能把最長路徑變成最短路徑?
- 21. 如何最小化最短路徑樹的總成本
- 22. 最長最短路徑(不完全)
- 23. 最佳最短路徑算法
- 24. 在非退化梯形中尋找全局最短路徑
- 25. neo4j優化最短路徑大量節點
- 26. 使用優化算法尋找網絡中的最短路徑
- 27. BFS重建路徑以獲得最短路徑
- 28. 如何從路徑中刪除最短的子路徑?
- 29. 矩陣中的最短路徑與作弊路徑的障礙
- 30. 最短路徑不是圖中的路徑
你喜歡最小化最短路徑的總和嗎? – 2012-04-17 10:48:40