关闭

不相交集python实现

66人阅读 评论(0) 收藏 举报

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实现:

  1. def init(a):  
  2.     for i in range(0,110):  
  3.         a.append(-1);  
  4. def unionset(root1,root2):              #按照大小求并  
  5.     tmp=a[root1]+a[root2];  
  6.     if a[root1]<=a[root2]:  
  7.         a[root2]=root1;   
  8.         a[root1]=tmp;  
  9.     else :  
  10.         a[root1]=root2;  
  11.         a[root2]=tmp;  
  12.           
  13. def unions(root1,root2):                #按照高度求并  
  14.     if a[root1]>a[root2]:  
  15.         a[root1]=root2;  
  16.     else:  
  17.         if a[root1] is a[root2]:   #只有在高度相同的时候才进行合并  
  18.             a[root1]=a[root1]-1;  
  19.         a[root2]=root1;  
  20.           
  21. def find(a,x):  
  22.     if a[x]<=-1:  
  23.         return x;  
  24.     else :  
  25.         return find(a,a[x]);  
  26.           
  27.   
  28. a=[];            #测试代码  
  29. init(a);  
  30. unionset(1,2);   #按大小求并  
  31. unionset(3,4);  
  32. unions(5,6);     # 按高度求并  
  33. unions(5,7);  
  34. print find(a,2);  
  35. unionset(1,3);  
  36. print find(a,4);  
  37. print find(a,5);  
  38. print find(a,7); 
0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44941次
    • 积分:987
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:62篇
    • 译文:0篇
    • 评论:2条
    最新评论