【发布时间】:2019-05-16 18:40:45
【问题描述】:
问题陈述如下:给定n个集合的列表,每个集合包含k个整数,找出不相交集合对的数量。假设集合的可能元素是正的,并且以 c > n 为界,并且假设 k
我正在尝试提出一种有效的算法来比 O(kn^2) 更快地解决这个问题,这是天真的解决方案的运行时间。
我能想到的最佳策略是遍历列表中的每个集合,并对集合中的元素进行散列处理,以便集合中的每个元素映射到包含它的集合的一组索引。然后,对于迭代中的当前集合,使用它的 c 个元素作为键,并考虑由哈希表作为值给出的 c 个索引集合的并集。这个结果集表示到目前为止遇到的与当前集不相交的集的数量,我们可以使用它来查找不相交集的数量。在整个迭代中对这个值求和会产生正确的答案。但是,由于联合操作是 O(n),因此该策略的效果并不比朴素解决方案好。
这个问题最有效的解决方案是什么?
【问题讨论】:
标签: algorithm set time-complexity disjoint-sets