我有一组N
项目,它们是整数集,假设它是有序的并调用它I[1..N]
。给定一个candidate
集合,我需要找到其中的子集I
与candidate
.
因此,例如,如果:
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不包含在任何项目中,1包含在项目1中,2包含在项目1和2中,2包含在项目2中,3包含在项目2中,4和5包含在项目3中。
这样,我可以定义valid_items(I, candidate) = union(items_containing[n] for n in candidate)
.
是否有任何更有效的数据结构(合理的大小)来缓存这个联合的结果?空间的明显例子2^N
是不可接受的,但N
或N*log(N)
将是。