【发布时间】:2018-01-25 16:36:41
【问题描述】:
我正在处理一个涉及大量数据的问题。为了减少工作量(因为当前的计算需要大约两周的计算时间,我想大大减少它)我想出了一个算法,如果它能够避免某种类型的重复,它会更快。 (当前算法避免存储这些信息,因为它太大、未缩减,无法放入内存。)
我有一组集合,如果已经有一个集合 B(它是 A 的子集),我不想插入集合 A。目前,这些集合由整数表示,其中单个二进制数字表示存在或不存在的特定元素。在该解释中,如果已经存在集合/整数 B 使得 (~A) & B 为 0,则不应插入集合/整数 A,其中 ~ 是按位否定,& 是按位与。
例如,如果我的收藏有以下集合
[ {a,b}, {b,c}, {b,d,e} ]
我要求添加 {b,c,e} 它不应该被添加(因为 {b,c} 已经存在)并且与 {a,b} 类似(因为 {a,b} 存在)但是应该添加 {a,e}。
数字等价物将以
开头[ `0b11`, `0b110`, `0b11010` ]
其中0b10110自(~0b10110) & 0b110 == 0后未添加,0b11自(~0b11) ^ 0b11 == 0后未添加,但可以添加0b10001。
理想情况下结构会随着新集合的添加而自我修剪,因此如果添加了{c},则所有包含c 的现有集合都将被删除。但如果它不以这种方式更新也是可以接受的,只要我能经常以某种不太昂贵的方式将其标准化为那种形式。
【问题讨论】:
标签: data-structures language-agnostic set bit-manipulation subset