Quick Union
Quick Union
quick union就是快速连接
和quick find相同,也是构建一个数组id[],不过存的值换一种理解:
每个数组内的元素看做一个结点,结点内的值即id[i]看做i的前驱结点.
初始化时将每个元素的前驱结点赋值为其下标,即id[]={0,1,2,3...,N-1}.
认为前驱结点和本身相同的结点为根结点,所以以上初始化就是将每个元素的根节点初始化为自己
对于某个结点,迭代的寻找其前驱结点,最终当某一结点找到的前驱结点和自身相同时,该结点即为以根结点,
某对结点,若他们的根相同,即认为相连(connnected)
class QuickUnion():
#pre define a array
__id = []
def __init__(self,N):
for i in range(0,N):
#initial the list:
#the __id[i] save i's root
#so, default to itself
self.__id.append(i)
#locate i's root
def root(self,i):
#locate from bottom to top
while i != self.__id[i]:
i = self.__id[i]
return i
def connected(self,p,q):
return self.root(p) == self.root(q)
def union(self,p,q):
i = self.root(p)
j = self.root(q)
self.__id[i] = j
def traversal(self):
for i in self.__id:
print(i,end=' ') Qu = QuickUnion(8)
Qu.union(0,1)
Qu.union(2,1)
Qu.union(2,4)
Qu.union(3,7)
print(Qu.connected(0,4))
Qu.traversal()
实例连接了0-1-2-4 3-7,并调用connected()方法验证0-4是否连接,
最后遍历一遍,查询所有元素的前驱结点
以下为输出:
True
1 4 1 7 4 5 6 7
根据输出可汇出树状图表示:
4 5 6 7
| |
1 3
/ \
0 2
Quick Union的更多相关文章
- Weighted Quick Union
Weighted Quick Union即: 在Quick Union的基础上对结点加权(weighted),在parent[i]基础上增加一个size[i]. 用来存储该结点(site)的所有子结点 ...
- Search Quick Union Find(图的存储结构)
Quick Find:适用于search频繁的情况 每个节点有一个id值,id相同表示两个节点相连通.在union时要将等于某一个id值都改成另一个id值 Quick Union: 适用于union频 ...
- Union-Find(并查集): Quick union improvements
Quick union improvements1: weighting 为了防止生成高的树,将smaller tree放在larger tree的下面(smaller 和larger是指number ...
- Union-Find(并查集): Quick union算法
Quick union算法 Quick union: Java implementation Quick union 性能分析 在最坏的情况下,quick-union的find root操作cost( ...
- Weighted Quick Union with Path Compression (WQUPC)
在WQU基础上,添加一步路径压缩. 前面的优化都是在union,路径压缩是在find上面做文章. 这里的路径压缩我还没完全搞明白,之后不断再来的,不管是理解还是博文编排素材之类的. 说是加一步压缩是确 ...
- Leetcode: Number of Islands II && Summary of Union Find
A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...
- Algorithm partI 第2节课 Union−Find
发展一个有效算法的具体(一般)过程: union-find用来解决dynamic connectivity,下面主要讲quick find和quick union及其应用和改进. 基本操作:find/ ...
- Union Find
并查集 前言 来自知乎,Coursera 上普林斯顿大学的算法公开课,稍微来博客上写写记记. 课程资源:1. Algorithms, Part I 2. Algorithms, Part II 3. ...
- Leetcode 128. Longest Consecutive Sequence (union find)
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...
随机推荐
- js中的运算符优先级
运算符有何很多,基本的可能都比较熟,单有些优先级很难记住.建议使用“()”将复杂的运算表达式区分好优先级. 我给运算符优先级做了一首小打油诗. 括号成员new函数 直new后置累计数 单目幂算乘除模 ...
- VS2015编译rtklib2.4.2
准备工作 在VS2015下新建一个win32的dll项目(空项目) 把在github上下载的rtklib2.4.2里的src文件夹复制到刚刚建立的win32下 把src里的文件添加到项目里,其中头文件 ...
- CString比较不区分大小写
第一种:都变为大写 或者都变成小写. str1.MakeUpper();str2.MakeUpper();or:str1.MakeLower();str2.MakeLower(); if(str1== ...
- stm32f7699遇到的犯二问题
没有看到stlink的驱动,难道板子坏了?? 结果:USB线的问题,换了一根用过的线,就行了:
- 清除 System.Web.Caching.Cache 以"xxx"开头的缓存
public static void ClearStartCache(string keyStart) { List<string> cacheKeys = new List<str ...
- TensorRT层和每个层支持的精度模式
下表列出了TensorRT层和每个层支持的精确模式.它还列出了该层在深度学习加速器(DLA)上运行的能力.有关附加约束的更多信息,请参见 DLA Supported Layershttps://doc ...
- 51单片机和STM32单片机区别在那里
大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...
- 关于mysql中like查询是否通过索引的测试
测试mysql的like语句是否通过索引时得到结果如下: 图片1: 图片2: 图片3: 通过上述3组图片我想大家很容易愤青我使用的'%8888888%','%8888888'和'8888888%'3中 ...
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序
npm install webpack-dev-server --save