如何使用Dijkstra图搜索算法实现传输节点路由?

时间:2015-06-18 07:24:28

标签: java algorithm graph graph-algorithm

我有一个公共传输数据结构,我需要实现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,据我所知,我需要预先计算距离如下:

  1. 从每个节点到每个1级节点,并保持"最接近"
  2. 从每个级别1到每个级别2节点,并保持"最接近"
  3. 从每个级别2到每个级别2节点
  4. 这可以通过使用普通Dijkstra来完成。如果我理解正确,如果我执行上述操作,则图表将缩小,而无需应用其他收缩算法。

    所以在上面的预先计算之后," new"将边添加到Edge表中,以便图表具有所有这些新距离?

    搜索查询是一个简单的Dijkstra(或Yen' s)是否会基于更新的图表?如果没有,应该采用什么样的搜索算法?

0 个答案:

没有答案