路径压缩优化并查集的时间复杂度
路径压缩优化并查集大家一定很熟练了,那么它的复杂度是多少呢?O(mα(n))O(m\alpha(n))O(mα(n))?
的确,很多人都是这么说的,但是事实上它的复杂度是O(mlog1+m/nn)O(m\log_{1+m/n}n)O(mlog1+m/nn)的,并且能找到一种方法卡到这样的复杂度。
要卡并查集,首先要构造一种树——二项树。这种二项树还与普通的不太一样。
定义:在给定jjj的情况下,二项树TkT_kTk定义如下:
- 若k≤jk\leq jk≤j,TkT_kTk是一个点。
- 若k>jk>jk>j,TkT_kTk是Tk−1T_{k-1}Tk−1的根结点增加一棵Tk−jT_{k-j}Tk−j的子树。
这棵树非常有意思,我们可以展开Tk−jT_{k-j}Tk−j,接着展开Tk−2jT_{k-2j}Tk−2j……
另外,也可以展开Tk−1T_{k-1}Tk−1,接着展开Tk−2T_{k-2}Tk−2……
容易发现,图5看起来像图4的路径压缩之后的结果,但是不完全一样。
如果首先按照图5的方式展开jjj棵子树,再按图4展开,可以得到
此时,如果在根节点上再加一个点,jjj次访问T1T_1T1到TjT_jTj,那么路径压缩后可以得到图5外加一个点作为根的儿子。
也就是说,这棵二项树路径压缩后约等于没有路径压缩……只是将原来作为根结点父亲的那个点变成了儿子。
至于TkT_kTk的点数,通过数学归纳法可以发现不会超过(j+1)k/j−1(j+1)^{k/j-1}(j+1)k/j−1个。
假设m≥nm\geq nm≥n,令j=mn,i=logj+1n2+1,k=ijj=\frac{m}{n},i=\log_{j+1}\frac{n}{2}+1,k=ijj=nm,i=logj+12n+1,k=ij,那么TkT_kTk的点数不超过n2\frac{n}{2}2n。接下来做n2\frac{n}{2}2n组操作,每次加入一个点作为根结点的父亲,然后对T1T_1T1到TjT_jTj逐个查询,每次查询的长度是i+1i+1i+1,同时查询的次数显然不超过mmm。因此总操作次数为n2j(i+1)\frac{n}{2}j(i+1)2nj(i+1),即O(mlog1+m/nn)O(m\log_{1+m/n}n)O(mlog1+m/nn)。
图片取自康复计划#4 快速构造支配树的Lengauer-Tarjan算法。
转载于:https://www.cnblogs.com/Canopus-wym/p/10376053.html
路径压缩优化并查集的时间复杂度相关推荐
- 并查集路径压缩_并查集(UnionFind)技巧总结
什么是并查集 在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(Union-find Algorithm)定义了两个用 ...
- SDU_week6_B - 戴好口罩!(路径压缩的并查集)
题目描述 新型冠状病毒肺炎(Corona Virus Disease 2019,COVID-19),简称"新冠肺炎",是指2019新型冠状病毒感染导致的肺炎. 如果一个感染者走入一 ...
- 数据结构之并查集:路径压缩继续优化并查集——20
路径压缩继续优化并查集 在实现的并查集中,在合并操作merge(item1, item2)时,会不管两个元素所在的分组大小,总是将item 1的分组合并到item2的分组,这样可能会导致树的深度无必要 ...
- 数据结构之并查集:UF-Tree优化并查集——19
并查集的优化 在上一节了解到并查集的快速查询,合并,判断归属组等操作,虽然这些操作都非常方便,但是在数据量较大的情况下,并查集的效率并不算高: 上一节中实现代码中使用的合并方法(merge,API设计 ...
- 【LeetCode每日一题:1697. 检查边长度限制的路径是否存在~~~并查集+数组排序+排序记录下标位置】
题目描述 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边.请注意,两 ...
- 1584.连接所有点的最小费用(Kruskal算法) | 1697. 检查边长度限制的路径是否存在(并查集)
给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] . 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi ...
- 二分图的时间戳优化+并查集变型
P1640 [SCOI2010]连续攻击游戏 用used数组记录now(now++),不需要每一轮都是用memset判别. #include <bits/stdc++.h>using na ...
- 数据结构与算法(十二)并查集(Union Find)及时间复杂度分析
本文主要包括以下内容: 并查集的概念 并查集的操作 并查集的实现和优化 Quick Find Quick Union 基于size的优化 基于rank的优化 路径压缩优化 并查集的时间复杂度 并查集的 ...
- POJ 1703 Find them, Catch them(路径压缩并查集)
POJ 1703 Find them, Catch them(路径压缩并查集) 2014年03月11日 20:13:54 阅读数:881 POJ 1703 Find them, Catch them( ...
最新文章
- lsa五类_OSPF外部路由4类5类LSA
- SqlServer 2014还原数据库时提示:无法在已有的上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
- Android 如何有效的解决内存泄漏的问题
- Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager
- Error: Another program is already listening on a port that one of our HTTP servers is configured to
- jzoj3860-地壳运动(mst)【最小生成树,三分】
- jquery radio取值,checkbox取值,select取值,radio选中,
- elasticsearch 报表统计_螺丝ERP销售管理系统,螺丝企业专业管理统计
- MyBatis入门到精通——Mybatis入门篇
- soapUI(groovy脚本作用2)请不要问为什么系列2
- vue全局组件中再创建多个组件
- LCN根据官网改造本项目失败案例
- 香港科技大学工学院理学硕士土木基建工程及管理(MSc CIEM)2022Fall宣讲会(线上)
- Android打开系统文件管理器
- Python RPM包制作
- 通过路由远程计算机重启,路由器如何重启 三种重启路由器的方法【步骤教程】...
- Python3:批量读取excel百度分享链接保存到百度网盘
- 编写数码管c语言程序,跪求单片机0~99数码管显示用C语言编写的程序
- 棋牌游戏开发之地主算法判断牌型
- 12306 APP 同一乘客、同列火车候补订单与硬座的处理规则!
热门文章
- autopilot 源代码
- google map的配置(Android版)
- MVT和MVC的区别
- 计算机基础知识 JAVA基础知识
- [ZT]精彩的国外育儿教育读本,图文并茂
- 美标C70600(BFe10-1-1)无缝管
- 阿里开源支持10万亿模型的自研分布式训练框架EPL
- KVG制作-【Arduino指纹解锁 智能家居系列-01】DIY自制的智能门禁,AS608指纹解锁+红外线遥控解锁。附演示视频。
- 2009消费者最喜爱网站TOP100
- 全球最大的Spark+AI峰会发放优惠码SAIS20TRAIN,培训费优惠20%!