作者noodleT (麵T)
看板Prob_Solve
標題[問題] 最短路徑問題
時間Mon Jul 25 22:25:26 2016
http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=d062
題目如上面連結。
我的做法是先求出任兩點間的最短路徑值,
接著利用貪婪法決定下一個拜訪(最近)的城市。
但如果離起點(當下位置)最近的有兩個以上,
則把這些路徑都測試過一遍。
雖然有通過測驗,但這種作法是正確的嗎?
還是運氣好罷了?
會提出這問題是因為想到 TSP 無法用貪婪解。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.195.169
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Prob_Solve/M.1469456729.A.513.html
※ 編輯: noodleT (39.12.195.169), 07/25/2016 22:26:21
1F:推 FRAXIS: 這問題跟 TSP 應該是等價的吧 所以 greedy 應該不 work.. 07/25 22:37
我認為是不等價的,
TSP 中 af 距離為 sqrt(2)
而在此題中 af = ab + bf = 2
觀念若有錯請多包涵
※ 編輯: noodleT (39.12.195.169), 07/25/2016 22:55:35
2F:推 FRAXIS: TSP 中的 edge weight 是輸入的一部分 07/25 23:03
3F:→ FRAXIS: 你想的 TSP 是 edge weight 被設定為 Euclidean distance 07/25 23:03
4F:→ FRAXIS: 所以只是 TSP 的特例而已.. 07/25 23:03
5F:推 FRAXIS: 不過這題的圖是定死的 而且是 grid 的 subgraph 07/25 23:05
6F:→ FRAXIS: 所以應該有比較快的方法作吧 07/25 23:06
7F:推 DJWS: 運氣好 07/26 06:52
8F:推 FRAXIS: 我查了一下 TSP 在 grid graph 中還是 NPC 的 07/26 11:49
9F:→ FRAXIS: HAMILTON PATHS IN GRID GRAPHS 論文 title 07/26 11:49
10F:→ FRAXIS: 不過如果 grid graph 上面沒有洞的話是多項式可解的 07/26 11:50
11F:→ noodleT: 在這張圖上有什麼例子是貪婪解不出來的? 07/26 12:15
12F:→ noodleT: 看很久沒看出來 07/26 12:16
13F:推 yvb: 從 n 出發, 須拜訪 a, b, f, j, p. 07/26 14:07
14F:→ noodleT: 謝謝樓上,我再想想其他解法 07/26 19:57
15F:→ FRAXIS: 應該就 backtracking 吧 07/26 21:38
目前利用一張表來儲存子問題(應該是屬於動態規劃解),但效果不彰。
從 a 出發把所有點走一遍需要跑 30 秒左右(答案 15?)
unsigned SortestVisitWithBacktracking
(char begin,const std::vector<char> &visit)const
{
//map<pair<起點,拜訪點向量>,最小路徑>
static std::map<std::pair<char,std::vector<char> >,unsigned> table;
//...
}
在思考是不是需要改成
unsigned SortestVisitWithBacktracking
(char begin,const std::vector<char> &visit,unsigned 剩餘步數限制)const
利用貪婪求一開始的剩餘步數限制,
然後每次遞迴都更新(縮小)剩餘步數限制
※ 編輯: noodleT (110.28.205.127), 07/28/2016 00:00:13
16F:推 FRAXIS: 應該是要的吧 不然你的方法就等同產生所有排列了.. 07/28 09:16
17F:推 DJWS: TSP可以用動態規劃解 時間從O(n!)變O(2^n * n) 快了很多 07/28 22:00
18F:→ DJWS: O(2^n * n^2) 07/28 22:04
19F:→ noodleT: 加入限制條件後就快多了 08/01 16:38
20F:推 FRAXIS: 你還可以嘗試 A star 08/01 21:01
21F:→ noodleT: 好的 08/01 21:17
22F:→ noodleT: a start 似乎沒有保證最佳解 08/06 21:48
23F:推 FRAXIS: A* 如果你 heuristic 設計的對是保證會有最佳解的.. 08/06 22:02
24F:推 DJWS: 這題的heuristic要怎麼設計?我是第一次聽說這種題目可以A* 08/10 07:06
25F:推 FRAXIS: 要設計不難啊 有沒有用又是另外一回事.. 08/10 08:02
26F:→ FRAXIS: MST 的 cost 應該可以當 heuristic 吧 08/10 08:03
27F:推 DJWS: 是可以,不過總共得算多少次MST呢? 08/10 21:43