Warshall算法

简介: Warshall算法

前言


 Warshall算法是一种经典的图论算法,用于计算给定有向图的传递闭包。在本文中,我们将详细介绍Warshall算法,并通过图例来演示算法的执行过程。


什么是传递闭包?


d45f610aa211ba7f42735f27bd677983_483b46486eda481e8775a5f1323c7ab3.png


 在离散数学中,如果存在一个有向图中的节点u可以直接和间接到达另一个节点v,则称u可以到达v。如果对于图中的所有节点对(u,v),都存在一条从u到v的有向路径,则称该图是传递的。传递闭包则表示所有可达性的集合。


Warshall算法的原理


 在我们写程序计算传递闭包时通常会这样写:


5d94c75a1de4a5981063cab1a473713d_8b861db002014e87b3c076aed94c1bda.png


 这样的时间复杂度为O(n^4),为了简化该算法的复杂度,Warshall算法使用动态规划的思想,通过多次迭代,计算有向图的传递闭包。

具体算法:


初始化可达矩阵。将可达矩阵的值初始化为邻接矩阵的值。

逐步构建可达矩阵。对于每一对顶点i和j,如果存在一条从i到j的路径或者存在一条从i到k的路径和一条从k到j的路径,那么我们就可以说顶点i可达顶点j。

因此,我们可以使用以下公式来逐步构建可达矩阵。


T[i][j]=T[i][j]||(T[i][k]&&T[k][j];


其中,reach[i][j]表示从顶点i是否可达顶点j,k是一个介于1和n之间的中间顶点。


最终可达矩阵即为该图的传递闭包。


完整伪代码:


37f227d9b7663db01e8a66d01bb88fcb_124a09c58ed343ab95cfc3b754c36d54.png


总结:


 其实简单的说,传递闭包就是让“间接到达”变成直接到达。所以我们通过k遍历了所有的间接情况,通过∪和∩得到了最后的矩阵。


 更新不易,辛苦各位小伙伴们动动小手,👍三连走一走💕💕 ~ ~ ~ 你们真的对我很重要!最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!

目录
相关文章
|
6月前
|
机器学习/深度学习 存储 算法
01 算法
01 算法
40 0
|
算法
秒懂算法 | 基环树
图论是一个“巨大”的专题,有大量的知识点,有众多广为人知的问题,有复杂的应用场景。 图论算法常常建立在复杂的数据结构之上。
211 0
秒懂算法 | 基环树
|
机器学习/深度学习 人工智能 算法
秒懂算法 | 尺取法
尺取法(又称为:双指针、two pointers),是算法竞赛中一个常用的优化技巧,用来解决序列的区间问题,操作简单、容易编程。 本篇介绍了尺取法的概念、反向扫描、同向扫描、模板、典型题目。
296 1
秒懂算法 | 尺取法
|
算法 数据安全/隐私保护
《算法》世界 二
一.算法要素 1.数据对象的运算和操作:计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类: 1.算术运算:加减乘除等运算 2.逻辑运算:或、且、非等运算 3.关系运算:大于、小于、等于、不等于等运算 4.数据传输:输入、输出、赋值等运算 2.算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。
124 1
《算法》世界 二
|
算法
2015年408算法题
故辅助数组 q 的大小为 n+1,各元素的初值均为 0。依次扫描链表中的各结点,同 时检查 q[|data|]的值,如果为 0,则保留该结点,并令 q[|data|]=1;否则,将该结点从链表中删除。
197 0
2015年408算法题
|
算法
A*算法之在U3d下实现简单的自动寻路
算法简介: A搜寻算法俗称A星算法。A算法是比较流行的启发式搜索算法之一,被广泛应用于路径优化领域[。它的独特之处是检查最短路径中每个可能的节点时引入了全局信息,对当前节点距终点的距离做出估计,并作为评价该节点处于最短路线上的可能性的量度。
1241 0
|
算法 C# JavaScript
|
存储 人工智能 算法