在上一篇文章中,我们介绍了Union-Find算法,通过union()find()操作来检测图中的循环。

然而那些操作虽然简单但却并不高效,最坏情况的时间复杂度是线性的即O(n)。这是因为,为了表示子集而创建的树可能是单向倾斜的,并变得像一个链表。

最坏情况的示例

假设有 4 个元素 0、1、2、3

最初,所有元素都是可以认为是单元素的子集。

随着我们不断进行Union()操作,元素之间的关系会变得像一个链表

上述情况类似于二叉查找树的极端情况,两者的时间复杂度都是线性的。二叉树可以通过旋转来维持平衡以保证时间复杂度维持在O(lonN),相应的我们也可以采用一些手段来优化Union()和Find()两个操作 。

第一个优化方法可以概述为,总是在更深的树的根下附加更小的深度树(rank值小的树连接到rank值大的树上)。这种技术称为union by rank。优先使用术语rank而不是 height,因为如果使用路径压缩技术(Path compression我们在下面讨论过),那么rank并不总是等于高度。此外,树的大小(代替高度)也可以用作rank,使用大小作为rank的最差时间复杂度也是O(LogN) 。

举例来说:

假设有 4 个元素 0、1、2、3

最初,所有元素都是可以认为是单元素的子集。

另外一个优化方法是路径压缩(Path Compression)这个想法是在调用find()时展平树。当为元素 x 调用find()时,将返回树的根。find()操作从x 向上遍历找到根。路径压缩的思想就是把找到的根作为x的父节点,这样我们就不用再遍历所有的中间节点了。如果 x 是子树的根,则 x 下所有节点的路径(到根)也会压缩。

下图表示了一个从0到9的集合,当我们在上面调用find(3)时,

我们向上遍历并找到9作为这个子集的代表(根)。通过路径压缩,我们将 3 和 0 作为 9 的子节点,这样 当下次为 0、1、2 或 3 调用 find() 时,到根的路径会减少。

压缩后的效果如下

这两种技术相辅相成。每个操作的时间复杂度变得低于O(Logn) 

代码实现下载链接:

(包含各种语言:C语言、Python、Java、C++、C#、Javascript等均有示例)

免费​资源下载:Union-Find

并查集算法(优化) | Union by Rank and Path Compression相关推荐

  1. Union-Find 并查集算法详解

    Union-Find 并查集算法详解 文章目录 Union-Find 并查集算法详解 一.问题介绍 二.基本思路 三.平衡性优化 四.路径压缩 五.总结 六.例题 一.问题介绍 简单说,动态连通性其实 ...

  2. 并查集算法c语言版,并查集及其C程序实现.doc

    并查集及其C程序实现 等价关系与等价类 从数学上看,等价类是一个对象(或成员)的集合,在此集合中的所有对象应满足等价关系.若用符号"≡"表示集合上的等价关系,那么对于该集合中的任意 ...

  3. 简单易懂的并查集算法以及并查集实战演练

    文章目录 前言 一.引例 二.结合引例写出并查集 1. 并查集维护一个数组 2. 并查集的 并 操作 3. 并查集的 查 操作 4. 基本并查集模板代码实现--第一版(有错误后面分析) 4.1 Jav ...

  4. 并查集算法 | Union-Find Algorithm

    Union-Find Algorithm即并查集算法,常用于解决 动态连通性,判断有向无圈图等问题. 根本上讲,Union-Find算法就和他的名字一样是一种对不相交集数据结构执行两个有用操作的算法, ...

  5. 给我三分钟,带你领略热血江湖中的并查集算法

    你好,我是小黄,一名独角兽企业的Java开发工程师. 校招收获数十个offer,年薪均20W~40W. 感谢茫茫人海中我们能够相遇, 俗话说:当你的才华和能力,不足以支撑你的梦想的时候,请静下心来学习 ...

  6. C++并查集算法(详细)

    C++并查集算法 什么是并查集? 并查集写法 详解 例题:洛谷 P3367.[模板]并查集 题意 代码 什么是并查集? 当我们在做图论题目的时候 经常会读到一些长这样的题目描述: -连接 a , b ...

  7. java---并查集算法_食物链(每日一道算法2022.8.17)

    难度警告!今天的题思路比较复杂,涉及数学知识congruence class 每天一道算法居然已经一个月了啊,期间居然没断更哈哈 呼呼~算法基础课过去三分之一了,啊后面好像越来越难了呜呜呜,还能保持日 ...

  8. 并查集算法----犯罪团伙(黑科技)

    一.题目描述 犯罪团伙(gang.cpp) 题目描述  警察抓到了n个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯 ...

  9. 并查集算法总结专题训练

    并查集算法总结&专题训练 1.概述 2.模板 3.例题 1.入门题: 2.与别的算法结合: 3.考思维的题: 4.二维转一维: 5.扩展域并查集&边带权并查集: 4.总结 1.概述 并 ...

最新文章

  1. Golang 笔记 1 基础、基本数据类型
  2. (0108)iOS开发之Xcode11: 删除默认Main.storyBoard、自定义根控制器
  3. 令人机双双崩溃的VS2008 SP1!WPF用户请勿更新!
  4. PandaOCR中文版+使用教程
  5. “中能融合杯”线下赛感悟
  6. 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
  7. python 删除断点_给python 初学者的四条忠告,减少一些没必要的麻烦
  8. Android4.2之Camera系统HAL调用流程
  9. SpringBoot 集成Netty实现UDP Server
  10. 免安装mysql5.7.22_windows环境下安装MySQL5.7.22免安装版
  11. excel 科学计数法转换成文本完整显示_Excel中的数字格式和文本格式转换
  12. opengl es3.0游戏开发学习笔记1-绘制旋转的三角形
  13. 美赛论文格式基本要求
  14. 短信验证码接口开发代码
  15. Ajax读取本地json文件
  16. MYSQL选修课的心得体会_选修课心得体会【优秀篇】
  17. 斗罗大陆斗神再临服务器维修,斗罗大陆斗神再临攻略汇总:FAQ常见问题解答[多图]...
  18. Python免杀脚本生成.exe(过火绒过联想没过360)
  19. python声音可视化_声音的可视化处理
  20. 外企人常使用的工作邮箱,建议收藏!

热门文章

  1. 三、C++的常用STL
  2. 导入Excel至数据库中 quot;外部表不是预期格式quot;错误信息
  3. 华为服务器忘记系统登录密码,服务器主机登陆密码忘记了
  4. JDK下载及安装教程(很详细)
  5. 文本匹配相似度计算---多种距离算法 ,多种相似度计算算法,一看就懂
  6. html语言下上标对齐,html常用标签基础
  7. pyinstxtractor 源码分析及填坑
  8. 强大的接口测试与压力测试工具——postmanjmeter
  9. 2016-HitCon-Pwn-house_of_orange学习(附赠FSOP基础知识)
  10. 无限宝服务器40,无限宝互动平台电脑版