如果允许您在图表上的|V|
数据量中预先计算线性,那么有一系列算法对图表中的最短路径具有次线性查询时间。
其中一些用于Bing Maps进行极快的最短路径计算。
基本思路是为每个顶点前向标签L_f(v)
和后向标签L_b(v)
预先计算,这会构成封面属性。每个标签是一对顶点和到它的距离,例如, L_f(v) = { (u, dist(v, u)) }
和L_r(v) = { (u, dist(u, v)) }
。并且封面属性断言,对于任何顶点s和t L_f(s)
'Union'L_r(t)
在从s到t的最短路径上包含至少一个顶点。
是否有其中一种算法(C ++,C#,F#,D,Go,Java)的开源实现?
答案 0 :(得分:3)
我没有找到任何实现这些算法的代码,但你可以查看the Karlsruhe homepage,在那里你可以找到Contraction Hierarchies的代码,它构成了(原始)Hub Labeling的基础。您可以使用它来创建自己的HL实现,但您应该知道他们为此提交了patent。