【发布时间】:2021-02-05 15:02:57
【问题描述】:
我有一组地理点(纬度、经度),我想计算一个有向图,其中:
- 节点就是那些点
- 如果 X 之间的最快路径存在,则存在一条边 X->Y(在节点 X 和 Y 之间) > 和 Y 不通过另一个节点 Z。
我能够计算任意一对节点之间路径的持续时间。 现在,我正在做以下事情:
- 计算每对节点之间的持续时间
- 对于每对节点 X,Y,如果存在 X 和 Y 之间的边没有节点 Z 使得 X->Z 加上 Z->Y 与 X->Y 的持续时间相同。
我已经为节点的子集测试了这种方法,它似乎有效,但由于我有大约 2000 个节点并且节点之间持续时间的计算在计算上很昂贵(因为它涉及计算最短路径),我会想知道是否有更好的方法。
一些额外的(可能不相关的)信息:
- 节点是巴士站位置,取自 GTFS 提要
- 我正在使用http://project-osrm.org/ 计算最短路径持续时间
任何帮助将不胜感激
【问题讨论】:
-
查看
Minimum Spanning Tree (MST),我相信这正是您所寻求的。有更快的方法来构建它们。此外,查看“距离矩阵”的 API 文档(他们将其称为“表格服务”),它将返回一个 200x200 矩阵,告诉您所有事物之间的距离。然后你只需要从中构建 MST。 project-osrm.org/docs/v5.23.0/api/#table-service -
虽然可能可以优化餐桌服务,因为您真的不需要知道所有 200x200 距离。假设这些 X 中至少有一个在您的 200 个位置内,则获取最近的 X 位置的表服务可能会正常工作。否则,餐桌服务可能是最好的途径。
-
@Nuclearman 谢谢你的回答。但是,MST 是针对无向图的,我的图必须是有向的(因为它对应一个道路网络)。我遇到了 Chu–Liu/Edmonds 的算法,它相当于有向图的 MST,但它生成的图是每个节点只有一个传入边,这在我的情况下不成立。
-
嗯,添加了一个答案,但最坏的情况是,如果您的最短路径非常复杂,不确定您是否可以比所有路径做得更好。该方法基本上尝试从三角测量开始以估计应该是最短路径,然后尝试验证它们实际上是最短路径。
标签: graph openstreetmap graph-theory geo osrm