什么是不相交集合(Disjoint Sets) 是这样的一组set,任何元素最多只能在一个set中 至少支持查找Find和合并Union操作 实现方式(基于树) 每个set都是一棵树 每棵树都由树的根节点识别 合并操作只需要修改根节点的指针 合并的复杂度是O(1) 查找的复杂度是O(depth) ,树的深度 可以方便地通过指针来实现 struct item { char data; Item* parent; } 但是如果数据结构中没有指针,需要自己在外面再套一层结果,比较麻烦 还有另一种方法是…
目录 认识并查集 并查集解析 基本思想 如何查看a,b是否在一个集合? a,b合并,究竟是a的祖先合并在b的祖先上,还是b的祖先合并在a上? 其他路径压缩? 代码实现 结语 @(文章目录) 认识并查集 对于并查集(不相交集合),很多人会感到很陌生,没听过或者不是特别了解.实际上并查集是一种挺高效的数据结构.实现简单,只是所有元素统一遵从一个规律所以让办事情的效率高效起来. 对于定意义,百科上这么定义的: 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,…
集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的重复.以及科学计算,例如交集.并集.差分和对称差分.通俗点来说,集合是一个无序不重复元素的数据集,其基本功能是进行成员关系测试和消除重复元素. 目前有两种内置的集合类型:set 和 frozenset.set类型是可变的--可以使用add() 和 remove()等方法更改其内容.由于它是可变的,它没有hash值,因此它不能被当做字典的键值或另一集合的元素.frozenset…
不相交集合数据结构保持一组不相交的动态集合S={S1,S2,...,SK},每个集合通过一个代表来识别,代表即集合中的某个成员. 如果x表示一个对象,不相交集合支持以下操作: MAKE-SET(x):建立一个新的集合,其唯一成员为x.因为各集合是不想交的,故x没有在其它集合中出现. UNION(x,y):将包含x和包含y的集合合并为一个新的集合. FIND-SET(x):返回包含x的集合. 1.不相交集合的数组表示 在一个数组中保存每个元素所在集合的名称.这样Find操作就是简单的O(1)查找.…
在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancing Links)算法求解数独 在前文中可知,舞蹈链(Dancing Links)算法在求解精确覆盖问题时效率惊人. 那利用舞蹈链(Dancing Links)算法求解数独问题,实际上就是下面一个流程 1.把数独问题转换为精确覆盖问题 2.设计出数据矩阵 3.用舞蹈链(Dancing Links)算法…
什么是最小生成树(Minimum Spanning Tree) 每两个端点之间的边都有一个权重值,最小生成树是这些边的一个子集.这些边可以将所有端点连到一起,且总的权重最小 下图所示的例子,最小生成树是{cf, fa, ab} 3条边 Kruskal算法 用到上一篇中介绍的不相交集合(并查集) 首先,定义V是端点的集合,E是边的集合,A为要求的最小生成树集合 初始A为空集合,每个端点都作为单独的不相交集合 将所有边根据其权重进行排序 对每条边(v1, v2),如果其两个端点数据不同的不相交集,则…
支持向量机SVM算法实践 利用Python构建一个完整的SVM分类器,包含SVM分类器的训练和利用SVM分类器对未知数据的分类, 一.训练SVM模型 首先构建SVM模型相关的类 class SVM: def __init__(self, dataSet, labels, C, toler, kernel_option): self.train_x = dataSet # 训练特征 self.train_y = labels # 训练标签 self.C = C # 惩罚参数 self.toler…
最近写了一个多星期的并查集,一瞬间贴出这么多解题报告,我想关于并查集的应用先告一段落吧,先总结一下. 在网上看到一篇关于并查集比较好的教程(姑且允许我这么说吧),不转过来是在可惜.献给爱学习的你 文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 等价关系与等价类 从数学上看,等价类是一个对象(或成员)的集合,在此集合中的所有对象应满足等价关系.若用符号"≡"表示集合上的等价关系,那么对于该集合中的任意对象x,y, z,下列性质…
Disjoint Sets Disjoint Sets的意思是一堆集合們,它們相互之間都沒有交集.沒有交集是指:各個集合之間沒有擁有共同.相同的元素.中文稱作「分離集」. Disjoint Sets的性質相當特殊.資訊學家仔細觀察其特性後,精心設計出一套優雅美觀的資料結構,可以快速的做集合運算. Union.Find.Split 由於每個Disjoint Sets指的就是集合們都沒有交集,我們就不用考慮交集.差集等等的運算,因為結果很明顯.所以只需要考慮union.find.split這三個集合…
出处:http://www.cnblogs.com/grenet/p/3163550.html 在“跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题”一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancing Links)算法求解数独 在前文中可知,舞蹈链(Dancing Links)算法在求解精确覆盖问题时效率惊人. 那利用舞蹈链(Dancing Links)算法求解数独问题,实际上就是下面一个流程 1.…