我刚刚研究了不相交集数据结构,我知道它也被称为“联合查找数据结构”,union和find是这个数据结构的两个主要操作。我们可以在不相交集上执行并集,类似地我们可以执行查找操作;我想知道除了union和find之外我们可以在不相交集上执行的其他操作。
答案 0 :(得分:3)
不相交集结构也称为“联合查找结构”。因此,无论如何都应支持union
,find
和MakeSet
操作。其他操作不是这个结构的全部内容,它们是否受支持取决于实施和您的目标。有时您需要专门选择特定的实现以满足项目对其他操作的需求。
除此之外,如果我们支持其他与基本相关的基本操作,那将会很好。让我们列举一下:
find
的结果。答案 1 :(得分:2)
使用vanilla union-find数据结构,您无法枚举实际集,因此很多set操作都不可用。这是因为在vanilla版本中你只有一个方向的指针---在下图中,每条对角线对应一个向上的箭头,而根(顶行)是这些集合的根对象:
o [set1] o [Set2]
/ \ \
o o o
/
o
所以没有办法找到所有对象,例如,设置1;例如,您无法从根节点跟踪它们的路径。您也可以向下指向,但这会使数据结构变得非常复杂,因为对象在数据结构中可以有任意数量的父项。
所以它主要用于以下操作:
为了详细说明,union-set数据结构对于它支持的操作具有非常低的时间复杂度;合并集和回答同一集查询都采用摊销的常数时间(O(1));由于这种非常复杂的时间,你不能支持所有的设置操作。例如,标准集表示由[二进制]搜索树构成,其中大多数操作至少具有O(log n)复杂度。
答案 2 :(得分:0)
联合 - 发现不相交集合结构的重点不在于执行基本集合操作,因为您的问题和其他受访者似乎在暗示。相反,它是关于某些算法所需的结构的高效实现。特别是,找到连接组件和最小生成树可以在union-find不相交集之上构建最有效的实现。