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的更多相关文章

  1. Weighted Quick Union

    Weighted Quick Union即: 在Quick Union的基础上对结点加权(weighted),在parent[i]基础上增加一个size[i]. 用来存储该结点(site)的所有子结点 ...

  2. Search Quick Union Find(图的存储结构)

    Quick Find:适用于search频繁的情况 每个节点有一个id值,id相同表示两个节点相连通.在union时要将等于某一个id值都改成另一个id值 Quick Union: 适用于union频 ...

  3. Union-Find(并查集): Quick union improvements

    Quick union improvements1: weighting 为了防止生成高的树,将smaller tree放在larger tree的下面(smaller 和larger是指number ...

  4. Union-Find(并查集): Quick union算法

    Quick union算法 Quick union: Java implementation Quick union 性能分析 在最坏的情况下,quick-union的find root操作cost( ...

  5. Weighted Quick Union with Path Compression (WQUPC)

    在WQU基础上,添加一步路径压缩. 前面的优化都是在union,路径压缩是在find上面做文章. 这里的路径压缩我还没完全搞明白,之后不断再来的,不管是理解还是博文编排素材之类的. 说是加一步压缩是确 ...

  6. 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 ...

  7. Algorithm partI 第2节课 Union−Find

    发展一个有效算法的具体(一般)过程: union-find用来解决dynamic connectivity,下面主要讲quick find和quick union及其应用和改进. 基本操作:find/ ...

  8. Union Find

    并查集 前言 来自知乎,Coursera 上普林斯顿大学的算法公开课,稍微来博客上写写记记. 课程资源:1. Algorithms, Part I 2. Algorithms, Part II 3. ...

  9. Leetcode 128. Longest Consecutive Sequence (union find)

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...

随机推荐

  1. js中的运算符优先级

    运算符有何很多,基本的可能都比较熟,单有些优先级很难记住.建议使用“()”将复杂的运算表达式区分好优先级. 我给运算符优先级做了一首小打油诗. 括号成员new函数 直new后置累计数 单目幂算乘除模 ...

  2. VS2015编译rtklib2.4.2

    准备工作 在VS2015下新建一个win32的dll项目(空项目) 把在github上下载的rtklib2.4.2里的src文件夹复制到刚刚建立的win32下 把src里的文件添加到项目里,其中头文件 ...

  3. CString比较不区分大小写

    第一种:都变为大写 或者都变成小写. str1.MakeUpper();str2.MakeUpper();or:str1.MakeLower();str2.MakeLower(); if(str1== ...

  4. stm32f7699遇到的犯二问题

    没有看到stlink的驱动,难道板子坏了?? 结果:USB线的问题,换了一根用过的线,就行了:

  5. 清除 System.Web.Caching.Cache 以"xxx"开头的缓存

    public static void ClearStartCache(string keyStart) { List<string> cacheKeys = new List<str ...

  6. TensorRT层和每个层支持的精度模式

    下表列出了TensorRT层和每个层支持的精确模式.它还列出了该层在深度学习加速器(DLA)上运行的能力.有关附加约束的更多信息,请参见 DLA Supported Layershttps://doc ...

  7. 51单片机和STM32单片机区别在那里

    ​大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...

  8. 关于mysql中like查询是否通过索引的测试

    测试mysql的like语句是否通过索引时得到结果如下: 图片1: 图片2: 图片3: 通过上述3组图片我想大家很容易愤青我使用的'%8888888%','%8888888'和'8888888%'3中 ...

  9. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  10. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序

    npm install  webpack-dev-server --save