[問題] PriorityQueue的同步問題?
這裡使用的是Java API提供的PriorityQueue.class
java.util.PriorityQueue<E>
我建構一個資料類別MapNode,當中Override了compareTo方法
依照MapNode下面的一個叫做distance的int型態變數作為比較標準
實作Dijkstra's algorithm,始終得到奇怪的結果
作業要求找出1到其他10個點的最小距離(共200個點)
我輸出的結果有大概6個是正確數字,另外4個答案則不對
使用Eclipse 做debug發現,在前面幾個cycle,PriorityQueue都能從我的清單裡面
找出正確的那個,poll出來(我用過remove(), poll(),結果都依樣)
從某一步開始,PriorityQueue給出來的東西不再是距離最小的那一個
應該說,PriorityQueue本身是用heap實作,
所以他應該會把我要的東西放在root,前幾次cycle有看到這個現象
但某次開始突然就不這麼做了
因為前面幾次的結果都正確,我想應該不是override定義的問題
有沒有可能是synchronization還是什麼其他的問題......
5
這問題困擾我很久,結果真的跳進去debug 200個節點的圖,發現是官方的資料結構
沒有正確運作,還滿傻眼的。原先一直以為是我的演算法有邏輯問題......
感謝大家!!
--
推
10/02 10:37,
10/02 10:37
→
10/02 10:37,
10/02 10:37
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.179.102
※ 文章網址: https://www.ptt.cc/bbs/java/M.1521718479.A.D2A.html
→
03/22 20:08,
6年前
, 1F
03/22 20:08, 1F
→
03/22 20:09,
6年前
, 2F
03/22 20:09, 2F
→
03/22 20:09,
6年前
, 3F
03/22 20:09, 3F
→
03/22 20:09,
6年前
, 4F
03/22 20:09, 4F
java 近期熱門文章
PTT數位生活區 即時熱門文章