集合及运算

集合的表示

  • 集合运算:交、并、补、差,判定一个元素是否属于某一集合
  • 并查集:集合并、查某元素属于什么集合
  • 可以用树结构表示集合,树的每个结点代表一个集合元素
    在这里插入图片描述

在这里插入图片描述

集合运算

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

int Find(SetType S[], Elemtype 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) 集合的并运算

  1. 分别找到X1和X2两个元素所在集合树的根结点
  2. 如果它们不同根,则将其中一个根结点的父结点指针设置成另一个根结点的数组下标。
void Union(SetType S[], Elemtype X1, Elemtype X2)
{
	int Root1, Root2;
	Root1 = Find(S, X1);
	Root2 = Find(S, X2);
	if(Root1!= Root2)
		S[Root2].Parent = Root1;
}

为了不让树的高度增加的太快,将较小的集合合并到较大的集合中。根结点的parent的绝对值表示该集合元素的数量
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/happyjacob/article/details/83339403