我有一个公共传输数据结构,我需要实现k shortest paths
。目前,边缘重量只是距离。
数据结构是:
public class Node {
public int id;
public int level;
}
public class Edge {
public int fromNodeId, toNodeId;
public double distance;
public double time; //might be used for quickest route
}
Edge
表中的数据用于有向图。在加载数据时,我加倍(并反转)边缘,以便图形现在是无向的。
我正在实施标准Dijkstra,但我需要k shortest paths
,所以我找到了this implementation of Yen's algorithm。
搜索按预期工作,但由于图表是传输网络,因此某些结果无效(例如,即使路径较短,也会有太多更改)。
Node
类具有level
属性,到目前为止尚未使用。此属性具有值(1,2,3),其中1是1级节点(最重要),2是2级节点(不太重要),3是3级节点(非重要)。
随着这些信息随时可用,我看到是否有改进和加快搜索的方法......我偶然发现Transit Node Routing
,据我所知,我需要预先计算距离如下:
这可以通过使用普通Dijkstra来完成。如果我理解正确,如果我执行上述操作,则图表将缩小,而无需应用其他收缩算法。
所以在上面的预先计算之后," new"将边添加到Edge
表中,以便图表具有所有这些新距离?
搜索查询是一个简单的Dijkstra(或Yen' s)是否会基于更新的图表?如果没有,应该采用什么样的搜索算法?