disjoint-sets相关内容

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

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

在 Python 中实现不相交集系统

到目前为止,我所掌握的内容主要基于 Cormen 等人的“算法简介"第 571 页. 我在 python 中有一个 Node 类,它代表一个集合: 类节点:def __init__(self, parent, rank = 0):self.parent = 父母self.rank = 排名 此实现将使用节点的 List 作为森林(我愿意接受更好的方法来存储集合). Initiali ..
发布时间:2022-01-20 16:55:48 Python

如何编写最大集打包算法?

假设我们有一个有限集合 S 和一个 S 的子集列表.然后,集合打包问题询问列表中的一些 k 子集是否成对不相交.该问题的优化版本,最大集打包,要求列表中成对不相交集的最大数量. http://en.wikipedia.org/wiki/Set_packing 所以,让 S = {1,2,3,4,5,6,7,8,9,10} 和`Sa = {1,2,3,4}`和`Sb = {4,5,6} ..
发布时间:2022-01-17 18:18:42 其他开发

理解 boost::disjoint_sets

我需要使用 boost::disjoint_sets,但文档是我不清楚.有人能解释一下每个模板参数的含义吗,或者给出一个创建 disjoint_sets 的小示例代码? 根据要求,我使用 disjoint_sets 来实现 Tarjan 的离线最不常见祖先算法, 即 - 值类型应为 vertex_descriptor. 解决方案 我能从文档中了解到什么: Disjoint 需要 ..
发布时间:2021-12-24 15:20:29 C/C++开发

如何解决这个 Union-Find 不相交集问题?

我被这个问题困住了:https://onlinejudge.org/index.php?option=onlinejudge&Itemid=8&page=show_problem&problem=1099 目前,我有集合,集合中的每个元素都是朋友.但是,我不知道如何处理敌人.有人能指出我正确的方向吗? 解决方案 这个问题需要对正常的不相交集合数据结构进行修改. 您可以确定两个人 ..
发布时间:2021-10-26 18:51:20 其他开发

用最小割将图分成相同大小的不相交集

是否有任何算法或代码将图节点划分为满足以下条件的两个或多个不相交的集合:首先,只允许移除边缘.其次,边缘被加权,那些将被删除的必须具有最小权重(最小切割算法).第三,期望的不相交集合的大小尽可能长. 解决方案 看起来您正在尝试解决最小二分问题,其中给定图 G,您希望将 V[G] 划分为两个不相交的子集A 和 B 的大小相等,使得 A 和 B 之间的边的权重之和最小.不幸的是,最小-二分问题 ..
发布时间:2021-10-26 18:49:05 其他开发

Python 替代实现中的不相交集森林

我正在用 Python 实现一个不相交的集合系统,但我遇到了障碍.我正在为系统使用树实现,并为系统实现 Find()、Merge() 和 Create() 函数. 我正在实施等级系统和路径压缩以提高效率. 问题在于这些函数必须将不相交的集合作为参数,这使得遍历变得困难. 类节点(对象):def __init__(self, value):self.parent = 自己self.va ..
发布时间:2021-07-23 19:15:30 Python

如何从“不相交集"中获取所有元素的列表.

在我的问题中,我有一堆元素(类元素).假设我有1000个元素.这些元素最初是未关联的,这意味着它们在自己的集合中. 稍后,我需要使用并集操作根据我的程序流来合并其中的一些集合.我计划使用Boost库的disjoint_set( http://www.boost.org/doc/libs/1_57_0/libs/disjoint_sets/disjoint_sets.html ) 我的问 ..
发布时间:2021-04-15 20:55:49 C/C++开发

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

我正试图在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 其他开发

使用联合查找(也称为不交集)检测图是否为二分图

我在Spoj上遇到了一个问题,基本上可以简化为检测图是否为二部图。我正在尝试仅使用dfs给图形着色,但是它太慢了。有人对此进行了评论 没有bfs,dfs和两方图。简单的联合查找集将使其(确实具有速度)。 提示#1: 偶数长度的循环不会影响两个节点之间路径长度的2(哇,一个单词中有这么多i)的除数。 提示2: (扰流器) 令dist [i]为从i到parent [i]的路径的距离。使 ..
发布时间:2020-06-06 20:08:57 其他开发

在集合列表中查找不相交集合的对数

问题陈述如下:给定n个集合的列表,每个集合包含k个整数,找到不交集的对数。假设集合中可能的元素为正,且在上面由c> n界定,并且假设k 我试图提出一种比O(kn ^ 2)更快的算法来解决这个问题,这是天真的解决方案的运行时间。 我能想到的最佳策略是遍历列表中的每个集合,并对集合的元素进行哈希处理,以使集合中的每个元素映射为一个包含它的集合的索引集合。然后,对于迭代中的当前集合,将其c个 ..
发布时间:2020-06-03 21:05:11 其他开发

算法:使用联合查找计算岛数

假设您需要计算矩阵上的孤岛数量 {1、1、0、0、0} , {0、1、0、0、1}, {1、0、0、1、1}, {0、0、0、0、0}, {1、0、1、0、1} 我们可以简单地使用DFS或BFS当输入矩阵的大小适合内存时。 但是,如果输入矩阵很大而又无法适合内存时该怎么办? 我可以将输入矩阵分块/分割成不同的小文件,然后分别读取它们。 ..
发布时间:2020-06-03 20:15:25 其他开发

在Python中实现不相交集合系统

到目前为止,我所拥有的大部分是基于Cormen等人的“算法导论”的第571页。 我在Python中有一个Node类,代表set: $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ def $ _ $ __ _ _ .parent = parent self.rank = rank 这个实现将使用一个列表的节点作为森林(我打开更好的方式来存储集)。 初 ..
发布时间:2017-11-09 21:04:05 Python

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

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

联合/查找算法,不依赖于不相交森林数据结构的联合

以下是维基百科上不相交的设置森林的联合/查找算法的细目: Barebone disjoint-set forest ...( O(n)) ...按照排序...(现在改为 O(log(n) ) ...使用路径压缩(现在改为 O(a(n))有效地 O(1)) 通过排列实现联合需要每个节点保持一个等级字段进行比较,我的问题是联合排名值得这个额外的空间?如果我通过排名跳过联盟,只是 ..

在C ++中实现不相交集(联合查找)

我试图实现不相交集用于Kruskal的算法,但我无法理解如何做,特别是如何管理树的森林。在阅读了不相交集的维基百科描述后,阅读算法简介(Cormen等人)中的描述后,我得出以下结论: class DisjointSet { public: class Node { public: int data; int rank; Node * parent; No ..
发布时间:2016-10-22 17:33:59 C/C++开发

不相交设置为链接列表

任何人都可以指示我将不相交集合的一些信息作为链接列表吗?我不能找到任何代码。 语言C ++ 解决方案 我想你可以在维基百科。当然,这些信息是用伪代码写的,但不难翻译。 ..
发布时间:2016-10-14 21:26:08 C/C++开发