【发布时间】:2015-02-24 15:41:10
【问题描述】:
我有由setId 标识的n 集合,每个集合都可以包含任意数量的元素,它们是一对(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。
【问题讨论】:
-
给我们一个现实数量的集合和集合元素。举个玩具例子,这是毫无意义的。您所说的“优先级总和”是什么意思?没有意义。你有一组元组。
-
按 elementId 排序,然后同时遍历两个集合,并在输入匹配时添加到输出集合(如果你明白我的意思)
-
@Skizz:这是我的做法,不过没有考虑
priority,还挺复杂的c=|Set1|+|Set2|, O(c)+O(c * log(c)) -
elementId和priority有什么限制?
-
@Paddy3118:
elementId没有上限,优先级甚至可以限制为 3 个值:{ 1, 2, 3 }
标签: algorithm data-structures time-complexity set-intersection