JAVA算法2――连通性问题之快速合并算法
2015-03-20 14:50
405 查看
我们考虑的下一个算法是与快速查找算法互补的快速合并算法。它基于相同的数据结构――以对象名作为索引的数组――但由于它对元素值的解释与快速查找算法不同,因此导致了更复杂的抽象结构。在一个无循环的结构中,每个对象都与同一集合中的另一个对象有连接。要判断两个对象是否在同一个集合中,我们分别沿着每一个对象的连线走,知道到达某一个有到自身连接的对象。两个对象在同一个集合中,当且仅当他们的终点是同一个对象。如果两个对象不在同一个集合中,则分别循着他们的连线往前走,终点将不是同一个对象。那么,要实现合并操作,我们只需要把一个集合连到另一个集合,这就是快速合并的由来。
快速合并和快速查找算法的这个区别当然代表着一种进步,但是快速合并算法还有一个缺点是:我们不能保证它在任何情况下都比快速查找算法快很多,因为输入数据可能会使查找操作变慢。
本文出自 “飞鱼技术” 博客,请务必保留此出处http://flyingfish.blog.51cto.com/9580339/1622553
public class QuickFind { public static void main(String[] args) { int N=Integer.parseInt(args[0]); int id[]=new int ; for(int i=0;i<N;i++) id[i]=i; for(In.init();!In.empty();) { int i,j,p=In.getInt(),q=In.get(); for(i=p;i!=id[i];i=id[i]); for(j=q;j!=id[j];j=id[j]) if(i==j) { System.out.println("p与q是连通的!"); continue; } id[i]=j; } } }上述程序是解决连通性问题的快速合并算法中合并和查找操作的实现。由于快速合并算法不比对每一个输入对都扫描整个数组,因此它似乎比快速查找算法要运行的快一些。目前,因为它取出了快速查找算法的主要缺点,因此我们可以把快速合并算法看成是快速查找算法的改进。
快速合并和快速查找算法的这个区别当然代表着一种进步,但是快速合并算法还有一个缺点是:我们不能保证它在任何情况下都比快速查找算法快很多,因为输入数据可能会使查找操作变慢。
本文出自 “飞鱼技术” 博客,请务必保留此出处http://flyingfish.blog.51cto.com/9580339/1622553
相关文章推荐
- JAVA算法3――连通性问题之快速合并算法的加权版本
- JAVA算法4――连通性问题之路径压缩的加权快速合并算法
- JAVA算法1――连通性问题之快速查找算法
- 连通性问题快速查找算法
- 连通性问题快速并集算法
- 【算法学习笔记】37.区间合并问题 SJTU OJ 1262 Milking Cow
- 算法分析学习笔记(一) - 动态连通性问题的并查集算法(上)
- 算法: 找子集合并按权值和排序 (货郎问题辅助算法)
- 算法: 找子集合并按权值和排序 (货郎问题辅助算法)
- 连通性问题(算法)
- 普林斯顿公开课 算法1-10:并查集-优化的快速合并方法
- 算法快速回顾——八皇后问题
- 石子合并;圈型;动态规划;重点在于处理圈型问题;代码内有算法解释;
- 插入排序,合并排序,堆排序,快速排序,计数排序的实现(算法导论)
- 连通性问题改进算法
- 快速排序的两种改进方法算法及topK问题求解
- 数据结构研究之借连通性问题看算法设计
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 连通问题-快速合并法
- Java算法--穷尽算法 鸡兔同笼问题