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


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

目录
相关文章
设置VSCode代码编辑器右侧的Minimap代码缩略图滚动条切换显示、隐藏的快捷键Alt+M
设置VSCode代码编辑器右侧的Minimap代码缩略图滚动条切换显示、隐藏的快捷键Alt+M
|
10月前
|
存储 运维 数据挖掘
革新智能驾驶数据挖掘检索效率!某国内新能源汽车未来出行领导者选择阿里云Milvus构建多模态检索引擎
在智能驾驶技术快速发展中,数据成为驱动算法进步的核心。某新能源汽车领军企业基于阿里云Milvus向量数据库构建智能驾驶数据挖掘平台,利用其高性能、可扩展的相似性检索服务,解决了大规模向量数据检索瓶颈问题,显著降低20%以上成本,缩短模型迭代周期,实现从数据采集到场景挖掘的智能化闭环,加速智能驾驶落地应用。
1057 3
革新智能驾驶数据挖掘检索效率!某国内新能源汽车未来出行领导者选择阿里云Milvus构建多模态检索引擎
|
XML Java Android开发
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
1618 0
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
人工智能 算法 程序员
程序员如何借势AI提高自己:从高效工作到技能升级的全面指南
【11月更文挑战第4天】程序员可以通过以下几个方面借势 AI 提升自己:1. 日常工作效率提升,包括智能代码编写与补全、自动化测试与调试、项目管理与协作;2. 技能学习与升级,涵盖基础知识学习和深入技术研究;3. 思维拓展与创新能力培养,激发创意灵感和培养批判性思维。
1346 1
|
存储 监控 算法
ZooKeeper核心知识点整理,收藏再看!
ZooKeeper核心知识点整理,收藏再看!
346 0
ZooKeeper核心知识点整理,收藏再看!
|
Ubuntu 安全 网络协议
|
机器学习/深度学习 人工智能 算法
深度学习基础:从零开始的入门课
【8月更文挑战第21天】通过本文,我们简要介绍了深度学习的基本概念、基础框架以及入门实践。然而,深度学习是一个博大精深的领域,需要不断的学习和实践才能掌握其精髓。建议你在学习过程中,结合具体项目,通过解决实际问题来加深对理论知识的理解。同时,关注最新的研究成果和技术动态,保持对新技术的好奇心和学习热情,相信你会在深度学习的道路上越走越远。
Shutter Encoder(多媒体转换工具) v18.0中文免费版
Shutter Encoder是一款强力的免费视频转换器,基于ffmpeg,所以功能十分的强大,对于视频格式的支持也非常的完善,常用的格式基本都支持,除了转换功能,经常需要用到的视频画面大小调整、批量转换、视频裁切、视频裁剪功能都有。
704 3
|
存储 前端开发 Java
基于springboot的图书管理系统(代码+数据库+文档)
基于springboot的图书管理系统(代码+数据库+文档)

热门文章

最新文章