Data structures 子集缩减增长表的数据结构

Data structures 子集缩减增长表的数据结构,data-structures,language-agnostic,set,bit-manipulation,subset,Data Structures,Language Agnostic,Set,Bit Manipulation,Subset,我正在研究一个涉及大量数据的问题。为了减少工作量,因为当前的计算需要大约两周的计算时间,我想大大减少这一点,我提出了一种算法,如果能够避免某种类型的重复,它会更快。当前的算法避免存储这些信息,因为这些信息太大、太少,无法存储在内存中 我有一个集合,如果集合B是a的子集,我不想插入集合a。目前集合由整数表示,其中单个二进制数字表示存在或不存在的特定元素。在这种解释中,如果已经存在一个集合/整数B,使得~A&B为0,其中~为位求反,&为位和,则不应插入集合/整数A 例如,如果我的集合具有以下集合 [

我正在研究一个涉及大量数据的问题。为了减少工作量,因为当前的计算需要大约两周的计算时间,我想大大减少这一点,我提出了一种算法,如果能够避免某种类型的重复,它会更快。当前的算法避免存储这些信息,因为这些信息太大、太少,无法存储在内存中

我有一个集合,如果集合B是a的子集,我不想插入集合a。目前集合由整数表示,其中单个二进制数字表示存在或不存在的特定元素。在这种解释中,如果已经存在一个集合/整数B,使得~A&B为0,其中~为位求反,&为位和,则不应插入集合/整数A

例如,如果我的集合具有以下集合

[ {a,b}, {b,c}, {b,d,e} ]
我要求加上{b,c,e}它不应该加上,因为{b,c}已经在那里了,同样的{a,b}也在那里,但是{a,e}应该加上

数字等价物将以

[ `0b11`, `0b110`, `0b11010` ]
其中由于~0b10110&0b110==0而未添加0b10110,由于~0b11^0b11==0而未添加0b11,但可以添加0b10001


理想情况下,当添加新的集合时,结构会修剪自身,因此,如果添加了{c},则包含c的所有现有集合都将被删除。但如果它不以那种方式更新是可以接受的,只要我能经常以某种不太昂贵的方式将它规范化为那种形式。

这是一个众所周知的问题,称为寻找极值集;不幸的是,没有什么比测试一个新插入的集合与所有现有集合的明显方法更快的了,但是存在良好的启发式改进。以下是最近一篇讨论这个问题的论文:

相关算法的开源实现: