【数据结构】集合及运算
集合的表示
集合运算:交、并、补、差,判定一个元素是否属于某一集合
并查集:集合并、查某元素属于什么集合
并查集问题中集合存储如何实现?
可以用树结构表示集合,树的每个结点代表一个集合元素
采用数组存储形式
集合运算
(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.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...
- 数据结构与算法(陈越版)第五讲 (树下)树的应用——集合及其运算
数据结构与算法(陈越版)第五讲 (树下)树的应用--集合及其运算 一.集合的表示 1.1.集合的表示 1.2.集合的储存 二.集合的运算 2.1查找以及普通并 2.2按照秩的合并算法 2.3路径压缩优 ...
- 集合的运算(C++单链表实现)
集合的运算 1.需求分析 2.数据结构与模块化设计 2.1 数据结构设计 2.2 模块化设计 2.3 总体功能流程图 3.程序设计 4.运行展示 1.需求分析 (1)建立两个含有若干个元素的单链表 A ...
- python两个集合相减_python集合的运算,两个集合相减是什么意思
# 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果 # 创建两个集合 s = {1,2,3,4,5} s2 = {3,4,5,6,7} # & 交集运算 result = s & ...
- Python集合及运算
集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...
- Javascript学习数据结构--集合(Set实现)
定义 set是不允许重复元素的集合类型,set体系最常用的是HashSet ,TreeSet, LinkedHashSet.相同的元素是放不进去set的. HasHSet是使用HashMap实现的,只 ...
- python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...
文章目录 三种方式实现 Python 中的集合的交.并.补运算 一 背景 集合这个概念在我们高中阶段就有所了解,毕业已多年,我们一起回顾一下几个集合相关的基本概念吧? 集合是指具有某种特定性质的具体的 ...
- 【广告技术】隐私集合交集运算结合同态加密,在保障数据安全的同时追踪广告效果
[Wiztalk腾讯广告专场]系列分享来袭,第四期由南开大学计算机学院副院长.网络空间安全学院副院长刘哲理老师为大家深度介绍 <隐私集合交集算法研究>.在不久前由中国国际智能产业博览会组委 ...
- python中集合运算_python集合的运算
#在对集合做运算时,不会影响原来的集合,而是返回一个运算结果#创建两个集合 s = {1,2,3,4,5} s2= {3,4,5,6,7}#& 交集运算 result = s & s2 ...
- python运算符计算集合并集_Python集合、集合的运算、集合方法详细讲解
集合:由不同元素组成,无序的,不重复的序列 补充知识:可变类型:列表.字典:不可变类型:数字.字符串.元组 使用大括号{}或set()方法定义集合 se=set("hello") ...
最新文章
- 我的zsh配置, 2019最新方案
- java怎么添加地图_javaweb怎样添加百度地图
- 三极管放大电路三种类型
- Java 源程序与编译型运行区别
- 使用Java将数据流式传输到HPCC
- python安装rarfile模块_python windows下安装pip及rarfile
- Python自动运维系列:每天凌晨定时执行特定任务
- 单片机CC2530学习笔记
- mysql truncate语句_MySQL truncate table语句
- 【原创】破解无线路由密码的那些事儿
- maya破解版安装python_Maya mayapy.exe 安装 Cython,编译 pyd
- 反向题在测试问卷信效度_问卷一定要做信度效度检验吗?如果含有多选题怎样做信度分析,请各位高手帮帮忙。...
- 在线Java/C++/C语言/Python/web网页编辑器(IDE)整理
- 若依后台实现表连接查询显示,一对一查询
- 【途牛旅游项目】项目环境搭建,实现登陆功能
- 华为手机怎样无线与电脑连接服务器,华为手机如何与电脑远程连接服务器
- 移动技术开创互联网奇迹
- java提出word和pdf等文件的信息
- 坚果啊!ISA-NUT协会成立:求围观
- 吴恩达ML WEEK7 机器学习
热门文章
- web开发中常用的概念
- XMLIOC案例-编写spring的Ioc配置
- SpringBoot_日志-slf4j使用原理
- SpringBoot_入门-课程简介
- 使用RestTemplate模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别
- web.xml文件中可以配置哪些内容?
- ActiveMQ 消息持久化到Mysql数据库
- docker里面装mysql_docker中安装及使用mysql
- Nginx教程-http_core_module变量
- python pymongo+networkx 实现mongo数据血缘关系可视化