【发布时间】:2011-08-23 17:51:12
【问题描述】:
我有一个加权图 30k 节点 160k 边,没有负权重。 我想计算从所有节点到其他节点的所有最短路径。 我认为我不能假设任何特定的启发式方法来简化问题。
我尝试使用这个 Dijkstra C 实现http://compprog.wordpress.com/2007/12/01/one-source-shortest-path-dijkstras-algorithm/,这是针对单个最短路径问题,为我所有的 30 个节点调用函数 dijkstras()。可以想象,这需要很长时间。目前我没有时间自己编写和调试代码,我必须尽快计算这些路径并将它们存储在数据库中,所以我正在寻找另一种可以使用的更快的解决方案,你有吗有什么建议吗?
我必须在最近的 8GB 内存的 macbook pro 上运行它,我想找到一个不超过 24 小时完成计算的解决方案。
提前非常感谢!!
尤金尼奥
【问题讨论】:
-
那你有什么建议?我尝试了这段代码compprog.wordpress.com/2007/12/01/…,计算一个节点的所有最短路径需要一分钟多的时间。而且这需要做 30k 次所以不可行。
-
只是为了确定您是在打开优化标志而不是在调试模式下编译此代码吗?
-
这不是调试模式,但我没有使用任何选项。标志,我不确定缺点
-
@LastCoder 这不是调试模式,但我没有使用任何选项。标志,我不确定缺点,你建议什么优化?
-
请注意,您不必从所有节点到所有其他节点执行 Dijkstra - 一旦您知道从 A 到 B 的最短路径,您也知道从 B 回到 A 的最短路径。您还知道从该路径上的每个节点到该路径上的每个其他节点的最短路径。
标签: c algorithm implementation dijkstra shortest-path