并查集算法 | Union-Find Algorithm
Union-Find Algorithm即并查集算法,常用于解决 动态连通性,判断有向无圈图等问题。
根本上讲,Union-Find算法就和他的名字一样是一种对不相交集数据结构执行两个有用操作的算法,不相交集数据结构是跟踪一组元素的数据结构,这些元素被划分为多个不相交(非重叠)子集。两个有用操作分别是:
- 查找(Find):确定特定元素在哪个子集中。这可用于确定两个元素是否在同一个子集中。
- 联合(Union):将两个子集连接成一个子集。这里首先我们必须检查两个子集是否属于同一个集合。如果不是,那么我们不能执行联合。
在这篇文章中,我们将讨论不相交集数据结构的应用。该应用是检查给定图形是否包含循环。
我们跟踪一维数组中的子集,我们称之为 parent[]。
以下图为例:
对于每条边,用边的两个顶点制作子集。如果两个顶点都在同一个子集中,则找到一个循环。
最初,父数组的所有槽都初始化为-1(意味着每个子集中只有一项)。
现在一一处理所有边。
边 0-1:找到顶点 0 和 1 所在的子集。由于它们在不同的子集中,我们采用它们的并集。也就是Union-Find中的Union操作,请将节点 1 作为节点 0 的父节点,反之亦然。
边 1-2: 1 在子集 1 中,2 在子集 2 中。所以,取并集。
边 0-2: 0 在子集 2 中,2 也在子集 2 中。因此,包括这条边形成一个循环。
0 的子集为什么与 2 相同?
0->1->2 // 1 是 0 的父级, 2 是 1 的父级
下面是Union和Find两个操作的简单实现
请注意
上面的union()和find()的实现是最简单的版本,其最坏的时间复杂度是O(n) 。可以使用Union by Rank 或 Height将这些方法改进为 O(Logn) 。 我们将在下一篇文章中讨论改进后的Union-Find算法。
Union-Find算法检查图中是否存在循环代码下载链接:
(包含各种语言:C语言、Python、Java、C++、C#、Javascript等均有示例)
免费资源下载:Union-Find to detect cycle
并查集算法 | Union-Find Algorithm相关推荐
- 并查集(Union Find Set)
并查集(Union Find Set) 这篇文章我们来讲一下并查集,什么是并查集呢?来举一个形象的例子. 话说符文之地上居住着各式各样的英雄,他们效忠于自己的国家或部落,整天背着武器在外面执行任务,碰 ...
- Union-Find 并查集算法详解
Union-Find 并查集算法详解 文章目录 Union-Find 并查集算法详解 一.问题介绍 二.基本思路 三.平衡性优化 四.路径压缩 五.总结 六.例题 一.问题介绍 简单说,动态连通性其实 ...
- 简单易懂的并查集算法以及并查集实战演练
文章目录 前言 一.引例 二.结合引例写出并查集 1. 并查集维护一个数组 2. 并查集的 并 操作 3. 并查集的 查 操作 4. 基本并查集模板代码实现--第一版(有错误后面分析) 4.1 Jav ...
- 给我三分钟,带你领略热血江湖中的并查集算法
你好,我是小黄,一名独角兽企业的Java开发工程师. 校招收获数十个offer,年薪均20W~40W. 感谢茫茫人海中我们能够相遇, 俗话说:当你的才华和能力,不足以支撑你的梦想的时候,请静下心来学习 ...
- C++用并查集Disjoint union实现connected component连通分量(附完整源码)
C++用并查集Disjoint union实现connected component连通分量 C++用并查集Disjoint union实现connected component连通分量完整源码(定义 ...
- 【并查集】Union Find
并查集 引出并查集 并查集(Union Find) 如何存储数据? 接口定义 元素的初始化 UnionFind.java Quick Find union 示例及实现 find 实现 Quick Fi ...
- 第三十一篇 玩转数据结构——并查集(Union Find)
1.. 并查集的应用场景 查看"网络"中节点的连接状态,这里的网络是广义上的网络 数学中的集合类的实现 2.. 并查集所支持的操作 对于一组数据,并查集主要支持两种操作:合并两个数 ...
- C++并查集算法(详细)
C++并查集算法 什么是并查集? 并查集写法 详解 例题:洛谷 P3367.[模板]并查集 题意 代码 什么是并查集? 当我们在做图论题目的时候 经常会读到一些长这样的题目描述: -连接 a , b ...
- 并查集算法----犯罪团伙(黑科技)
一.题目描述 犯罪团伙(gang.cpp) 题目描述 警察抓到了n个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯 ...
最新文章
- Zoe Liu:传统算法与深度学习各有所长
- 协同过滤算法简单实现
- 《汇编语言》王爽—第六章实验四详解
- oracle 11g 及 plsqldeveloper 相关操作
- CentOS7源码安装Python3
- laravel中数据显示(默认值和下拉option默认选中)
- CentOS 7 安裝FastDFS V6.0.3
- GNSS数据下载网址整理
- 1.UFS3.1 — Power Mode
- 5G核心网中的数据管理
- MySQL数据库的完美卸载
- java qq验证_用Java代码来校验QQ号
- Excel操作:制作to do list
- python 画ks曲线_Ks密度曲线分布图绘图
- linux 内核list head,Linux内核之list_head.pdf
- python如何读取数据集_如何读取Middlebury数据集提供的.pfm文件?
- c语言 生化危机游戏,生化危机6佣兵全人物+服装解锁
- ESP8266上传DHT11数据给私人javaweb服务器实现网页查询数据的电路方案
- 爱彼迎、木鸟、途家角力春节市场,谁在笑傲江湖
- cesium实现开场动画效果
热门文章
- Mac系统升级后,按大小写键没反应了,切换大小写的灯不亮
- Java的Map(映射)特性及编程思想
- 【数据库】车牌识别数据库(CCPD数据集)
- 索尼爱立信MT11i /15i 通用精简列表
- VN Studio环境的搭建
- 80后外卖小哥实力惊艳中国诗词大会,诗词的力量改变人生轨迹丨好书优选
- [蓝屏]driver_unloaded_without_cancelling_pending_operations
- 【电力电子】【2011.08】通过谐波电流注入改善三相整流器输入功率因数
- 【前端部署】vue项目打包并部署到Linux服务器
- 《信息系统安全》第二章 信息安全模型 作业