Weighted Quick Union
Weighted Quick Union即:
在Quick Union的基础上对结点加权(weighted),在parent[i]基础上增加一个size[i].
用来存储该结点(site)的所有子结点数目.(size[i] == number of sites in subtree rooted at i)
具体操作步骤:
仅仅在union() operation改变,在改变parent前,增加一个步骤:
比较两个结点的size,谁更轻谁就在下面,
具体看代码:
1 class WeightedQuickUnion(): 2 __count = int() #number of components 3 __parent = list() #__parent[i] parent of i 4 __size = list() #size[i] number of sites in subtree rooted at i 5 #Each site is initially in its own component 6 def __init__(self,N): 7 self.__count = N 8 for i in range(0,self.__count): 9 self.__parent.append(i) 10 self.__size.append(1) 11 #Return the component identifier for the component containing site 12 def find(self,p): 13 self.validate(p) 14 while (p != self.__parent[p]): 15 p = self.__parent[p] 16 return p 17 def connected(self,p,q): 18 return self.find(p) == self.find(q) 19 #Merges the component containig site p with 20 #the component containing site q 21 def union(self,p,q): 22 rootP=self.find(p) 23 rootQ=self.find(q) 24 if (rootP == rootQ): 25 return 26 if (self.__size[rootP] < self.__size[rootQ]): 27 self.__parent[rootP] = rootQ 28 self.__size[rootQ] += self.__size[rootP] 29 else: 30 self.__parent[rootQ] = rootP 31 self.__size[rootP] += self.__size[rootQ] 32 self.__count-=1 33 def validate(self, p): 34 n = len(self.__parent) 35 if (p < 0 or p >= n): 36 raise ValueError("index", p, "is not between 0 and", (n - 1)) 37 def traversal(self): 38 for i in self.__parent: 39 print(i,end=' ') 40 WQU = WeightedQuickUnion(8) 41 WQU.union(0,1) 42 WQU.union(2,1) 43 WQU.union(2,4) 44 WQU.union(3,7) 45 print(WQU.connected(0,4)) 46 WQU.traversal()
实例同上一文Quick Find一样,
连接0-1-2-4 3-7,并调用connected()方法验证0-4是否连接
最后遍历
输出:
True 0 0 0 3 0 5 6 3
根据输出可以反应出树形图:
0 3 5 6
/ | \ |
1 2 4 7
程序中:union()方法里,把size的比较分为两种情况,小于以及大于+等于.
union(0,1)的时候0是p,1是q,他们的size都是1,所以会执行
1 self.__parent[rootQ] = rootP 2 self.__size[rootP] += self.__size[rootQ]
也就是q(1)会成为p(0)的子节点.
union(3,7)同理.
其它情况由于size不同,会按照程序写的那样,把轻的作重的子节点
转载于:https://www.cnblogs.com/katachi/p/9565347.html
Weighted Quick Union相关推荐
- Union-find
Union-find 终于抽出时间总结回顾一下Union-find了! <算法>书中,从quick_find,quick_union到weighted_quick_union到path c ...
- 261. Graph Valid Tree
题目: Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nod ...
- 数据结构与算法 学习笔记(中)
油管上的CS61B的视频 学习代码 随看随记 Dijkstra's algorithm再理解 Asymptotics 本意是渐近的意思:这里代指当参数为无穷大时,所需要进行运算的次数,和我们常说的复杂 ...
- Leetcode总结之Union Find
package UnionFind;import java.util.ArrayList; import java.util.LinkedList; import java.util.List;pub ...
- 【并查集】Union Find
并查集 引出并查集 并查集(Union Find) 如何存储数据? 接口定义 元素的初始化 UnionFind.java Quick Find union 示例及实现 find 实现 Quick Fi ...
- 第三十一篇 玩转数据结构——并查集(Union Find)
1.. 并查集的应用场景 查看"网络"中节点的连接状态,这里的网络是广义上的网络 数学中的集合类的实现 2.. 并查集所支持的操作 对于一组数据,并查集主要支持两种操作:合并两个数 ...
- 算法学习第一周union find solution
union find 算法是用于解决动态连通性问题的算法,即用于判断一对给定的对象是否相连的问题. 在实现过程中不断改进出现了以下几种实现方法. 一 quick find 算法 在union find ...
- 数据结构与算法(十二)并查集(Union Find)及时间复杂度分析
本文主要包括以下内容: 并查集的概念 并查集的操作 并查集的实现和优化 Quick Find Quick Union 基于size的优化 基于rank的优化 路径压缩优化 并查集的时间复杂度 并查集的 ...
- Prefix Operations and Tries | CS 61B Data Structures, Spring 2019
Data Structures Summary The problem we are presented: Given a stream of data, retrieve(搜索) informati ...
- Python JAVA Solutions for Leetcode
Python & JAVA Solutions for Leetcode (inspired by haoel's leetcode) Remember solutions are only ...
最新文章
- 企业管理难题:团队协作
- 深度学习模型之各种caffe版本(Linux和windows)的网址和配置
- 修改session的存储机制
- Windows下用tree命令生成目录树
- 从事web前端两年半后的迷茫
- 计算机视觉的监控系统研究现状,基于计算机视觉的监控系统的研究
- java 状态模式的实现与应用
- 幼儿园调查过程怎么写_【调查问卷总结怎么写】幼儿园家长调查问卷总结
- 小程序如何发布体验版本
- 舒淇出席活动兴致低 否认收张震结婚请柬
- [日推荐]『51好书推荐』专治假期综合症~
- 汇编:动态画出一棵七彩圣诞树
- 什么是似然函数?是条件概率吗?
- 哈尔滨工业大学计算机考研难吗,哈尔滨工业大学(专业学位)计算机技术考研难吗...
- 关于知识付费项目的五大总结
- Python 图像文字识别提取的两种简单方案(Windows)
- ios 连续点击button_iOS小技巧:用runtime 解决UIButton 重复点击问题
- ubuntu终端代码上传github最简方法
- 宝宝看的启蒙动画片哪里找?三款电视软件推荐,孩子启蒙不怕难
- 初等证明:第九章9.1节整数的阶和原根
热门文章
- Mr.Xiong使用jQuery实现时钟表盘的效果
- 信息系统项目管理师-3项目立项管理
- [1927-2011][影片][历届奥斯卡最佳影片合集][全82部]
- 微信视频号下载视频工具3.0,实测有效免费保存!
- 阿里员工爆出最好用的python库推荐!!--random随机数生成【原文附代码】
- excel求四分位数(QUARTILE 函数)
- android 监听本机网络请求_前端系列课程(2)-网络基础概念(URL)
- outlook2013升级_Microsoft Outlook 2013入门指南
- OEM产品验收测试用例如何编写
- MATLAB 数学应用 微分方程 一维偏微分方程 求解单个PDE