【发布时间】:2023-03-12 14:01:01
【问题描述】:
任务:我想使用 Python 的graph-tool高效计算 DAG(有向无环图)中源节点和目标节点之间的最短路径。我的 DAG 具有负权重。
理论上,这是一个计算上“简单”的问题(即O(V + E)),首先计算图的拓扑排序,然后访问和更新父节点和距离(例如讨论here)。
如何使用graph-tool 有效地实现这一点?
到目前为止我的失败尝试:
- 在 Python 中手动实现理论上有效的算法。但是,由于我必须遍历图中的每个顶点,这变得非常慢
- 使用
graph-tool中的shortest_path函数从Boost Graph Library调用Dijkstra 例程将具有可接受的运行时间,但没有充分利用DAG 结构,并且无论如何都不适用于负权重 - 使用
shortest_path调用Bellman-Ford会返回正确的最短路径,但不会利用DAG 结构并且速度太慢(O(VE))。
高效的 DAG 最短路径算法在底层Boost Graph Library 中实现为dag_shortest_paths。有没有什么方法可以通过graph-tool 访问这个函数,或者通过graph-tool 有效地计算这个函数?
【问题讨论】:
标签: python graph-tool