大家好,我被困在一个地方有任何选择,我们可以使用贝尔曼福特的算法通过跟随反向递归来计算最短路径。 至于找到最短路径的贝尔曼使用以下等式进行前向递归
对所有我 d ^ l [u] = min [d ^ l-1 [u],min {d ^ l-1 [i] + cost(i,u)}]。
那么我们可以使用任何方程进行后向递归吗?
谢谢
答案 0 :(得分:0)
我们可以将自下而上的贝尔曼算法分解为多个阶段。
在第k阶段,我们可以找到小于k边的最短路径。而第k阶段的答案是基于k-1阶段。我们可以把它写成一个递归方程:
# shortest(k, v) means the shortest path to v in the k-th stage
# for all u which has an edge point to v
shortest(k, v) = min(shortest(k-1, v), shortest(k-1, u) + len(u, v))
如果做了一些预处理,你可以有效地迭代。
然后使用记忆来记录计数结果。时间复杂度仍然是O(VE),但是空间复杂度是O(V^2),比自底向上的方法要大。