2010-05-09 11:47:14 +0000 2010-05-09 11:47:14 +0000
53
53

Wat is de maximale compressieverhouding van gzip?

Wat is de grootste grootte die een gzip (zeg 10kb om een voorbeeld te geven) kan hebben om te decomprimeren?

Antwoorden (7)

95
95
95
2010-05-09 13:11:52 +0000

Update 2020-02-06: Zoals vermeld in de commentaren, heb ik het oorspronkelijke resultaat met gzip niet kunnen reproduceren. In de veronderstelling dat ik per ongeluk een ander compressieformaat heb gebruikt in die oorspronkelijke snelle test, heb ik het herhaald met gzip en de onderstaande cijfers dienovereenkomstig bijgewerkt. Dit nieuwe resultaat komt overeen met de theoretische maximale compressie zoals vermeld in andere antwoorden/commentaren.


Het hangt erg af van de gegevens die worden gecomprimeerd. Een snelle test met een 1Gb bestand vol nullen met een standaard versie van gzip (met standaard opties of met specificatie -9) geeft een gecomprimeerde grootte van ~1018Kb, dus uw 10Kb bestand zou kunnen uitgroeien tot ~10Mbytes.

Als de gegevens om te beginnen weinig redundantie hebben, bijvoorbeeld, het archief bevat afbeeldingsbestanden in een formaat dat van nature gecomprimeerd is (gif, jpg, png, …), dan voegt gzip mogelijk helemaal geen verdere compressie toe. Voor binaire bestanden zoals uitvoerbare programma’s kan je tot 2:1 compressie zien, voor platte tekst, HTML of andere markups is 3:1 of 4:1 of meer niet onwaarschijnlijk. In sommige gevallen zou je 10:1 kunnen zien, maar de ~1030:1 die je ziet bij een bestand gevuld met een enkel symbool is iets wat je niet zult zien buiten even kunstmatige omstandigheden.

Met gunzip -c file.gz | wc --bytes kunt u controleren hoeveel data er vrijkomt bij het uitpakken van een gzip-bestand, zonder de ongecomprimeerde inhoud ervan naar schijf te schrijven - dit zal het bestand uitpakken maar de resultaten niet opslaan, in plaats daarvan worden ze doorgegeven aan wc die het aantal bytes telt en ze dan weggooit. Als de gecomprimeerde inhoud een tar-bestand is dat veel kleine bestanden bevat, kan het zijn dat er merkbaar meer schijfruimte nodig is om het volledige archief uit te pakken, maar in de meeste omstandigheden zal de telling die teruggegeven wordt door gunzip uitvoer zo nauwkeurig zijn als u nodig hebt.

10
10
10
2010-05-09 12:04:29 +0000

Gewoonlijk krijg je niet meer dan 95% compressie (dus die 10kB gzipped data zou decomprimeren tot ~200kB), maar er zijn speciaal ontworpen bestanden die exponentieel uitbreiden. Zoek naar 42.zip, het decomprimeert tot enkele petabytes aan (betekenisloze) data.

8
8
8
2017-05-11 14:16:39 +0000

Woordelijk geciteerd uit https://stackoverflow.com/a/16794960/293815

De maximale compressieverhouding van het deflate formaat is 1032:1. Dit komt omdat de langste reeks die kan worden gecodeerd 258 bytes is. Voor elk van die reeksen zijn ten minste twee bits nodig (een bit voor de lengtecode en een bit voor de afstandscode), zodat 4*258 = 1032 niet-gecomprimeerde bytes kunnen worden gecodeerd per één gecomprimeerde byte.

Je kunt meer compressie krijgen door het resultaat van gzip te gzippen. Normaal gesproken verbetert dat de compressie niet, maar voor erg lange runs kan het wel.

Tussen haakjes, de LZ77 aanpak die deflate gebruikt is algemener dan run-length codering. In plaats van alleen een lengte, wordt een lengte/afstand paar gebruikt. Dit maakt het mogelijk een string van enige afstand terug te kopiëren, of een byte te repliceren zoals in run-length voor een afstand van één, of een triples van bytes te repliceren met een afstand van drie, enz.

6
6
6
2010-05-09 12:03:51 +0000

De compressieverhouding van elk compressiealgoritme zal een functie zijn van de gegevens die worden gecomprimeerd (naast de lengte van die gegevens).

Hier is een analyse op MaximumCompression , Kijk naar een van de voorbeelden zoals, Summary of the multiple file compression benchmark tests

File type : Multiple file types (46 in total) # of files to compress in this test : 510 Total File Size (bytes) : 316.355.757 Average File Size (bytes) : 620,305 Largest File (bytes) : 18,403,071 Smallest File (bytes) : 3,554
4
4
4
2010-05-09 12:44:19 +0000

Een enorm bestand met slechts één symbool zal zeer goed worden gecomprimeerd.

4
4
4
2013-04-07 13:12:41 +0000

10 MB aan nullen in het bestand, comprimeren met gzip -9 tot 10217. Dus maximale ratio lijkt ongeveer 1000x te zijn.

1
1
1
2016-10-17 02:32:42 +0000

Het antwoord op je vraag, hangt af van de input. Om je een idee te geven hoe compressie in zijn werk gaat, bekijk deze zes minuten durende video. https://www.youtube.com/watch?v=ZdooBTdW5bM

Wat je hieruit zou moeten opmaken is dat de compressie afhangt van de frequentie van elk karakter, er is dus geen generel max rate, het hangt af van de input, voor engelse tekst is het ongeveer 65 procent.