我正在寻找一个结构("一组集"),这将允许我有效地检查它是否包含我的集的超集。
实施例: 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
对此的解决方案应该具有尽可能低的复杂度(不仅是渐近)。
答案 0 :(得分:-1)
使用字典在位图中可能的不同元素和位置之间进行转换。然后将每个集存储为位图。
将一组集合联合起来是一个将位图组合在一起的问题。
检查一组是否是一组集的子集是检查位图的结果是否是较小的集位图。
这些操作应该很快。如果你真的雄心勃勃,你可以从http://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units开始,并弄清楚如何将计算转移到GPU。
如果你有较大的套装,并且有时候得到错误的答案,那么你应该查找Bloom Filters。这可以让您获得大多数正确答案,并且位图显着缩短。