假设我有 4 个不同的值 A、B、C、D,并附加了一组标识符。
A={1,2,3,4,5}
B={8,9,4}
C={3,4,5}
D={12,8}
并且给定一组标识符 {1,30,3,4,5,12,8} 我希望它返回 C 和 D。即从一组 S 是超集的集合中检索所有集合。
是否有任何算法可以有效地执行此任务(最好具有低内存复杂性。使用外部设备存储数据不是一种选择)?一个简单的解决方案是为超集 S 中的每个成员检索包含该成员的集合列表(基本上是倒排索引),并为每个返回的集合检查他的所有成员是否都在超集中。不幸的是,由于平均而言,超集将包含每个集合的至少一个成员,因此这种方法会产生显着且不可接受的性能损失。
我正在尝试在 Java 中执行此操作。集合由整数组成,它们标识的值是一个对象。集合的集合不是静态的,并且在执行过程中必然会发生变化。不过,设定的数量会有一些限制。套装大小不受限制。但平均而言,它在 1 到 20 之间。