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相关推荐

  1. Union-find

    Union-find 终于抽出时间总结回顾一下Union-find了! <算法>书中,从quick_find,quick_union到weighted_quick_union到path c ...

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

  3. 数据结构与算法 学习笔记(中)

    油管上的CS61B的视频 学习代码 随看随记 Dijkstra's algorithm再理解 Asymptotics 本意是渐近的意思:这里代指当参数为无穷大时,所需要进行运算的次数,和我们常说的复杂 ...

  4. Leetcode总结之Union Find

    package UnionFind;import java.util.ArrayList; import java.util.LinkedList; import java.util.List;pub ...

  5. 【并查集】Union Find

    并查集 引出并查集 并查集(Union Find) 如何存储数据? 接口定义 元素的初始化 UnionFind.java Quick Find union 示例及实现 find 实现 Quick Fi ...

  6. 第三十一篇 玩转数据结构——并查集(Union Find)

    1.. 并查集的应用场景 查看"网络"中节点的连接状态,这里的网络是广义上的网络 数学中的集合类的实现 2.. 并查集所支持的操作 对于一组数据,并查集主要支持两种操作:合并两个数 ...

  7. 算法学习第一周union find solution

    union find 算法是用于解决动态连通性问题的算法,即用于判断一对给定的对象是否相连的问题. 在实现过程中不断改进出现了以下几种实现方法. 一 quick find 算法 在union find ...

  8. 数据结构与算法(十二)并查集(Union Find)及时间复杂度分析

    本文主要包括以下内容: 并查集的概念 并查集的操作 并查集的实现和优化 Quick Find Quick Union 基于size的优化 基于rank的优化 路径压缩优化 并查集的时间复杂度 并查集的 ...

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

  10. Python JAVA Solutions for Leetcode

    Python & JAVA Solutions for Leetcode (inspired by haoel's leetcode) Remember solutions are only ...

最新文章

  1. 企业管理难题:团队协作
  2. 深度学习模型之各种caffe版本(Linux和windows)的网址和配置
  3. 修改session的存储机制
  4. Windows下用tree命令生成目录树
  5. 从事web前端两年半后的迷茫
  6. 计算机视觉的监控系统研究现状,基于计算机视觉的监控系统的研究
  7. java 状态模式的实现与应用
  8. 幼儿园调查过程怎么写_【调查问卷总结怎么写】幼儿园家长调查问卷总结
  9. 小程序如何发布体验版本
  10. 舒淇出席活动兴致低 否认收张震结婚请柬
  11. [日推荐]『51好书推荐』专治假期综合症~
  12. 汇编:动态画出一棵七彩圣诞树
  13. 什么是似然函数?是条件概率吗?
  14. 哈尔滨工业大学计算机考研难吗,哈尔滨工业大学(专业学位)计算机技术考研难吗...
  15. 关于知识付费项目的五大总结
  16. Python 图像文字识别提取的两种简单方案(Windows)
  17. ios 连续点击button_iOS小技巧:用runtime 解决UIButton 重复点击问题
  18. ubuntu终端代码上传github最简方法
  19. 宝宝看的启蒙动画片哪里找?三款电视软件推荐,孩子启蒙不怕难
  20. 初等证明:第九章9.1节整数的阶和原根

热门文章

  1. Mr.Xiong使用jQuery实现时钟表盘的效果
  2. 信息系统项目管理师-3项目立项管理
  3. [1927-2011][影片][历届奥斯卡最佳影片合集][全82部]
  4. 微信视频号下载视频工具3.0,实测有效免费保存!
  5. 阿里员工爆出最好用的python库推荐!!--random随机数生成【原文附代码】
  6. excel求四分位数(QUARTILE 函数)
  7. android 监听本机网络请求_前端系列课程(2)-网络基础概念(URL)
  8. outlook2013升级_Microsoft Outlook 2013入门指南
  9. OEM产品验收测试用例如何编写
  10. MATLAB 数学应用 微分方程 一维偏微分方程 求解单个PDE