исключения сжатия gzip? - PullRequest
       6

исключения сжатия gzip?

2 голосов
/ 31 августа 2010

Можно ли спроецировать, какой результат сжатия вы получите, используя gzip для произвольной строки?Какие факторы способствуют худшим и лучшим случаям?Я не уверен, как работает gzip, но, например, строка вроде:

"fffffff"

может хорошо сжиматься по сравнению с чем-то вроде:

"abcdefg"

с чего начать?

Спасибо

Ответы [ 2 ]

3 голосов
/ 31 августа 2010

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

с помощью демонстрации:

[chris@polaris ~]$ dd if=/dev/urandom of=random bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.296325 s, 3.5 MB/s
[chris@polaris ~]$ ll random
-rw-rw-r-- 1 chris chris 1048576 2010-08-30 16:12 random
[chris@polaris ~]$ gzip random
[chris@polaris ~]$ ll random.gz
-rw-rw-r-- 1 chris chris 1048761 2010-08-30 16:12 random.gz

[chris@polaris ~]$ dd if=/dev/zero of=ordered bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00476905 s, 220 MB/s
[chris@polaris ~]$ ll ordered
-rw-rw-r-- 1 chris chris 1048576 2010-08-30 16:12 ordered
[chris@polaris ~]$ gzip ordered
[chris@polaris ~]$ ll ordered.gz
-rw-rw-r-- 1 chris chris 1059 2010-08-30 16:12 ordered.gz

Моя чисто случайная выборка данных фактически увеличилась из-за издержек, в то время как мой файл, заполненный нулями, сжался до 0,1% от своего предыдущего размера.

1 голос
/ 31 августа 2010

Алгоритм, используемый gzip, называется DEFLATE .

Он сочетает в себе два популярных метода сжатия: удаление дублирующихся строк и уменьшение битов. Оба объяснены в статье.

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

Для этого также существуют измерения, например энтропия данных.

...