[Algorithms]算法学习笔记7.16

学习内容:

Dynamic Connectivity 动态连接

Quick Find 快速查找

Quick Union 快速连接

 

Quick Find 快速查找

对于要查找在一个图中几个小项是否连通,可以开辟一个数组,每个项都有其对应的ID,每一对连通的项都有相同的ID,这样就很好发现两个项是否连通了。但是要用这种方法将两个连通的区域连通,如果每个区域都有较多的连通项,那么实行起来就必定会耗费很大的时间,时间复杂度为O(n²),就不太可行。

Quick Union 快速连接

这个方法是利用树。当两个项连通时,就将其连起来,其中一个项的ID改为它的与它相连也就是它的父子节点的ID,以此类推,如果两个点是连通的,就将他们两个的节点连起来,然后将ID改为与它相连也就是它父子节点的ID。(我好像这块的表达能力不太行)这个方法比前面那种合并起来要快一点。想知道两个项是否相连,只要查找其最顶端的那个祖先节点是否相等,相等就说明连通。但是当一棵树非常高的时候,其实要看两个项是否连通就比较耗时。

 

[为解决上述“如果树太高,岂不是查找起来非常耗费时间内存”的问题即用如下解决方法]

快速查找和排序带权算法。

就是在每一次合并两个节点的时候,先比较这两个节点所在的树的大小,哪个小就把小的那个树插到树大的节点所在的树的根节点上,这样,树就会变得“矮”很多,查找起来效率就很高了。时间复杂度是O(logn)。这里我就想不明白,为什么是这个时间复杂度,然后,老师是这么说的↓

“当x所在的树,即图中的T1,与另一棵树,即图中的T2,合并的时候x的深度加1

好,之前我们说过只有在T2的大小 

T2的大小大于等于T1的大小时才会发生这种情况 所以当x深度增加时 

树的大小至少翻倍。这很关键,因为这意味着 

包含x的树的大小最多可以翻N次倍因为如果从1开始 

翻倍lg N次,就会得到N,而最后树中总共只有N个节点 

这就是任意节点x的深度最多是N以2为底的对数的粗略证明”

反正红字部分是死活没办法理解。

至于上述快速查找和合并带权算法,应用到物理模型中就是渗滤。可以是水管连通,电路连通还有网络连通等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值