我正在开发一个 C++ 库来管理非常大的值掩码(每个 2^32 位,大约 0.5 GB)。每个值掩码将代表 32 位 int 的可能值。例如,00101000
将表示值 2 和 4。每个值掩码将包含大部分重复数据(例如:01010000010100000101000001010000
)。
我正在寻找某种压缩算法,它允许对两个值掩码的值进行一些简单的按位运算。澄清:我不想对值掩码本身进行按位运算,而是对值进行。请参见下面的示例:
ValMask mask_a(0b00101000); // Represents 2 and 4
ValMask mask_b(0b10110000); // Represents 0, 2 and 3
// Sum all of the values of mask_a and mask_b
ValMask mask_c = mask_a + mask_b;
// mask_c is 0b00101111, which represents 2, 4, 5, 6, 7
我的课程将包括这些运算符:+、-、&、|、^、~、<< 和 >>
显然,如果我可以在不解压缩值掩码的情况下计算其中一些运算符的结果,那就太好了。我怀疑任何压缩算法都可以做到所有这些(挑战,任何人?),但是是否有任何现有的库或算法可以解决这样的问题?