数据结构之 --- 树的应用(并查集)
2015-11-25 17:27
381 查看
概念:
并查集是一种简单的集合表示,它支持一下三种操作:
1)Union(S, Root1, Root2):
把集合S中的子集合Root2并入集合Root1中。要求Root1和Root2互不相交,否则不执行合并。
2)Find(S, x):
查找集合S中单元素x所在的子集合,并返回该子集合的名字。
3)Inital(S):将集合S中的每一个元素都初始为只有一个单元的子集合。
通常用树(森林)的双亲表示作为并查集的存储结构,每个子集合以一棵树表示。所有表示子集合的树构成森林,
存放在双亲表示数组内,通常用数组元素的下表代表元素名,根结点的下标代表子集合名,根结点的双亲位负数。
例如,若设有一个全集合为S = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},初始化时每个元素自成一个单元子集合,每个子集合的数组值是 -1
经过一段时间的计算,这些子集合合并成三个更大的子集合
S1 = {0, 6, 7, 8}
S2 = {1, 4, 9}
S3 = {2, 3, 5}
此时并查集的树形表示和存储结构如下所示。
![](https://img-blog.csdn.net/20151125172716757?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
为了得到两个子集合的并,只要将其中一个子集合的根结点的双亲指针指向另一个集合的根结点即可。
模板代码如下:
#define SIZE 100
int UFSets[SIZE];
void Initial(int S[])
{
for(int i = 0; i < size; i++)
S[i] = -1;
}
int Find(int S[], int x)
{
while(S[x] >= 0)
x = S[x];
return x;
}
void Union(int S[], int Root1, int Root2)
{
S[Root2] = Root1;
}
并查集是一种简单的集合表示,它支持一下三种操作:
1)Union(S, Root1, Root2):
把集合S中的子集合Root2并入集合Root1中。要求Root1和Root2互不相交,否则不执行合并。
2)Find(S, x):
查找集合S中单元素x所在的子集合,并返回该子集合的名字。
3)Inital(S):将集合S中的每一个元素都初始为只有一个单元的子集合。
通常用树(森林)的双亲表示作为并查集的存储结构,每个子集合以一棵树表示。所有表示子集合的树构成森林,
存放在双亲表示数组内,通常用数组元素的下表代表元素名,根结点的下标代表子集合名,根结点的双亲位负数。
例如,若设有一个全集合为S = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},初始化时每个元素自成一个单元子集合,每个子集合的数组值是 -1
经过一段时间的计算,这些子集合合并成三个更大的子集合
S1 = {0, 6, 7, 8}
S2 = {1, 4, 9}
S3 = {2, 3, 5}
此时并查集的树形表示和存储结构如下所示。
为了得到两个子集合的并,只要将其中一个子集合的根结点的双亲指针指向另一个集合的根结点即可。
模板代码如下:
#define SIZE 100
int UFSets[SIZE];
void Initial(int S[])
{
for(int i = 0; i < size; i++)
S[i] = -1;
}
int Find(int S[], int x)
{
while(S[x] >= 0)
x = S[x];
return x;
}
void Union(int S[], int Root1, int Root2)
{
S[Root2] = Root1;
}
相关文章推荐
- 几种查找数组的前K个最小值的算法
- 数据结构
- javascript数据结构之双链表插入排序实例详解
- SQL笔记(2)_第二章 定义数据结构
- 学习数据结构与算法分析如何帮助您成为更优秀的开发人员
- javascript数据结构之二叉搜索树实现方法
- 《大话数据结构》之关键路径算法
- 数据结构关于AOV与AOE网的区别
- 严蔚敏 数据结构习题6.62
- 严蔚敏 数据结构习题 6.52
- 严蔚敏 数据结构习题 6.49
- 严蔚敏 数据结构习题6.47
- 严蔚敏 数据结构习题 6.41
- 数据结构 — 7.有向图的创建及出入度的计算
- 线索二叉树的遍历(数据结构)
- 模式-算法-数据结构
- 《数据结构与算法》学习之入门篇
- 数据结构实验之图论六:村村通公路
- javascript数据结构之二叉搜索树实现方法
- javascript数据结构之双链表插入排序实例详解