关闭

不相交集python实现

209人阅读 评论(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
查看评论

数据结构之不相交集类

不相交集类是解决等价关系问题的一种非常有效的手段!等价关系是一种关系R,他满足自反性,对称性与传递性。有人说散列是最艺术的数据结构,优先队列是最优雅的数据结构 而不相交集类就是最简洁的数据结构!这些说法我非常赞同,因为不相交集类的实现代码真的太简洁了。     处理等价关系最重要...
  • u013708970
  • u013708970
  • 2014-03-30 20:20
  • 1609

关于不相交集

参考: 数据结构与算法分析——Java语言描述  (美)Mark Allen Weis 等         不相交集,这种数据结构以前我倒是听都没听过。它是解决等价问题的一种有效数据结构。这种数据结构实现...
  • zhutulang
  • zhutulang
  • 2012-07-27 12:33
  • 3070

不相交集及应用

法国法
  • spch2008
  • spch2008
  • 2013-07-21 19:58
  • 3004

不相交集类算法

1、不相交集类的算法: 这是处理等价问题的一种算法,这里的等价指的是集合,a与b等价,是指a∈S,b∈S。通过不相交集类的两个基本操作find就可找出a和b的集合标志是否一致,若一致则说明它们是一个集合的。当然,对于集合的表示,用的是森林的数据结构。集合的标志就是根节点,若根节点一样,就说明集合一样...
  • u013755250
  • u013755250
  • 2016-03-26 19:10
  • 1195

数据结构之不相交集的应用例程

/* 8-6 不相交集的类架构*/ class DisjSets { public: explicit DisjSets( int numElements ); int find( int x ) const; int find( int x ); ...
  • han____shuai
  • han____shuai
  • 2015-05-22 00:05
  • 456

并查集(不相交集)C++实现

并查集类申明: disjoinset.h文件 #ifndef __DIS_JOIN_SET_H__ #define __DIS_JOIN_SET_H__ #include #include class disjoinset { public: // 构造函数 explicit d...
  • yangalbert
  • yangalbert
  • 2013-10-06 17:58
  • 2532

不相交集python实现

1.不相交集是解决等价关系的一种数据结构,执行合并和查找的速度都非常快,M次运行合并和查找的运行时间为(M*logN)。 在一个集合中,对于每一对元素(a,b),a,b∈S,对于关系R如果满足下面三个条件,则成关系R为等价关系: (1)自反性  对于所有a∈S,aRa (2)对称性 ...
  • u011608357
  • u011608357
  • 2014-07-20 09:43
  • 851

不相交集ADT

1.不相交集是解决等价关系的一种数据结构,执行合并和查找的速度都非常快,M次运行合并和查找的运行时间为(M*logN)。 2.不相交集ADT支持三种操作: Union操作:把两个集合合并 Find操作:查找某个元素所在集合的名字,两个元素x,y在同一个集合中的充要条件是Find(x)和Find(y)...
  • u011608357
  • u011608357
  • 2014-03-23 09:29
  • 1143

不相交集生成随机迷宫

不相交集可以用于解决等价关系。这种数据结构实现起来非常简单,只需要一个一维数组。采用不相交集来演示如何生成随机迷宫,并用图形界面给予展示。
  • littleschemer
  • littleschemer
  • 2015-09-28 21:58
  • 1236

不相交集(The Disjoint Set ADT)

0)引论 不相交集是解决等价问题的一种有效的数据结构,之所以称之为有效是因为,这个数据结构简单(几行代码,一个简单数组就可以搞定),快速(每个操作基本上可以在常数平均时间内搞定)。 首先我们要明白什么叫做等价关系,而在这个之前要先有一个关系(relation)的定义 Relation:定义在数据集S...
  • changyuanchn
  • changyuanchn
  • 2013-11-19 10:03
  • 6776
    个人资料
    • 访问:93154次
    • 积分:1448
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:69篇
    • 译文:0篇
    • 评论:3条
    最新评论