union-find相关内容

路径压缩和按等级合并如何相辅相成?

我一直在读有关工会发现问题的文章。两个主要的改进是路径压缩和按等级合并。据我所知,按等级合并是用来确定如何组合不相交的树的。如果我们有两棵不相交的树T1和T2,那么我们将排名较小的树的根附加到排名较高的树上。如果我们不使用路径压缩,那么排名就是树的深度。这是有意义的,因为我们不想增加Out树的深度,因为它直接影响Find和UNION。 我的问题是当我们也使用路径压缩时。我一直读到这两个优化是 ..
发布时间:2022-06-23 18:26:37 其他开发

我们可以使用 Union-Find 数据结构检测有向图中的循环吗?

我知道可以使用 DFS 和 BFS 检测直接图中的循环.我想知道我们是否可以使用 Union-Find 检测有向图中的循环? 如果是,那么如何?和 如果我们不能,那为什么? 解决方案 不,我们不能使用 union-find 来检测有向图中的循环.这是因为无法使用不相交集(执行联合查找的数据结构)来表示有向图. 当我们说'a union b'时,我们无法确定边的方向 a ..

找到连接的节点集群的算法

我正在处理 3d 数据,并提供了一个相互连接的顶点列表.数据格式如下: faces = [(0, 1, 2),(1, 3, 2),(3, 5, 6),(5, 7, 4),(10, 11, 12),(11, 12, 13),(12, 13, 14)] 数组中的每一项都由一个三元组组成,其中每个位置的数字表示相互连接的顶点的索引.我在图片中可视化了这个例子,以便更好地理解顶点是如何连接的. ..
发布时间:2021-10-26 18:39:24 其他开发

使用联合查找在无向图中查找已连接组件的数量

我已经盯着这个算法有一段时间了,但是找不到我错过的东西. 逻辑: 初始化所有隔离的组件 union frm,连接到每个边缘中的组件,并减小#组件(如果尚未连接). 问题:运行此特定测试用例时,为什么会得到此 -48 ? def countComponents(self,n,edges):“":type n:整数:type edges:列表[列表[int]]:rtype:整数 ..
发布时间:2021-04-02 20:52:02 其他开发

我们可以使用Union-Find数据结构检测有向图中的周期吗?

我知道可以使用DFS和BFS在直接图中检测周期。我想知道是否可以使用 Union-Find 检测有向图中的循环? 如果是, ,那又如何?和 如果不能,为什么? 解决方案 否,我们不能使用联合查找来检测有向图中的循环。这是因为不能使用不交集(执行联合查找的数据结构)表示有向图。 当我们说“联合b”时我们无法确定边缘的方向 是去b了吗? (或) b是要去a吗? 但是 ..

在线性时间内打印出不相交的数据结构中的节点

我正试图在Cormen等人的“算法简介"中进行此练习,该练习与Disjoin Set数据结构有关: 假设我们希望添加操作PRINT-SET(x),该操作已给出 节点x,并以任何顺序打印x的集合的所有成员.展示如何 我们可以向不交集中的每个节点仅添加一个属性 森林,以便PRINT-SET(x)花费个时间线性的成员数 x的设置以及其他运算的渐近运行时间 不变.假设我们可以在O(1)中打印集合的每 ..
发布时间:2020-08-22 19:55:31 其他开发

路径压缩和按等级合并如何相互补充?

我一直在阅读有关工会发现的问题.两项主要改进是路径压缩和按等级合并.据我了解,等级合并用于确定如何合并不相交的树.如果我们有两个不相交的树T1和T2,那么我们将等级较小的树的根附加到等级较高的树.如果我们不使用路径压缩,那么等级就是一棵树的深度.这是有道理的,因为我们不想增加输出树的深度,因为它直接影响查找和并集. 我的问题是当我们也使用路径压缩时.我一直在阅读这两种优化是相辅相成的,但是我 ..
发布时间:2020-08-22 19:16:45 其他开发

使用Python联合查找实现

这就是我想做的:我有一个包含几个等价关系的列表: l = [[1, 2], [2, 3], [4, 5], [6, 7], [1, 7]] 我想合并共享一个元素的集合.这是一个示例实现: def union(lis): lis = [set(e) for e in lis] res = [] while True: for i in range(len(lis) ..
发布时间:2020-05-02 05:11:05 Python

我需要采取明确的行动来促进持久性数据结构的共享吗?

我来自一个强制性的背景,正在尝试实现一个简单的不相交集(“union-find”)数据结构,以便在Haskell中创建和修改(持久化)数据结构来实践。目标是简单实现,但我也关心效率,我的问题与此有关。 首先,我创建了一个不相交的林实现通过等级联合,并通过定义“点”的数据类型开始: data Point = Point { _value :: Int ,_parent :: Ma ..
发布时间:2017-04-03 15:13:59 其他开发

联合查找:高效地检索集合中的所有成员

我正在使用 union-find 算法。在我的程序的第一部分,该算法计算一个大集合 E 的分区。 之后,我想检索集合 S 的所有成员,其中包含给定的节点 x 。 到目前为止,天真地,我正在测试 E 的所有元素的成员资格到 S 。但是昨天我正在阅读“算法介绍”(CLRS第3版,前言21.3-4),在练习中,我发现: 假设我们希望添加一个操作 PRINT-SET(x),这是 给定一 ..
发布时间:2017-04-03 14:00:25 其他开发

避免使用纯代码中的IORefs

我注意到, Data.UnionFind 使用IO monad通过IORefs提供指针。我想象,每个人都很开心地调用 unsafePerformIO ,在本地使用纯代码,因为数据结构是如此的很好理解,但是.. 这种数据结构是否有规范的清洁方法?也许IO周围的包装,通过禁止大多数IO操作,使不可避免的 unsafePerformIO 更不安全的“寻找”? 解决方案 这种数据结构是否 ..
发布时间:2017-04-03 13:25:52 其他开发

联合查找数据结构

对于许多问题,我看到解决方案是使用union-find数据结构。我试图阅读它,并考虑如何实现(使用C ++)。我目前的理解是,它只不过是一套集合。所以要找到属于哪一个元素,我们需要 n * log n 操作。当我们必须执行工会时,我们必须找到需要合并的两个集合,并对它们执行一个 set_union 。这对我来说看起来并不高效。我对这个数据结构的理解是正确的还是我缺少某些东西? 解决方案 这 ..
发布时间:2017-04-03 12:15:21 C/C++开发

联合查找数据结构

对于许多问题,我看到建议的解决方案是使用union-find数据结构。我试图读一下它,并想想如何实现(使用C ++)。我目前的理解是,它只是一组列表。因此,要找到一个元素属于哪个集合,我们需要 n * log n 操作。当我们必须执行联合时,我们必须找到需要合并的两个集合,并对它们执行 set_union 。这看起来对我来说效率不高。是我对这个数据结构的理解正确还是我缺少了一些东西? 解决方 ..
发布时间:2016-10-19 20:21:28 C/C++开发

并集算法下使用矢量++

我只是在这个问题上使用的std ::矢量,我可以保证每个向量没有重复(但没有任何顺序在每个向量) 。我如何结合使我有引导? 例如: 如果我有以下载体... 1 1 3 2 五 5 4 2 4 4 2 工会后,我应该只有两个向量左: 1 2 3 4 5 再次声明,我只能用向量,的std ::设为是不允许的。 解决方案 您可以使用std :: set_union算法。 ..
发布时间:2015-11-30 15:33:51 C/C++开发