如果您被允许预先计算|V|
图上数据量的线性,那么有一系列算法对于图中的最短路径具有次线性查询时间。
- Gavoille 等人。图中的距离标记。
- 科恩等人。通过 2 跳标签的可达性和距离查询
- 亚伯拉罕,戈德堡等人。最短路径的分层集线器标签
其中一些在Bing 地图中用于极快的最短路线计算。
基本思想是预先计算每个顶点的前向标签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)的开源实现?