Я работаю над библиотекой C ++ для управления масками очень больших значений (каждая 2 ^ 32 бита, около 0,5 ГБ). Каждая маска значений будет представлять возможные значения 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
Мой класс будет включать эти операторы: +, -, &, |, ^, ~, <<и >>
Очевидно, было бы очень хорошо, если бы я мог вычислить результат некоторых из этих операторов, не распаковывая маску значений. Я сомневаюсь, что любой алгоритм сжатия может сделать все это (вызов, кто-нибудь?), Но есть ли какие-либо существующие библиотеки или алгоритмы для чего-то вроде этого?
Задача ещё не решена.
Других решений пока нет …