http://blog.csdn.net/u011608357/article/details/37966199
1.不相交集是解决等价关系的一种数据结构,执行合并和查找的速度都非常快,M次运行合并和查找的运行时间为(M*logN)。
在一个集合中,对于每一对元素(a,b),a,b∈S,对于关系R如果满足下面三个条件,则成关系R为等价关系:
(1)自反性 对于所有a∈S,aRa
(2)对称性 aRb当且仅当bRa
(3)传递性 若aRb且bRc,则aRc
有关不相交集的介绍和C语言实现,点此查看
本文介绍的是不相交集的find和union操作的python实现:
- def init(a):
- for i in range(0,110):
- a.append(-1);
- def unionset(root1,root2): #按照大小求并
- tmp=a[root1]+a[root2];
- if a[root1]<=a[root2]:
- a[root2]=root1;
- a[root1]=tmp;
- else :
- a[root1]=root2;
- a[root2]=tmp;
- def unions(root1,root2): #按照高度求并
- if a[root1]>a[root2]:
- a[root1]=root2;
- else:
- if a[root1] is a[root2]: #只有在高度相同的时候才进行合并
- a[root1]=a[root1]-1;
- a[root2]=root1;
- def find(a,x):
- if a[x]<=-1:
- return x;
- else :
- return find(a,a[x]);
- a=[]; #测试代码
- init(a);
- unionset(1,2); #按大小求并
- unionset(3,4);
- unions(5,6); # 按高度求并
- unions(5,7);
- print find(a,2);
- unionset(1,3);
- print find(a,4);
- print find(a,5);
- print find(a,7);