В зависимости от разреженности и диапазона вашего набора данных, вы можете хранить свои данные в виде списка дельт вместо цифр. Например, он используется для сжатия звука и может быть как с потерями, так и без потерь, в зависимости от ваших потребностей.
Например, если у вас есть Int
числа, но вы знаете, что они вряд ли когда-нибудь будут больше, чем (подписано) Byte
, вы можете сделать что-то вроде этого списка байтов:
-1 // Use -1 to imply the next number cannot be computed as a byte delta
0, 0, 4, 0 // 1024 encoded as bytes
1 // 1025 as a delta
-5 // 1020 as a delta
-1 // Next number can't be computed as a byte delta
0, 0, -1, -1 // 65535 encoded as bytes -- -1 doesn't have special meaning here
10 // 65545 as a delta
Так что вам не нужно обрабатывать биты, используя эту конкретную кодировку. Но на самом деле вы не получите хороших ответов без четкого указания конкретной проблемы, характеристик данных и т. Д.
Перечитывая ваш вопрос, кажется, вы не отбрасываете методы сжатия, которые превращают данные в биты. Если нет, то я предлагаю Хаффмана - прогнозирующего, если нужно - или что-то из семьи Лемпель-Зив.
И, к сожалению, у Scala нет библиотеки для обработки двоичных данных. Хотя в paulp, вероятно, есть что-то подобное в самом компиляторе.