0
我正在使用PriorityQueue來存儲大學的Dijkstra算法,以存儲我的圖的其餘頂點,按最短遍歷距離排序。 的比較我用:PriorityQueue經常需要調整比較器 - 我如何處理這個最好?
class DistanceComparator implements Comparator<Integer> {
int[] dist;
public DistanceComparator(int[] d) {
dist = d;
}
@Override
public int compare(Integer i, Integer j)
{
if((dist[i]-dist[j]) < 0) {
return -1;
}
if((dist[i]-dist[j]) > 0) {
return 1;
}
return 0;
}
}
現在我面臨的問題是,距離發生變化,所以我的隊列的比較將需要經常更新。
static PriorityQueue<Integer> refreshQueue(int[] d) {
Comparator<Integer> comp = new DistanceComparator(d);
PriorityQueue<Integer> q = new PriorityQueue<Integer>(adj.length, comp);
for(int i = 0; i < adj.length; i++) {
q.add(i);
}
return q;
}
這是卓有成效的,但它也將應變所需的運行O(num Edges*log(num Vertices))
。
如何避免每次都需要調整比較器?