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?
Wat is de grootste grootte die een gzip (zeg 10kb om een voorbeeld te geven) kan hebben om te decomprimeren?
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.
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.
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
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.