Я отсортировал последовательность данных целых чисел. Максимальная разница между 2 числами 3. Таким образом, данные выглядят, например, как это:Сжатие отсортированных данных с малой разницей
Data: 1 2 3 5 7 8 9 10 13 14
Differences: (start 1) 1 1 2 2 1 1 1 3 1
Есть ли лучший способ для хранения (компресса) этого типа последовательностей, чем сохранить значение разности? Потому что, если я использую методы на основе словаря, ему не удалось сжать из-за случайности чисел 1,2 и 3. Если я использую сжатие стиля «PAQ», результат будет лучше, но все же не совсем удовлетворительным. Хаффман и арифметический кодер хуже, чем словарные методы.
Есть ли способ с предсказанием?
Например, чтобы использовать регрессии для исходных данных и чем хранить различия (которые могут быть меньше или более последовательным)
Или использовать какой-то прогноз, основанный на гистограмме различий?
Или что-то совершенно другое .... или его вообще невозможно (что, на мой взгляд, реальный ответ :))
Вы можете сохранить каждое число как расстояние от предыдущего номера (1-3), но сделать это как 2-битное число. Затем вы можете упаковать 4 числа в каждый байт. Недостатком этого является то, что для определения любого заданного числа в последовательности вам нужно начинать с самого начала. Вы и сложите все расстояния. – Pete
Yeh .. Я уже упаковываю 4 номера в 1 байт. Мне было интересно, если есть лучшее решение этой «проблемы» –
Возможно, вы сможете использовать половину бит, который не используется, и получить немного больше места. Но если числовая последовательность действительно случайна, то вряд ли вы получите большую ценность от алгоритмов сжатия, поскольку они, как правило, основаны на идее какой-то повторяющейся последовательности, и случайным данным обычно этого не хватает. – Pete