并查集的定义.ppt
《并查集的定义.ppt》由会员分享,可在线阅读,更多相关《并查集的定义.ppt(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、并查集并查集的定义并查集的定义在一些应用问题中,我们需要划分n个不同的元素成若干组,每一组的元素构成一个集合。这种问题的一个解决办法是,在开始时,让每个元素自成一个单元素集合,然后按一定顺序将属于同一组的元素所在的集合合并。其间要反复用到查找一个元素在哪一个集合的运算。适合于描述这类问题的抽象数据类型称为并查集。(给出各个元素之间的联系,要求将这些元素分成几个集合,每个集给出各个元素之间的联系,要求将这些元素分成几个集合,每个集合中的元素直接或间接有联系。在这类问题中主要涉及的是对集合合中的元素直接或间接有联系。在这类问题中主要涉及的是对集合的合并和查找,因此将这种集合称为并查集。的合并和查找
2、,因此将这种集合称为并查集。)并查集的数学模型是若干不相交的动态集合的集合SA,B,C,.,它支持以下的运算:(1)INITIAL(A,x):构造一个取名为A的集合,它只包含一个元素x;(2)MERGE(A,B):将集合A和B合并,其结果取名为A或B;(3)FIND(x):找出元素x的所在集合,并返回该集合的名字。并查集的数学模型并查集的数学模型例如,对于S1,2,.,7,要求作出S的等价类划分满足给定的等价性条件:12,56,34,和14。我们首先将S的每一个元素看成一个等价类,然后顺序地处理所列的条件。每处理完一个条件,所得到的相应等价类列表如下:121,234567;561,2345,6
3、7;341,23,45,67;141,2,3,45,67。所得到的结果是1,2,3,45,67。用数组实现并查集用数组实现并查集Constmaxn=100;Vardata:array1.maxnofinteger;在一般情况下,data应定义为:array元素的子界类型of集合名的类型。合并:O(n)查找:O(1)将所有元素合并到一个集合:O(n2)建立一个集合建立一个集合 O(1)procedureinitial(A,x:integer);begindatax:=A;end;构造一个取名为构造一个取名为A的集合,它只包含一个元素的集合,它只包含一个元素x;查找一个元素所属集合查找一个元素所属
4、集合 O(1)functionfind(x:integer):integer;beginfind:=datax;end;找出元素找出元素x的所在集合,并返回该集合的名字。的所在集合,并返回该集合的名字。合并两个集合合并两个集合 O(n)proceduremerge(A,B:integer);vari:integer;beginfori:=1tondoifdatai=Bthendatai:=A;end;将集合将集合A和和B合并,其结果取名为合并,其结果取名为AConstmaxn=100;Vardata:array1.maxnofinteger;procedureinitial(A,x:integ
5、er);begindatax:=A;end;functionfind(x:integer):integer;beginfind:=datax;end;proceduremerge(A,B:integer);vari:integer;beginfori:=1tondoifdatai=Bthendatai:=A;end;用链表实现并查集用链表实现并查集合并:O(i)查找:O(1)将所有元素合并到一个集合:O(nlogn)从n个单元素集开始,至多执行n-1次的MERGE运算就可以将所有元素合并到一个集合中。用前面算法,执行n-1次MERGE运算需要O(n2)时间,效率太低。加速MERGE运算的一种方
6、法是将各个集合中的元素链接成一个表,使得当要把集合B合并到集合A上去的时候,只要遍历B的各个元素而不必遍历全部n个元素。但最坏情况下,合并所有元素的时间复杂度仍为O(n2)为了改善最坏情况下的复杂度,明显的策略是:每次合并时总是将小的集合合并到大的集合上去。datarecordsetheaders:array1.nofrecordcount:1.n;集合中元素的个数firstelement:1.n;第一个元素end;names:array1.nofrecordSetname:1.n;该元素所属集合nextelement:1.n该元素的下一个元素endend;例:集合1为1,3,4,集合2为2,
7、集合5为5,6。311200002500132014105650123456123456setheaders:names:procedureINITIAL(A:nametype;x:elementtype;varC:data);beginC.namesx.setname:=A;C.namesx.nextelement:=0;C.setheadersA.count:=1;C.setheadersA.firstelement.:=x;end;functionFIND(x:elementtype;varC:data):nametype;beginfind:=C.namesx.setname;end;
8、procedureMERGE(A,B:nametype;varC:data);Vari:elementtype;BeginifC.setheadersA.countC.setheadersB.countthenbegin将B合并到Ai:=C.setheadersB.firstelement;whileC.namesi.nextelement0dobeginC.namesi.setname:=A;i:=C.namesi.nextelement;end;C.namei.setname:=A;C.namei.nextelement:=C.sethteaersA.firstelement;C.seth
9、eadersA.firstelement:=C.setheadersB.firstelement;C.setheadersA.count:=C.setheadersA.count+C.setheadersB.count;C.setheadersB.count:=0;C.setheaersB.firstelement:=0endelse将A合并到BEnd;用树实现并查集用树实现并查集每个集合用一棵树表示。集合的元素名分别存放在树的结点中。树的每一个结点还存放着一个指向其父结点的指针。此外,还需要两个映射。一个是集合中的元素到存放该元素的元素名的树结点的映射;另一个是集合的名字到表示该集合的树的树
10、根的映射。A1,2,3,4,B5,6和C71234567A1,2,3,4,B5,6和C7123456将B合并到A合并:O(1)查找:O(logn)将所有元素合并到一个集合:O(n)注:每次应将小树合并到大树中,注:每次应将小树合并到大树中,否则最坏情况下树会退化成一条否则最坏情况下树会退化成一条链,使查找的时间复杂度为链,使查找的时间复杂度为O(n)。data=array1.nofrecord下标为元素的子界类型setname:1.n;集合名称parent:1.n;count:1.n;以此节点为根的树层数end;用父亲数组实现并查集procedureINITIAL(A:nametype;x:e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 定义
限制150内