【发布时间】:2014-06-19 23:48:24
【问题描述】:
在解决具有 n 个节点的有向加权图的最短路径问题时,是否可以修改 Floyd-Warshall 算法,使得每条最短路径的长度不超过 m 步骤?更准确地说,对于每一对节点 i 和 j,你将要找到从 i 到 j 包含不超过 m 个节点。时间复杂度是否仍然保持O(n3)?
【问题讨论】:
-
我想不出一种方法可以在少于 O(n^3m^2) 的时间内完成。 (本质上:使用 DP 计算 f(i, j, k, w) 的每个值,其中该函数表示从 i 到 j 的最短路径,仅使用顶点
-
我需要解决的问题很慢。最近,使用min-plus matrix multiplication,我实现了 m-edges all-pairs-shortest-paths 算法,在 O(n^3*log(n)) 时间内最大 m 个边。跨度>
-
我很想看看你的方法——你能把它写下来作为答案吗? (这是允许的,甚至在 SO 上也是鼓励的。)我看不出如何避免使用这种方法将 m 作为运行时间的一个因素,因为每个矩阵乘法需要 O(n^3) 时间(或至少 O( n^2.something),你最多可能需要 m 个。即便如此,这仍然可以节省 m 个因素。
-
实际上,如果您的意思是 O(n^3*log(m)),那么我可能会看到它是如何工作的:使用重复平方将最大迭代次数从 m 降低到 log m。那正确吗?写一篇文章仍然很棒:)
-
是的,你是对的! :) 当然,我会写它作为答案。
标签: algorithm dynamic-programming shortest-path floyd-warshall