Warshall算法的思想和改进

时间:2015-07-08 13:00:38

标签: c algorithm graph

The Warshall-Floyd algorithm基本上基于这样的想法:利用问题与其更简单而不是更小版本之间的关系。 Warshall和Floyd在不提及动态编程的情况下发布了他们的算法。然而,算法肯定具有动态编程风格,并且已经被认为是该技术的应用。

ALGORITHM Warshall(A[1..n, 1..n])
    //ImplementsWarshall’s algorithm for computing the transitive closure
    //Input: The adjacency matrix A of a digraph with n vertices
    //Output: The transitive closure of the digraph
    R(0) ←A
    for k←1 to n do
        for i ←1 to n do
            for j ←1 to n do
                R(k)[i, j ]←R(k−1)[i, j ] or (R(k−1)[i, k] and R(k−1)[k, j])
    return R(n)

我们可以通过重组其最内层的循环来加快Warshall算法的上述实现,以获得一些输入

关于上述文字的问题如下:

  1. 作者的意思是“利用问题与简单而不是较小版本之间的关系”请elobaorate。

  2. 我们如何提高上述实施中提到的作者的速度。

1 个答案:

答案 0 :(得分:0)

1.中的公式表示最短路径问题(可以看作是传递闭包问题的推广)具有optimal substructure属性;但是对于这个属性不存在形式描述(在数学定义的意义上)。最佳子结构属性是使问题适合动态编程所必需的。