集合的表示

集合运算:交、并、补、差,判定一个元素是否属于某一集合
并查集:集合并、查某元素属于什么集合

并查集问题中集合存储如何实现?

可以用树结构表示集合,树的每个结点代表一个集合元素

采用数组存储形式

集合运算

(1)查找某个元素所在的集合(用根结点表示)

int Find( SetType S[ ], ElementType X )
{ /* 在数组S中查找值为X的元素所属的集合 *//* MaxSize是全局变量,为数组S的最大长度 */int i;for ( i=0; i < MaxSize && S[i].Data != X; i++) ;if( i >= MaxSize ) return -1; /* 未找到X,返回-1 */for( ; S[i].Parent >= 0; i = S[i].Parent ) ;return i; /* 找到X所属集合,返回树根结点在数组S中的下标 */
}

(2)集合的并运算

分别找到X1和X2两个元素所在集合树的根结点
如果它们不同根,则将其中一个根结点的父结点指针设置成另一个根结点的数组下标。

void Union( SetType S[ ], ElementType X1, ElementType X2 )
{int Root1, Root2;Root1 = Find(S, X1);Root2 = Find(S, X2);if( Root1 != Root2 )S[Root2].Parent = Root1;
}

为了改善合并以后的查找性能,可以采用小的集合合并到相对大的集合中。(修改Union函数)

#define MAXN 1000                  /* 集合最大元素个数 */
typedef int ElementType;           /* 默认元素可以用非负整数表示 */
typedef int SetName;               /* 默认用根结点的下标作为集合名称 */
typedef ElementType SetType[MAXN]; /* 假设集合元素下标从0开始 */void Union( SetType S, SetName Root1, SetName Root2 )
{ /* 这里默认Root1和Root2是不同集合的根结点 *//* 保证小集合并入大集合 */if ( S[Root2] < S[Root1] ) { /* 如果集合2比较大 */S[Root2] += S[Root1];     /* 集合1并入集合2  */S[Root1] = Root2;}else {                         /* 如果集合1比较大 */S[Root1] += S[Root2];     /* 集合2并入集合1  */S[Root2] = Root1;}
}SetName Find( SetType S, ElementType X )
{ /* 默认集合元素全部初始化为-1 */if ( S[X] < 0 ) /* 找到集合的根 */return X;elsereturn S[X] = Find( S, S[X] ); /* 路径压缩 */
}

【数据结构】集合及运算相关推荐

  1. 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

    1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...

  2. 数据结构与算法(陈越版)第五讲 (树下)树的应用——集合及其运算

    数据结构与算法(陈越版)第五讲 (树下)树的应用--集合及其运算 一.集合的表示 1.1.集合的表示 1.2.集合的储存 二.集合的运算 2.1查找以及普通并 2.2按照秩的合并算法 2.3路径压缩优 ...

  3. 集合的运算(C++单链表实现)

    集合的运算 1.需求分析 2.数据结构与模块化设计 2.1 数据结构设计 2.2 模块化设计 2.3 总体功能流程图 3.程序设计 4.运行展示 1.需求分析 (1)建立两个含有若干个元素的单链表 A ...

  4. python两个集合相减_python集合的运算,两个集合相减是什么意思

    # 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果 # 创建两个集合 s = {1,2,3,4,5} s2 = {3,4,5,6,7} # & 交集运算 result = s & ...

  5. Python集合及运算

    集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...

  6. Javascript学习数据结构--集合(Set实现)

    定义 set是不允许重复元素的集合类型,set体系最常用的是HashSet ,TreeSet, LinkedHashSet.相同的元素是放不进去set的. HasHSet是使用HashMap实现的,只 ...

  7. python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...

    文章目录 三种方式实现 Python 中的集合的交.并.补运算 一 背景 集合这个概念在我们高中阶段就有所了解,毕业已多年,我们一起回顾一下几个集合相关的基本概念吧? 集合是指具有某种特定性质的具体的 ...

  8. 【广告技术】隐私集合交集运算结合同态加密,在保障数据安全的同时追踪广告效果

    [Wiztalk腾讯广告专场]系列分享来袭,第四期由南开大学计算机学院副院长.网络空间安全学院副院长刘哲理老师为大家深度介绍 <隐私集合交集算法研究>.在不久前由中国国际智能产业博览会组委 ...

  9. python中集合运算_python集合的运算

    #在对集合做运算时,不会影响原来的集合,而是返回一个运算结果#创建两个集合 s = {1,2,3,4,5} s2= {3,4,5,6,7}#& 交集运算 result = s & s2 ...

  10. python运算符计算集合并集_Python集合、集合的运算、集合方法详细讲解

    集合:由不同元素组成,无序的,不重复的序列 补充知识:可变类型:列表.字典:不可变类型:数字.字符串.元组 使用大括号{}或set()方法定义集合 se=set("hello") ...

最新文章

  1. 我的zsh配置, 2019最新方案
  2. java怎么添加地图_javaweb怎样添加百度地图
  3. 三极管放大电路三种类型
  4. Java 源程序与编译型运行区别
  5. 使用Java将数据流式传输到HPCC
  6. python安装rarfile模块_python windows下安装pip及rarfile
  7. Python自动运维系列:每天凌晨定时执行特定任务
  8. 单片机CC2530学习笔记
  9. mysql truncate语句_MySQL truncate table语句
  10. 【原创】破解无线路由密码的那些事儿
  11. maya破解版安装python_Maya mayapy.exe 安装 Cython,编译 pyd
  12. 反向题在测试问卷信效度_问卷一定要做信度效度检验吗?如果含有多选题怎样做信度分析,请各位高手帮帮忙。...
  13. 在线Java/C++/C语言/Python/web网页编辑器(IDE)整理
  14. 若依后台实现表连接查询显示,一对一查询
  15. 【途牛旅游项目】项目环境搭建,实现登陆功能
  16. 华为手机怎样无线与电脑连接服务器,华为手机如何与电脑远程连接服务器
  17. 移动技术开创互联网奇迹
  18. java提出word和pdf等文件的信息
  19. 坚果啊!ISA-NUT协会成立:求围观
  20. 吴恩达ML WEEK7 机器学习

热门文章

  1. web开发中常用的概念
  2. XMLIOC案例-编写spring的Ioc配置
  3. SpringBoot_日志-slf4j使用原理
  4. SpringBoot_入门-课程简介
  5. 使用RestTemplate模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别
  6. web.xml文件中可以配置哪些内容?
  7. ActiveMQ 消息持久化到Mysql数据库
  8. docker里面装mysql_docker中安装及使用mysql
  9. Nginx教程-http_core_module变量
  10. python pymongo+networkx 实现mongo数据血缘关系可视化