【发布时间】:2011-02-05 00:56:45
【问题描述】:
我有一组N 项目,它们是整数集,我们假设它是有序的并称之为I[1..N]。给定一个candidate 集合,我需要找到与candidate 有非空交叉点的I 的子集。
所以,例如,如果:
I = [{1,2}, {2,3}, {4,5}]
我正在寻找定义valid_items(items, candidate),这样:
valid_items(I, {1}) == {1}
valid_items(I, {2}) == {1, 2}
valid_items(I, {3,4}) == {2, 3}
我正在尝试优化一个给定的集合I 和一个变量candidate 集合。目前我通过缓存items_containing[n] = {the sets which contain n} 来做到这一点。在上面的例子中,这将是:
items_containing = [{}, {1}, {1,2}, {2}, {3}, {3}]
即0不包含在item中,1包含在item 1中,2包含在item 1和2中,2包含在item 2中,3包含在item 2中,4和5包含在item中第 3 项。
这样,我可以定义valid_items(I, candidate) = union(items_containing[n] for n in candidate)。
有没有更有效的数据结构(合理的大小)来缓存这个联合的结果?空格2^N 的明显示例是不可接受的,但N 或N*log(N) 可以。
【问题讨论】:
标签: optimization data-structures set mathematical-optimization set-theory