【发布时间】:2008-11-23 20:27:03
【问题描述】:
给定一个集合列表:
- S_1:[1、2、3、4]
- S_2 : [ 3, 4, 5, 6, 7 ]i>
- S_3:[8,9,10,11]
- S_4:[1、8、12、13]
- S_5:[6、7、14、15、16、17]
合并至少共享 2 个元素的所有集合的最有效方法是什么?我想这类似于连接组件问题。所以结果是:
- [ 1, 2, 3, 4, 5, 6, 7, 14, 15, 16, 17] (S_1 UNION S_2 UNION S_5)
- [8,9,10,11]
- [ 1, 8, 12, 13 ](S_4 与 S_1 共享 1,与 S_3 共享 8,但未合并,因为它们仅共享一个元素)
朴素的实现是 O(N^2),其中 N 是集合的数量,这对我们来说是行不通的。这需要对数百万组有效。
【问题讨论】:
-
集合中的值范围是多少?
-
有整数吗?他们可以在一组内重复吗?
-
集合中的值为整数,每个集合内不重复
-
澄清一下:在您的示例中,第一次合并是否应该包括 S_3,因为它与 S_5 共享四个元素?
-
如果我们有 A:[1,2,3]、B:[1,2,4] 和 C:[3,4,5]。我们是不是先把A和B合并到[1,2,3,4]再和C合并(因为A+B和C有2个共同点,而A和B都没有和C个共同点2?
标签: algorithm set graph-theory