[问题] PriorityQueue的同步问题?

楼主: kiwistar (神汁手)   2018-03-22 19:34:35
这里使用的是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个节点的图,发现是官方的资料结构
没有正确运作,还满傻眼的。原先一直以为是我的算法有逻辑问题......
感谢大家!!
楼主: kiwistar (神汁手)   2018-03-22 20:08:00
自问自答:根据h3ap根据heap的原理,要让他洗牌,需要做insert 或是remove的操作,所以修改距离后加上一行add(E)就可以了,呜呜,还我数十小时的光阴来
作者: perry27 (Corn)   2018-10-02 10:37:00
要红就要有特色 想到盗总就是盗垒 锋哥就是轰砲 建民就是
作者: xyz4594 (ㄈ仔集团小头目)   2018-10-02 10:37:00
持久

Links booklink

Contact Us: admin [ a t ] ucptt.com