我刚刚研究了不相交集数据结构,并且我知道它也被称为“union-find数据结构”,union和find是这个数据结构的两个主要操作。我们可以在不相交集合上执行联合,类似的,我们可以执行查找操作;我想知道除了union和find以外,我们可以在不相交的集合上执行哪些其他操作。可以对不相交集合执行哪些操作?
5
A
回答
3
独立集合结构也被称为“合并 - 查找结构”。因此无论如何union
,find
和MakeSet
操作应该得到支持。其他行动不是这个结构的全部,它们是否得到支持取决于实施和目标。有时候您需要专门选择特定的实施方式,以满足您项目对额外操作的需求。
除此之外,如果我们支持的其他基本的设置相关的操作这将是很好。让我们列举一下:
- 十字路口两套。由于集合是不相交的,除非这两个集合重合,否则它总是空的。
- 工会的两套 - 支持开箱即用。
- 从集合获取元素 - 的支持,这是最有可能的
find
结果。 - 从集合删除元素 - 取决于执行。当集合被实现为森林时,它很棘手并且需要较慢的附加操作。当集合被实现为链表时,它很简单。
- 枚举设定,即迭代在该给定组中的每个元件。这个依赖于实现:链接列表很简单,对于像森林一样的实现,它需要额外的结构来支持。
2
使用vanilla union-find数据结构,您无法枚举实际集合,因此许多集合操作都不可用。这是因为在香草版本中,只有指向一个方向的指针---在下图中,每条对角线对应于向上的箭头,并且根(顶部线)是集合的根对象:
o [set1] o [Set2]
/\ \
o o o
/
o
所以没有办法找到所有的对象,比如set 1;例如,您不能从根节点追踪到它们的路径。您也可以向下指针,但这会显着地使数据结构复杂化,因为对象在数据结构中可以有任意数量的父项。
所以它实际上多为以下操作:
- 答到:做我的对象A和B属于同一组或没有?
- 合并设置S1和S2,以便在集合中的所有对象现在都被认为属于同一组
为了详细说明这一点,工会组数据结构有它支持的操作非常低的时间复杂度;合并集合和回答相同集合查询采取分摊的恒定时间(O(1));由于这种非常复杂的时间,你不能支持所有的设置操作。例如,一个标准集表示是由一个[二进制]搜索树,其中大多数操作至少具有O(log n)复杂性。
0
联合发现不相交集合结构的关键不在于执行基本集合操作,因为您的问题和其他受访者似乎暗示。相反,它是关于某些算法需要的结构的高效实现。特别是,找到连接组件和最小生成树将在联合查找不相交集之上构建其最有效的实现。
相关问题
- 1. 对项目集合执行操作
- 2. 你可以使用C++中的bool和int操作符执行哪些操作?
- 3. Scala并行集合上的哪些操作是并行化的?
- 4. 在动作中执行操作以进行收集而不创建新集合
- 5. 集合被修改,枚举操作可能不会执行
- 6. 用于在两个不相交的集合上执行并集操作的数据结构
- 7. 在Sun VM中可以在Dalvik VM(Android的VM)上执行哪些操作?
- 8. 使用LINQ执行这些操作的方法有哪些?
- 9. 集合操作中对象的行为
- 10. 哪个python库可以执行复杂的`wget`操作?
- 11. Jmeter中可能对线程故障执行某些操作吗?
- 12. 您可以使用NH3执行复杂的聚合操作吗?
- 13. C#集合已被修改;枚举操作可能不会执行
- 14. 实体框架集合已被修改;枚举操作可能不会执行
- 15. MVC Action Filters集合已被修改;枚举操作可能不会执行
- 16. WPF CollectionView错误:'集合被修改;枚举操作可能不会执行。'
- 17. C#集合已被修改;枚举操作可能不会执行
- 18. Ninject投掷“集合被修改;枚举操作可能不会执行”错误
- 19. 从集合中删除一个项(MembershipUserCollection) - 枚举操作可能不会执行
- 20. DbContext.Add错误,集合被修改;枚举操作可能不会执行
- 21. 以通用方式对Scala集合进行操作
- 22. 提交按钮以执行两个不同的操作
- 23. 哪些操作可以并行完成而不需要抓取GIL?
- 24. 作为集合执行
- 25. 需要查找基本操作集合/相交/对称差异JAVA
- 26. 对相同的选项菜单项执行不同的操作
- 27. 这些不同的Android操作系统可以安装在哪些设备上?
- 28. 在隐藏的工作表或工作簿上可以执行哪些Excel VBA操作?
- 29. nhibernate SaveOrUpdate - 轻松确定将执行哪些操作
- 30. 哪些数据库操作必须在后台执行?