gzip의 최대 압축 비율은 얼마입니까?


답변:


90

압축되는 데이터에 따라 다릅니다. 0으로 가득 찬 1Gb 파일을 사용한 빠른 테스트는 ~ 120Kb의 압축 크기를 제공하므로 10Kb 파일은 ~ 85MB로 확장 될 수 있습니다.

예를 들어, 데이터에 중복성이 부족하여 아카이브에 기본적으로 압축 된 형식 (gif, jpg, png, ...)의 이미지 파일이 포함 된 경우 gzip이 더 이상 압축되지 않을 수 있습니다. 프로그램 실행 파일과 같은 이진 파일의 경우 일반 텍스트, HTML 또는 기타 마크 업 3 : 1 또는 4 : 1 이상에 대해 최대 2 : 1 압축을 볼 수 있습니다. 경우에 따라 10 : 1이 표시 될 수 있지만 단일 기호로 채워진 파일로 표시되는 ~ 8700 : 1은 유사하게 인공적인 환경 외부에서는 볼 수없는 것입니다.

압축되지 않은 내용을 실제로 디스크에 쓰지 않고 gzip 파일의 압축을 풀면 얼마나 많은 데이터가 있는지 확인할 수 있습니다. gunzip -c file.gz | wc --bytes이렇게하면 파일이 압축 해제되지만 결과는 저장되지 않고 전달 wc되어 바이트 수를 계산하는 바이트 수를 계산합니다. 그런 다음 버립니다. 압축 된 컨텐츠가 많은 작은 파일을 포함하는 tar 파일 인 경우 전체 아카이브의 압축을 풀기 위해 현저히 더 많은 디스크 공간이 필요하다는 것을 알 수 있지만 대부분의 경우 파이핑 gunzip출력 에서 리턴 된 수는 wc필요한만큼 정확합니다.


HTML이 10x로 확장되는 것을 보았습니다 (물론 x3 및 x4가 가장 일반적입니다!) .... 아마도 8 배로 폭발 한 데이터에 대한 많은 중복 데이터가있을 것입니다. 내 생각에 해당 페이지가 PHP 정보 페이지라고 생각합니다.
좀비

의 출력에서 ​​볼 수 있듯이 반복적 인 마크 업은 phpinfo()매우 잘 압축됩니다. 이 출력의 기술 정보에는 자연 언어의 평균 청크보다 더 많은 직접 반복이 포함되며 알파벳 분포가 덜 매끄 럽기 때문에 허프만 스테이지가 더 나은 결과를 얻는 데 도움이 될 수 있습니다.
David Spillett

이 답변은 의도적으로 악의적 인 압축 데이터를 설명하지 않습니다 . 하나는 약 10KB 정도의 악성 zip 파일을 만들어 4GB 이상으로 확장 할 수 있습니다.
David Schwartz가

그 규모의 Zip 폭탄은 중첩 된 아카이브에 의존하기 때문에 사람이 파일을 풀면 오래 전에 이상한 것을 알 수 있습니다. 그러나 자동 스캐너 (메일 서비스 등)에 대한 효과적인 DoS 공격으로 사용될 수 있습니다.
David Spillett

1
@DavidSpillett : 중첩 된 우편 폭탄이 페타 바이트 범위의 크기로 확장됩니다. 그것은 내가 말하는 것이 아닙니다. 일반적인 지퍼 폭탄의 단일 레이어 만보십시오.
David Schwartz

10

일반적으로 압축률은 95 %를 넘지 않지만 (10kB zip으로 압축 된 데이터는 ~ 200kB로 압축 해제되지만) 기하 급수적으로 확장되는 특수하게 조작 된 파일이 있습니다. 를 42.zip찾으면 몇 페타 바이트 (무의미한) 데이터로 압축 해제됩니다.


4
Wikipedia에 따르면 42.zip에는 "16 개의 세트로 5 개의 중첩 된 zip 파일 레이어가 포함되어 있습니다" 라고 말하면 압축 해제에 대한 올바른 예가 아닙니다 (재귀 압축 해제에만 해당).
Tgr

5
실제로 42.zip은 바이러스 스캐너와 같이 zip 파일을 자동으로 재귀 적으로 검색하는 도구에 특히 위험합니다.
thomasrutter

4
그건 gzip이 아니라 zip입니다
BeniBela

8

https://stackoverflow.com/a/16794960/293815 에서 인용 된 그대로

수축 형식의 최대 압축 비율은 1032 : 1입니다. 인코딩 할 수있는 가장 긴 실행이 258 바이트이기 때문입니다. 이러한 각각의 실행에 대해 적어도 2 개의 비트가 필요하며 (길이 코드의 경우 1 비트, 거리 코드의 경우 1 비트), 압축되지 않은 바이트 1 개는 압축 된 바이트 당 4 * 258 = 1032입니다.

gzip의 결과를 gzipping하여 더 많은 압축을 얻을 수 있습니다. 일반적으로 압축률은 향상되지 않지만 장시간 실행하면 압축이 향상됩니다.

그건 그렇고, 수축에 사용되는 LZ77 접근 방식은 실행 길이 인코딩보다 일반적입니다. 길이 대신 거리 / 거리 쌍이 사용됩니다. 이를 통해 어느 정도 거리에서 문자열을 복사하거나 1의 거리만큼 런 길이와 같이 바이트를 복제하거나 3의 거리로 3 배의 바이트를 복제 할 수 있습니다.


6

압축 알고리즘의 압축 비율은 압축되는 데이터의 기능입니다 (해당 데이터 길이 제외).

여기에서 분석이다 MaximumCompression ,
같은 샘플 중 하나에서 봐는,

다중 파일 압축 벤치 마크 테스트 요약

파일 형식 : 여러 파일 형식 (총 46 개)  
이 테스트에서 압축 할 파일 수 : 510  
총 파일 크기 (바이트) : 316.355.757 
평균 파일 크기 (바이트) : 620,305
가장 큰 파일 (바이트) : 18,403,071
최소 파일 (바이트) : 3,554

4

하나의 심볼 만 포함 된 거대한 파일은 압축률이 매우 높습니다.


4

파일에 10MB의 0이 있으면 gzip -9 ~ 10217로 압축하십시오. 따라서 최대 비율은 약 1000x입니다.


1

귀하의 질문에 대한 답변은 입력에 따라 다릅니다. 압축 방법에 대한 정보를 제공하기 위해이 6 분 분량의 비디오를 시청하십시오.

https://www.youtube.com/watch?v=ZdooBTdW5bM

압축 속도는 각 문자의 빈도에 따라 다르므로 일반적인 최대 속도가 없으며 입력에 따라 다릅니다. 영어 텍스트의 경우 약 65 %입니다.


1
슈퍼 유저에 오신 것을 환영합니다! 링크 된 페이지가 변경되면 답변이 유효하지 않을 수 있으므로 참조 링크에서 답변의 필수 부분을 인용하십시오.
DavidPostill

"각 문자의 빈도"보다는 "각 문자열의 빈도"라고 말하는 것이 더 정확합니다.
JoelFan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.