Сжатие массива байтов - PullRequest
3 голосов
/ 05 июня 2010

Моя проблема: Я хочу сохранить массив байтов в сжатом файле и затем прочитать его с хорошей производительностью.

Итак, я создаю массив байтов, затем перехожу к алгоритму ZLIB и сохраняю его в файле. К моему удивлению, алгоритм не работает хорошо, вероятно, потому что массив является случайной выборкой. Используя этот подход, его будет легко читать. Просто скопируйте поток в память, распакуйте его и скопируйте в массив байтов.

Но мне нужно сжать файл. Должен ли я использовать алгоритм, например RLE, для сжатия байтового массива? Я думаю, что я могу сохранить байтовый массив как строку, а затем сжать ее. Но я думаю, что у меня будет плохая производительность при чтении данных.

Извините за мой плохой английский.

Спасибо

Ответы [ 3 ]

1 голос
/ 05 июня 2010

Если данные случайные, они будут иметь высокую энтропию . Не существует алгоритма, который может сжимать такие данные с большим успехом. То есть, поскольку он случайный, вам может повезти в конкретном случае, но обычно пытаться сжать его бесполезно.

1 голос
/ 05 июня 2010

Не ясно, имеете ли вы в виду «случайную выборку» в статистическом смысле (выборка реальных данных, выбранных случайным образом), или просто случайные данные. Первый должен хорошо сжаться.

Однако, действительно случайные данные не могут быть сжаты (хорошо). Фактически, сжимаемость является одной из мер случайности .

0 голосов
/ 26 февраля 2014

Вы уверены, что вам действительно нужно сжать случайные данные? Наилучшее сжатие может быть достигнуто, если вы знаете источник данных и некоторые другие спецификации, которые можно использовать для выбора и оптимизации алгоритмов сжатия. Во-первых, насколько велики ваши массивы? Если это значения символов, есть разница в частоте каждой буквы. Если этот массив отсортирован или имеет уникальные значения, это также можно использовать для оптимизации пространства. Так каков источник ваших данных?

...