1.概述

在本教程中,我们将讨论Floyd-Warshall算法,然后我们将分析其时间复杂性。

2. Floyd-Warshall算法

Floyd-Warshall算法是一种寻找的流行算法最短路径对于加权中的每个顶点对定向图形

在所有成对的最短路径问题中,我们需要从图表中的所有其他顶点上找出每个顶点的所有最短路径。

现在,让我们跳入算法:

QuickLatex.com呈现

我们正在采取一条加权图g(v,e)作为一个输入。首先,我们从给定图形构造图形矩阵。该矩阵包括图中的边缘权重。

下一个,我们插入\ textbf {\ mathsf {0}}在矩阵中的对角线位置。其余位置与输入图填充有相应的边缘权重。

然后,我们需要找到两个顶点之间的距离。在找到距离的同时,我们也检查两个采摘顶点之间是否存在中间顶点。如果存在中间顶点,那么我们检查通过该中间顶点的所选网顶之间的距离。

如果遍历中间顶点时的距离小,则两个拾取顶点之间的距离而不通过中间顶点,我们更新矩阵中的最短距离值。

迭代的数量等于基数顶点集。该算法在给定图表中返回到另一个顶点的最短距离。

一个例子

让我们在加权的指示图上运行Floyd-Warshall算法:

首先,我们从输入图构造一个图形矩阵。接下来,我们插入\ mathsf {0}到矩阵中的对角线位置,并且其余位置将从输入图中填充边缘权重:

\ [\ begin {bmatrix} 0&\ infty&-2&\ infty \\ 4&0和3&\ infty \\ \ infty&\ infty&0&2 \\ \ infty&-1&\ infty&0\\ \结束{bmatrix} \ quad \]

现在,我们已准备好开始迭代。顶点集的基数是4.。我们会迭代循环\ mathsf {4}时代。

让我们从第一个循环开始。对于第一个循环k = 1,i = 1,j = 1我们将检查我们是否应该更新矩阵:

距离[i] [j]>距离[i] [k] +距离[k] [j] \意味着距离[1] [1]>距离[1] [1] +距离[1] [1] \意味着0>0 + 0 \意味着{\ rm false}

随着循环值不满足条件,矩阵中不会更新。

让我们继续,现在为价值观k = 1,i = 1,j = 2并再次检查:

距离[i] [j]>距离[i] [k] +距离[k] [j] \意味着距离[1] [2]>距离[1] [1] +距离[1] [2] \意味着0>0 + \ infty \意味着{\ rm false}

因此,矩阵中不会发生变化。通过这种方式,我们将继续并检查一对顶点。

让我们快速前进到一些满足距离条件的值。

对于循环值k = 1,i = 2,j = 3,我们会看到条件满意:

距离[i] [j]>距离[i] [k] +距离[k] [j] \意味着距离[2] [3]>距离[2] [1] +距离[1] [3] \意味着3>4 + -2 \意味着3>2 \意味着{\ rm true}

因此,我们将计算新距离:

距离[i] [j]>距离[i] [k] +距离[k] [j] \意味着距离[2] [3] =距离[2] [1] +距离[1] [3] = 2

因此,条件满足顶点对(2,3)。起初,顶点之间的距离\ mathsf {2}\ mathsf {3}曾是\ mathsf {3}。但是,我们发现了一个新的最短距离\ mathsf {2}这里。因此,我们使用此新的最短路径距离更新矩阵:

\ [\ begin {bmatrix} 0&\ infty&-2&\ infty \\ 4&0&2&\ infty \\ \ infty&\ infty&0&2 \\ \ infty&-1&\ infty&0\\ \结束{bmatrix} \ quad \]

让我们对三个嵌套循环拍摄另一组值,使得环值满足算法中给出的距离条件;k = 2,i = 4,j = 1

距离[i] [j]>距离[i] [k] +距离[k] [j] \意味着距离[4] [1]>距离[4] [2] +距离[2] [1] \意味着\ infty>-1 + 4 \意味着\ idty>3 \意味着{\ rm true}

随着条件满足,我们将计算新的距离计算:

距离[i] [j]>距离[i] [k] +距离[k] [j] \意味着距离[4] [1] =距离[4] [2] +距离[2] [1] = 3

因此,我们现在使用此新值更新矩阵:

\ [\ begin {bmatrix} 0&\ infty&-2&\ infty \\ 4&0&2&\ infty \\ \ infty&\ infty&0&2 \\ 3&-1&\ infty&0 \\ \结束{bmatrix} \ quad \]

同样,我们继续并检查不同的循环值。最后,在算法终止之后,我们将获得包含所有成对最短距离的输出矩阵:

\ [\ begin {bmatrix} 0&-1&-2&0 \\ 4&0和2&4 \\ 5&1&0和2 \\ 3&-1&1 \\ \ \ \ \ \ of {bmatrix} \ quad \]

4.时间复杂性分析

首先,我们将边缘权重插入矩阵。我们使用A for循环执行此操作,该循环访问图形的所有顶点。这可以执行\ mathcal {o}(n)时间。

接下来,我们有三个嵌套环,每个循环从图中的顶点中的一个到一个到的。因此,该算法的总时间复杂性是\ mathbf {\ mathcal {o}(n ^ 3)}

结论

为了总结,在本教程中,我们已经讨论了弗洛伊德战争算法,以查找加权定向图中的所有成对最短距离。

此外,我们还介绍了算法的示例和时间复杂性分析。

评论在本文上关闭!