我们有N组,每组有N个整数。
我们取每对集合,找到它们的交集,S
现在,我们有兴趣找到具有最大基数的交集S的基数。
示例
例如,设N为4,我们有4个元素各4个:
A = {1,2,5,6},B = {2,5,7,6},C = {3,4,2,6},D = {1,4,7,8}
现在我们采用这些集合和最大基数= {2,5,6}的交集的成对交集
所以,我们返回3.
蛮力解可以用Θ(N 3 )时间完成。我们可以用其他方法更有效地做到吗?
答案 0 :(得分:2)
如果出现以下情况,可以减少运行时间:
有一些α> 0 使得(对于固定的α和增加 n ),有两组至少具有α重叠分数。
许多对是不相交的或几乎不相交的(后来更准确)。
您愿意使用高概率蒙特卡罗算法(误差概率随着 n 而减少)。
假设您首先将每个集合转换为哈希表。这需要(预期)Θ(n 2 )时间。现在为每对集合(即 n 2 循环),从第一组中选择√n随机元素,并计算数字第二组中的命中数(预期 O(√n)时间)。
通过multiplicative Chernoff bound和union bound的组合,您只能保留点击次数至少为 1/2α√n的对。< / p>
因此,很有可能,您可以将 n 2 对缩小到某些βn 2 对,时间只有 O(n 2.5 )。从这里继续蛮力。这可能有用与否,具体取决于β如何作为 n 的函数增长。