If-Koubou

Zašto Zip može komprimirati pojedinačne datoteke bolje od više datoteka s istim sadržajem?

Zašto Zip može komprimirati pojedinačne datoteke bolje od više datoteka s istim sadržajem? (Kako da)

Biti u stanju komprimirati datoteke tako da ih je lakše dijeliti i / ili prevoziti, može olakšati naše elektronske živote, ali ponekad možemo vidjeti čudne ili neočekivane rezultate veličine nakon što ih komprimiramo. Zašto je to? Danas SuperUser Q & A post ima odgovore na pitanja zbunjenog čitatelja.

Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.

Fotografija ljubaznošću Jean-Etienne Minh-Duy Poirrier (Flickr).

Pitanje

SuperUser čitač sixtyfootersdude želi znati zašto zip može komprimirati jednu datoteku bolje od više datoteka s istom vrstom sadržaja:

Pretpostavimo da imam 10.000 XML datoteka i želim ih poslati prijatelju. Prije slanja, htjela bih ih stisnuti.

Metoda 1: Nemoj ih komprimirati

Rezultati:

Metoda 2: zasebno svaku datoteku i poslati mu 10.000 zipnih XML datoteka

naredba:

Rezultati:

3. metoda: Izradite jednu zip datoteku koja sadrži sve 10.000 XML datoteka

naredba:

Rezultati:

Metoda 4: Spajanje datoteka u jednu datoteku i zip

naredba:

Rezultati:

Pitanja

  • Zašto dobivam takve dramatično bolje rezultate kad sam zipping samo jednom datotekom?
  • Očekivao sam drastično bolje rezultate pomoću metode 3 umjesto metode 2, ali ne. Zašto je ovo?
  • Je li ovo ponašanje specifično za zip? Ako sam pokušao koristiti Gzip, bi li dobio različite rezultate?

Dodatne informacije

Meta podataka

Jedan od navedenih odgovora sugerira da je razlika meta podataka sustava koji je pohranjen u zip datoteci. Ne vjerujem da to može biti slučaj. Da biste ga testirali, učinio sam sljedeće:

Rezultirajuća zip datoteka je 1,4 MB. To znači da još uvijek ima oko deset MB neobjašnjivog prostora.

Zašto zip može komprimirati pojedinačne datoteke bolje od više datoteka s istom vrstom sadržaja?

Odgovor

Alan Shutko i Aganju imaju odgovore za nas. Prvo, Alan Shutko:

Zip kompresija temelji se na ponavljajućim uzorcima u podacima za komprimiranje, a kompresija dobiva bolja duljina datoteke, budući da se može pronaći i koristiti više i duljih uzoraka.

Pojednostavljeno, ako komprimirate jednu datoteku, rječnik koji mapira (kratke) kodove na (dulje) obrasce nužno je sadržan u svaku rezultirajuću zip datoteku; ako zujate jednu dugu datoteku, rječnik se 'ponovno koristi' i raste čak i učinkovitiji u svim sadržajima.

Ako su vaše datoteke čak i malo slične (kao i uvijek tekst), ponovna upotreba rječnika može postati vrlo učinkovita i rezultat je mnogo manja ukupna zip datoteka.

Slijedi odgovor Aganju:

U zipu, svaka datoteka se komprimira zasebno. Suprotno je čvrsto stlačivanje, tj. datoteke su komprimirane zajedno. 7-zip i Rar upotrebljavaju solidnu kompresiju prema zadanim postavkama. Gzip i Bzip2 ne mogu komprimirati više datoteka, stoga se Tar upotrebljava prvo, imajući isti učinak kao i čvrsta kompresija.

Kako xml datoteke imaju sličnu strukturu (i vjerojatno sličan sadržaj), ako su datoteke komprimirane zajedno, kompresija će biti veća.

Na primjer, ako datoteka sadrži niz ""I kompresor je već pronašao taj niz u drugoj datoteci, zamijenit će ga malim pokazivačem na prethodno podudaranje. Ako kompresor ne koristi solidnu kompresiju, prva pojava niza u datoteci će biti zabilježena kao a doslovan, što je veće.

Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.