ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第8章 不相交集类

2019-03-22 09:49:05  阅读:195  来源: 互联网

标签:return int 集类 相交 算法 root1 public root2


等价关系是满足下列三个性质的关系R

1. (自反性)对于所有的a属于S,aRa。

2. (对称性)aRb 当且仅当 bRa。

3. (传递性)若aRb且bRc则aRc。

 

不相交集合    union(不是最好的方法)

 1 public class DisjSets
 2 {
 3     public DisjSets(int numElements)
 4     {
 5         s = new int[numElements];
 6         for (int i = 0; i < numElements; i++)
 7             s[i] = 1;
 8     }
 9     public void union(int root1, int root2)
10     {
11         s[root2] = root1;
12     }
13     public int find(int x)
14     {
15         if (s[x] < 0)
16             return -1;
17         else 
18             return find(s[x]);
19     }
20     
21     private int[] s;
22 }

 

按高度(秩)求并的程序

 1     public void union1(int root1, int root2)
 2     {
 3         if (s[root2] < s[root1])
 4             s[root1] = root2;
 5         else
 6         {
 7             if (s[root1] == s[root2])
 8                 s[root1]--;
 9             s[root2] = s[root1]; 
10         }
11     }

 

 

用路径压缩对不相交集进行find的程序

1     public int find1(int x)
2     {
3         if (s[x] < 0)
4             return x;
5         else 
6             return s[x] = find(s[x]);
7     }

 

部分路径压缩

算法A是标准的按秩求和路径压缩操作的序列。我们设计算法B,使其与算法A进行完全一样的路径压缩操作序列。在算法B中,我们在做任何查找之前就把所有求并做完。于是算法A中的每个查找操作被算法B中一次部分查找替换。一次部分查找操作可确定要查的项以及路径压缩一路向上所处理到的那个节点。该节点就是在算法A中做对应的查找时会得到的那个根节点。

 

标签:return,int,集类,相交,算法,root1,public,root2
来源: https://www.cnblogs.com/tjj-love-world/p/10576327.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有