Gzip'in maksimum sıkıştırma oranı nedir?


Yanıtlar:


90

Sıkıştırılan verilere çok bağlıdır. Sıfırlarla dolu bir 1Gb dosya içeren hızlı bir test ~ 120Kb sıkıştırılmış bir boyut verir, böylece 10Kb dosyanız potansiyel olarak ~ 85Mbayt'a genişleyebilir.

Örneğin, başlangıçta verilerin başlaması artık düşükse, arşiv, yerel olarak sıkıştırılmış bir biçimde (gif, jpg, png, ...) görüntü dosyalarını içeriyorsa, gzip daha fazla sıkıştırma ekleyemez. Program çalıştırılabilir dosyaları gibi ikili dosyalar için, 2: 1 sıkıştırmaya kadar görebilirsiniz, düz metin, HTML veya diğer işaretlemeler için 3: 1 veya 4: 1 veya daha fazlası olası değildir. Bazı durumlarda 10: 1 görebilirsiniz, ancak tek bir sembolle dolu bir dosyayla görülen ~ 8700: 1, benzer şekilde yapay koşulların dışında göremeyeceğiniz bir şeydir.

Sıkıştırılmamış içeriğini diske yazmadan ne kadar verinin bir gzip dosyasını açmaktan kaynaklanabileceğini kontrol edebilirsiniz, gunzip -c file.gz | wc --bytesbu - ile bu dosyayı açacaktır, ancak sonuçları depolamaya başlamaz, bunun yerine geçen wcbayt sayısını sayar. sonra onları atın. Sıkıştırılmış içerik, çok sayıda küçük dosya içeren bir tar dosyasıysa, tüm arşivi açmak için farkedilir derecede daha fazla disk alanı gerektiğini fark edebilirsiniz, ancak çoğu durumda, boru gunzipçıkışından geri gönderilen sayım, istediğiniz wckadar doğru olacaktır.


HTML'in 10x'e genişlediğini gördüm (tabii ki x3 ve x4 en yaygın olanıydı!) .... patlayanlar için belki fazladan fazla veri var + 8x. Bence bu soruyu yapan sayfa bir php bilgi sayfasıydı.
Zombiler

Çıktısında görüldüğü gibi tekrarlayan işaretleme phpinfo()çok iyi sıkıştırır. Bu çıktıdaki teknik bilgi, ortalama doğal dil öbekinden daha doğrudan tekrarlama içeriyor ve alfabe dağılımı muhtemelen Huffman sahnesinin daha iyi sonuçlar almasına yardımcı olacak şekilde daha az düzgün.
David Spillett

Bu cevap kasıtlı olarak kötü amaçlı sıkıştırılmış verileri hesaba katmaz . Birisi 10 KB civarında 4GB’ın biraz üstüne çıkabilen zararlı bir zip dosyası oluşturabilir.
David Schwartz

O ölçekte zip bombalar iç içe geçmiş arşivlere dayanıyor, bu yüzden dosyayı açarken bir insan çok önce garip bir şey farkedecekti. Bununla birlikte, otomatik tarayıcılara (posta hizmetlerinde vb.) Karşı etkili bir DoS saldırısı olarak kullanılabilirler.
David Spillett

1
@DavidSpillett: İç içe zip bombaları petabayt aralığında boyutlara genişler. Bahsettiğim bu değil. Sadece tipik bir zip bombasının tek bir katmanına bile bakın.
David Schwartz

10

Genellikle,% 95'ten fazla sıkıştırma elde edemezsiniz (böylece 10kB gzipli veriler ~ 200kB'ye açılır), ancak katlanarak genişleyen özel hazırlanmış dosyalar vardır. Bakın 42.zip, birkaç petabayt (anlamsız) verinin kodunu açar.


4
Wikipedia , 42.zip'in "16'lık setler halinde beş katman iç içe zip dosyası içerdiğini" söyledi, bu nedenle dekompresyon için geçerli bir örnek değil (sadece özyinelemeli dekompresyon için).
Tgr,

5
Aslında, 42.zip, özellikle virüs tarayıcılarını tekrarlayan şekilde zip dosyalarını otomatik olarak tarayan araçlar için bir tehlikedir.
thomasrutter

4
Bu zip değil, gzip değil
BeniBela

8

Https://stackoverflow.com/a/16794960/293815 adresinden verbatim alındı.

Söndürme formatının maksimum sıkıştırma oranı 1032: 1'dir. Bunun nedeni, kodlanabilecek en uzun çalışmanın 258 bayttır. Her bir çalışma için en az iki bit gereklidir (uzunluk kodu için bir bit ve mesafe kodu için bir bit), bu nedenle sıkıştırılmış bayt başına 4 * 258 = 1032 sıkıştırılmamış bayt kodlanabilir.

Gzip sonucunu gzipleyerek daha fazla sıkıştırma elde edebilirsiniz. Normalde bu sıkıştırmayı iyileştirmez, ancak çok uzun süreler için yapabilir.

Bu arada, deflate tarafından kullanılan LZ77 yaklaşımı, çalışma uzunluğu kodlamasından daha geneldir. Sadece bir uzunluk yerine, bir uzunluk / mesafe çifti kullanılır. Bu, bir dizginin belirli bir mesafeden kopyalanmasına veya bir uzunluğun bir mesafe boyunca çalışma uzunluğunda olduğu gibi bir baytın kopyalanmasına veya üçlü, vs.


6

Herhangi bir sıkıştırma algoritmasının sıkıştırma oranı, sıkıştırılmakta olan verilerin bir fonksiyonu olacaktır (bu verilerin uzunluğu dışında).

İşte bir analizidir MaximumCompression ,
gibi örneklerin birinde Look,

Çoklu dosya sıkıştırma testi testlerinin özeti

Dosya tipi: Birden fazla dosya tipi (toplamda 46)  
Bu testte sıkıştırılacak dosya sayısı: 510  
Toplam Dosya Boyutu (bayt): 316.355.757 
Ortalama Dosya Boyutu (bayt): 620.305
En Büyük Dosya (bayt): 18.403.071
En Küçük Dosya (bayt): 3,554

4

Sadece bir sembol içeren devasa bir dosya çok iyi sıkıştırılır.


4

Dosyada 10 MB'lık sıfır, gzip -9 ile 10217 arasında sıkıştırın. Böylece maksimum oran 1000x gibi görünüyor.


1

Sorunuzun cevabı, girdilere bağlıdır. Sıkıştırmanın nasıl yapıldığına dair bir fikir vermek için bu altı dakikalık videoları izleyin.

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

Bundan almanız gereken şey, sıkıştırma oranının her karakterin sıklığına bağlı olmasıdır, bu nedenle genel maksimum oran yoktur, girişe bağlıdır, ingilizce metin için yaklaşık yüzde 65'tir.


1
Süper Kullanıcıya Hoşgeldiniz! Bağlantılı sayfalar değişirse cevap geçersiz hale gelebileceğinden, lütfen cevabın temel kısımlarını referans bağlantılardan alıntılayın.
DavidPostill

"Her karakterin frekansı" yerine "her dizgenin sıklığı" demek daha doğru olur
JoelFan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.