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遍历了所有的间接情况,通过∪和∩得到了最后的矩阵。


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

目录
相关文章
|
2月前
|
算法
算法题(2)
算法题(2)
27 3
|
3月前
|
人工智能 算法 搜索推荐
什么是算法?一切皆算法
如果有人问我什么算法?我就一句话:算法就是对一类问题的最优求解路径。
|
存储 机器学习/深度学习 人工智能
秒懂算法 | 分块算法
本篇内容包括了分块算法的思想的介绍、分块算法复杂度的分析以及相关例题。
340 0
秒懂算法 | 分块算法
|
算法
算法题
1.厘米换算英尺英寸 分析:题目非常简单,但是今晚喝的有点多,有点迷 如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
463 0
算法题
拓展欧几里得算法
拓展欧几里得算法
85 0
|
算法
左神起百算,成机算法魂
左神起百算,成机算法魂
107 0
左神起百算,成机算法魂
|
算法
插值查找算法
插值查找算法
222 0
|
算法 JavaScript
算法总结
猫狗队列 注意: 查找了一些网上的写法,发现很多样本再处理pollAll pollDog pollCat方法的时候,并不是如下边的要求弹出所有,原因不详,以我对文字的 敏感性来说,这种只弹出一个的方式是错误的,奈何很多公司的算法题 答案也是如此,所以暂且先这样处理,你完全可以添加一个循环将所有 元.
1337 0
|
算法
§--------算法分界线--------§
如题 As said in the title~ 计算机的cpu计算从根源上由最基本的逻辑电路(晶体管)组成,由此衍生出最基本的数值运算:四则运算。而此后所有的高级算法都是建立在这个基本计算原理(逻辑运算)上。
772 0