【发布时间】:2015-06-20 11:09:42
【问题描述】:
我已经实现了一个通用的 Dijkstra 搜索:
public void search(Vertex source) {
source.minDistance = 0;
PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>();
vertexQueue.add(source);
while (!vertexQueue.isEmpty()) {
Vertex u = vertexQueue.poll();
for (Edge e : u.edges) {
Vertex v = e.target;
int weight = e.weight;
int distance = u.minDistance + weight;
if (distance < v.minDistance) {
vertexQueue.remove(v);
v.minDistance = distance ;
v.previous = u;
vertexQueue.add(v);
}
}
}
}
提速方式包括:
- 斐波那契堆
- 双向搜索
此搜索将用作使用 Yen 算法实现 k 最短路径的基础。
在算法上同时应用这两种加速会改善搜索时间还是会因为两者都被使用而导致一些性能损失?
另外,是否可以实现进一步的加速?
【问题讨论】:
-
斐波那契堆的问题是它们的常量很差。在使用朴素优先级队列(
O(n)任意删除)和斐波那契堆(使用不良常量)之间存在一些中间点。 -
@amit 视情况而定。如果距离差别很大,那就更好了
标签: java algorithm graph-algorithm path-finding