我们可以使用Bellman Ford的算法进行后向递归

时间:2013-12-15 18:13:13

标签: algorithm dynamic-programming graph-algorithm path-finding shortest-path

大家好,我被困在一个地方有任何选择,我们可以使用贝尔曼福特的算法通过跟随反向递归来计算最短路径。 至于找到最短路径的贝尔曼使用以下等式进行前向递归

对所有我 d ^ l [u] = min [d ^ l-1 [u],min {d ^ l-1 [i] + cost(i,u)}]。

那么我们可以使用任何方程进行后向递归吗?

谢谢

1 个答案:

答案 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),比自底向上的方法要大。