Я хочу хранить миллиарды (10^9) чисел с плавающей запятой двойной точности в памяти и экономить место. Эти значения сгруппированы в тысячи упорядоченных наборов (они являются временными рядами), и в пределах набора я знаю, что разница между значениями обычно невелика (по сравнению с их абсолютным значением). Кроме того, чем ближе друг к другу, тем выше вероятность того, что разница будет относительно небольшой.Как сжать большое количество подобных двойников?
Идеальная подгонка будет дельта-кодировкой, которая сохраняет только разницу каждого значения для своего предшественника. Тем не менее, я хочу случайный доступ к подмножествам данных, поэтому я не могу зависеть от того, чтобы пройти полный набор в последовательности. Поэтому я использую deltas для базовой ширины набора, которая дает deltas, который, как я ожидаю, будет находиться в пределах от 10 до 50 процентов от абсолютной величины (большую часть времени).
Я рассмотрел следующие подходы:
- разрыва, тем меньше значения на большом, получая значение между 0 и 1, которые могут быть сохранены в виде целого числа некоторой фиксированной точности плюс один бит для запоминания, которая число было разделено на. Это довольно просто и дает удовлетворительное сжатие, но не метод без потерь и, следовательно, только вторичный выбор.
- XOR IEEE 754 двоичные кодированные представления обоих значений и сохраняют длину длинных отрезков нулей в начале экспоненты и мантиссы плюс остальные биты, которые были разными. Здесь я совершенно не уверен, как судить об компрессии, хотя я думаю, что в большинстве случаев это должно быть хорошо.
Существуют ли стандартные способы для этого? Какие могут быть проблемы с моими подходами выше? Какие другие решения вы видели или использовали сами?
Спасибо, что указали мне на Z-баллы как обобщение того, что я пытался сделать с моим первым подходом. К сожалению, я не могу делать никаких предположений о том, что представляет собой шум во входящих данных, поскольку фактические, физические, источники сильно различаются по точности, а требования к точности данных зависят от приложения, использующего мое программное обеспечение. –