有效地计算n组的交集

时间:2015-02-24 15:41:10

标签: algorithm data-structures time-complexity set-intersection

我有nsetId个集合,每个集合可以包含一对(elementId, priority)的任意数量的元素。

我的算法应该输入两个setId,并在输出中给出一个包含第一个m元素的集合,这两个元素位于两个输入集的交集中并具有最高优先级(优先级的总和) )。

示例:

n=3, m=1

Set1: { (1, 1), (12, 2) }
Set2: { (1, 4), (23, 6), (33, 22) }
Set3: { (33, 1), (1, 16 }


Input: Set2, Set3
Output: { (33, 23) }

我的问题是:假设我拥有无限空间,我可以使用哪种最佳数据结构来优化性能?

当然,预先计算所有可能的交叉点并不是一个有效的答案。

修改

现实数字:

  • n,设置号码,~ 10^6
  • 集合的平均基数为~ 5*10^3

1 个答案:

答案 0 :(得分:3)

选择其中一个集并将其转换为hash map。迭代另一个集合,并为每个成员尝试在哈希映射中查找元素。如果找到,请将结果添加到heap;如果堆的大小增加到大于您希望保留的元素数,则丢弃堆中的最低项。