问题陈述如下:给定n个集合的列表,每个集合包含k个整数,找到不交集的对数。假设集合中可能的元素为正,且在上方被c> n限制,并假设k << n。
我正在尝试提出一种比O(kn ^ 2)更快的有效算法来解决此问题,这是天真的解决方案的运行时间。
我能想到的最好的策略是遍历列表中的每个集合,并对集合的元素进行哈希处理,以使集合中的每个元素映射到包含它的集合的索引集合。然后,对于迭代中的当前集合,将其c个元素用作键,并考虑由哈希表作为值给出的c个索引集的并集。这个结果索引集表示到目前为止遇到的与当前集不脱节的集数,我们可以使用它来查找不相交集的数。在整个迭代过程中求和该值可得出正确答案。但是,由于联合运算为O(n),因此该策略并不比单纯的解决方案更好。
最有效的解决方案是什么?
答案 0 :(得分:0)
作为k << n,您可以通过以下方法降低复杂度:
现在比较需要n *(n-1)个操作,这些操作是: