【发布时间】:2014-12-23 19:46:19
【问题描述】:
我正在寻找一种结构(“集合集”),它可以让我有效地检查它是否包含我的集合的超集。
示例: A = { 1, 2 } B = { 2, 3 } C = { 1, 3 } D = { 1, 2, 3 }
集合 S1 = { A, B } 和另一个 S2 = { D }
S1 contains A => true
S1 contains C => false
S2 contains A => true
解决方案的复杂度应尽可能低(不仅是渐近的)。
【问题讨论】:
-
你的套装有多大?你有几个?
-
集合通常包含少于 5-10 个字符串(或长字符串),并且集合最多应包含 ~100-1000 个集合,但在大多数情况下为 10-100 个集合。
-
集合本身或集合的集合可以改变(即可以插入/删除)还是它们都是静态的?
-
集合是不可变的,但集合的集合不是,基本上用作重复过滤器。
-
@Jiri 由于内部集既小又不可变,您是否考虑过仅枚举所有子集并将它们存储在哈希表中?空间为 O(n * 2^m),其中 n 是集合的数量,m 是每个集合的元素数量。插入/删除将是 O(2^m) 并且查询 O(1)