第21章:用于不相交集合的数据结构

原创 2016年05月30日 22:22:00

一:不相交集类的声明如下:

#ifndef DISJSETS_H
#define DISJSETS_H
#include <vector>
using namespace std;
class DisjSets{
public:
        explicit DisjSets(int);

        bool isSameSet(int x, int y) const
        { return findSet(x)==findSet(y);}

        int findSet(int) const;
        int findSet(int);

        void unionSets(int,int);
private:
        vector<int> s;
};
#endif

二:不相交集类的实现如下:

#include "DisjSets.h"
DisjSets::DisjSets(int numElements):s(numElements)
{
        for(int i=0;i!=s.size();i++)
                s[i]=-1;
}

int DisjSets::findSet(int x) const
{
        if(s[x]<0)
                return x;
        return findSet(s[x]);
}

int DisjSets::findSet(int x)
{
        if(s[x]<0)
                return x;
        return s[x]=findSet(s[x]);
}

void DisjSets::unionSets(int x,int y)
{
        int root1=findSet(x);
        int root2=findSet(y);

        if(root1==root2)
                return;

        if(s[root2]<s[root1])
                s[root1]=root2;
        else{
                if(s[root2]==s[root1])
                        s[root1]--;
                s[root2]=root1;
        }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

算法导论 第21章 用于不相交集合的数据结构

不相交集合的定义和操作     不相交集合的数据结构保持一组动态集合,每个集合通常有一个代表(也是该集合的成员),用以标识该集合。显然,由于这组动态集合是不相交的,那么集合代表(标识)自然也是独一无二...
  • zilingxiyue
  • zilingxiyue
  • 2015年04月07日 14:21
  • 1199

[算法导论读书笔记]用于不相交集合的数据结构(并查集)

不相交集合数据结构的概念和操作:     不相交集合数据结构(disjoing-set data structure)保持一组不相交的动态集合S={S1,S2,S3,……Sk}。每个集合通过一个代表...
  • lalor
  • lalor
  • 2012年03月23日 21:11
  • 3752

算法导论习题解-第21章用于不相交集合的数据结构

习题编号以第3版为准 #21-3 Tarjan的
  • groovy2007
  • groovy2007
  • 2014年07月29日 22:11
  • 945

用于不相交集合的数据结构(算法导论第21章-并查集)

将n个不同的元素分成一组不相交的集合。这些应用经常需要
  • u013077167
  • u013077167
  • 2014年08月05日 19:58
  • 522

不相交集类算法

1、不相交集类的算法: 这是处理等价问题的一种算法,这里的等价指的是集合,a与b等价,是指a∈S,b∈S。通过不相交集类的两个基本操作find就可找出a和b的集合标志是否一致,若一致则说明它们是一个集...
  • u013755250
  • u013755250
  • 2016年03月26日 19:10
  • 1189

《Java编程思想第四版》笔记---21章(1) 并发

线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础。 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是...
  • u012861467
  • u012861467
  • 2016年08月27日 00:19
  • 692

并查集——用于不相交集合的数据结构

并查集 并查集保持一组不相交的动态集合S={S1, S2, ..., SK}.每个集合通过一个代表来表示,代表即集合中的某个成员。 并查集的精髓(即它的三种操作): 集合中的每一个元素是由一个对象表示...
  • zinss26914
  • zinss26914
  • 2013年04月08日 15:06
  • 2488

算法导论 第二十一章:不相交集合的数据结构

不相交集合(Disjoint-set )数据结构保持一组不相交的动态集合S={S(1),S(2),...,S(k)}.每个集合通过一个代表(representative)来识别,即集合中的某个成员。设...
  • u010183397
  • u010183397
  • 2015年07月18日 15:41
  • 661

用于不相交集合的数据结构

不相交集合的操作 MAKE-SET(x):建立一个集合,它的唯一成员(因而为代表)是x。因为各个集合是不相交的,所以x不会出现在别的某个集合中 UNION(x,y):将包含x和y的两个集合合并。假定...
  • laoj1228
  • laoj1228
  • 2017年01月03日 09:51
  • 223

算法导论21(用于不相交集合的数据结构)

21.1不相交集合的操作 不相交集合数据结构()
  • hz5034
  • hz5034
  • 2014年10月31日 20:47
  • 317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第21章:用于不相交集合的数据结构
举报原因:
原因补充:

(最多只允许输入30个字)