Pokud často stahujete software nebo přenášíte velké dokumenty, pravděpodobně jste narazili na soubory .zip. Je to jedna z těch digitálních vymožeností, která funguje tak dobře, že málokdy přemýšlíme o tom, jak to funguje. Základní myšlenka je jednoduchá: vzít velký soubor, zmenšit jeho velikost a přenést jej rychleji přes internet. Nebo jen ušetříte místo na pevném disku.
Je zde ale malý paradox. Jak můžete smazat některá data a později je magicky obnovit, aniž byste ztratili byť jen jediný bit?
Není to magie. Toto je správa redundance. Poté, co probereme základy toho, jak komprimovat soubor, se ponoříme do mechaniky toho, co se vlastně děje uvnitř archivu.
Komprese souborů: Rychlý průvodce
Komprese je založena na algoritmech, které snižují velikost souboru. Tím se šetří místo na disku. To také zrychluje přenos dat přes pomalé komunikační kanály. Vytváření souboru zip je součástí většiny moderních operačních systémů. Základní úkoly nevyžadují speciální nástroje.
Zde je jednoduchý postup.
1. Vyberte cílové soubory
Začněte tím, že určíte, co chcete komprimovat. Komprese poskytuje nejlepší výsledky pro velké soubory. Video soubory a nezpracované obrázky jsou ideálními kandidáty, protože zabírají značnou šířku pásma a úložný prostor. Malé textové soubory se často komprimují špatně, protože postrádají opakující se vzory potřebné k efektivnímu zmenšení jejich velikosti.
2. Používejte vestavěné nástroje
Pravděpodobně již máte potřebný software.
V systému Windows je proces velmi jednoduchý. Klepněte pravým tlačítkem myši na vybrané soubory. Přejděte do nabídky „Odeslat“. Vyberte komprimovanou složku (zazipovanou). O zbytek se postará Windows.
Uživatelé počítačů Mac mají podobnou zkratku. Klepněte pravým tlačítkem myši (nebo Ctrl+klikněte) na soubory. Vyberte možnost Komprimovat. Systém automaticky vytvoří zip archiv.
Pokud váš operační systém tuto funkci nepodporuje nebo požadujete pokročilé funkce, budete potřebovat software třetí strany. Nástroje jako 7-Zip nebo WinRAR nabízejí jemnější kontrolu nad úrovněmi komprese. Ale pro každodenní použití jsou vestavěné nástroje dostačující.
3. Vytvořte archiv
Jakmile příkaz spustíte, program zahájí svou práci. Skenuje soubory. Použije vybraný algoritmus. Vytvoří nový soubor zip ve stejném adresáři jako originály.
Rychlost tohoto procesu závisí na dvou faktorech: velikosti souboru a výkonu procesoru. Několik velkých video souborů lze komprimovat během několika sekund. Složka naplněná malými textovými soubory může trvat déle kvůli režii, i když výsledné zmenšení velikosti nemusí být významné.
4. Práce s výsledkem
Nyní máte jeden kontejner. Můžete to přejmenovat. Můžete jej přesunout na flash disk. Můžete jej poslat e-mailem. Příjemce musí obsah načíst, aby jej mohl použít. Tím se proces obrátí.
Buďte si vědomi kompromisů. Pro dokumenty, kód a text je komprese prakticky bezeztrátová. Dostanete zpět přesně to, co jste vložili. U obrázků a videí je situace jiná. Některé kompresní metody snižují kvalitu za účelem dosažení menší velikosti. Tomu se říká ztrátová komprese. Komprese textu je obvykle bezeztrátová.
Jak vlastně komprese souborů funguje
Počítačové soubory se notoricky opakují. Obsahují stále stejné informace. Kompresní programy prosperují z této redundance.
Místo třísetkrát zapsání slova „the“ zapíše kompresní algoritmus „the“ jednou. Poté vytvoří ukazatel odkazu. Pokaždé, když narazí na „the“, odkazuje na první instanci. To dramaticky snižuje celkový počet bitů a bajtů.
Abychom to pochopili, podívejme se na jazyk.
Vezměme si inaugurační projev Johna F. Kennedyho z roku 1961. Slavná věta:
“Neptejte se, co může vaše země udělat pro vás – ptejte se, co můžete udělat pro svou zemi.”
Pojďme počítat jednotky. Citát se skládá ze 17 slov. Obsahuje 61 písmen. K dispozici je 16 míst. Jedna pomlčka. Jeden bod. Pokud každému znaku, mezeře nebo interpunkčnímu znaménku přiřadíme jednu paměťovou jednotku, bude celková velikost souboru 79 jednotek.
Nyní najdeme redundanci. Pro zjednodušení ignorujeme velká a malá písmena.
- “zeptejte se” se objeví dvakrát.
- „co“ se objeví dvakrát.
- „vaše“ se objeví dvakrát.
- „země“ se objeví dvakrát.
- „can“ se objeví dvakrát.
- „do“ se objeví dvakrát.
- „pro“ se objeví dvakrát.
- „vy“ se objeví dvakrát.
Asi polovina fráze je nadbytečná. Devět unikátních slov – zeptat se, ne, co, vaše, země, můžete, udělat, pro, vy – obsahuje téměř všechny potřebné informace. K rekonstrukci druhé poloviny algoritmus jednoduše odkazuje na slova v první polovině. Vyplňuje mezery a interpunkci pomocí jednoduchých pravidel.
To je podstata bezeztrátové komprese. Nevymaže informace. Odstraňuje opakování.
Dále se blíže podíváme na algoritmy, které tyto vzory hledají.
Skryté náklady na kompresi slovníku
Většina kompresních nástrojů používá varianty algoritmu adaptivního slovníku LZ. Je pojmenován po tvůrcích Lempela a Ziva a „slovníková“ část je mechanismus pro katalogizaci opakovaných dat. Systém organizace těchto záznamů není složitý. Může to být jednoduchý očíslovaný seznam.
Vezměte si Kennedyho slavnou linii. Kompresní program vyhledá v textu duplicitní slova a přiřadí jim indexy. Poté slova nahradí jejich přiřazenými čísly.
Pokud slovník vypadá takto:
- zeptat se
- co
- vaše
- země
- může
- pro
- vy
Fráze „Neptejte se, co může vaše země udělat pro vás; ptejte se, co můžete udělat pro svou zemi“ je převedena do kódu. Stává se jí:
1 ne 2 3 4 5 6 7 8 — 1 2 8 5 6 7 3 4
Přijímající počítač používá stejný slovník a číselný vzor k rekonstrukci původního textu. Přesně tak funguje unboxing. Některé komprimované soubory obsahují vestavěný dekompresor. Po stažení automaticky obnoví původní soubor.
Ale kolik místa to ve skutečnosti ušetří?
Číselný řetězec je kratší než celá citace. Ale je tu nuance. Je třeba uložit samotný slovník spolu s komprimovanými daty.
V reálném světě je výpočet požadavků na soubory chaotický. Pro tuto analýzu předpokládejme, že každý znak a mezera se rovná jedné jednotce paměti. Celá fráze zabere 79 jednotek. Komprimovaná věta používá 37 jednotek. Slovník také zabírá 37 jednotek.
Celková velikost souboru je 74 jednotek. Snížení je minimální.
To je jen jedna věta. Pokud by měl algoritmus zpracovat zbytek řeči, zjistil by, že se tato slova opakují mnohem častěji. Účinnost se zvyšuje se zvyšujícím se počtem opakování. Jak uvidíme, systém také přepisuje svůj vlastní slovník, aby dále optimalizoval organizaci.
Za pouhou slovní shodou okolností
Předchozí kroky spoléhaly na hledání úplných, opakujících se slov. Text jsme považovali za posloupnost diskrétních jednotek. Kompresní algoritmus se nestará o slova. Vzory jsou důležité.
Cíl je jednoduchý: zmenšit velikost souboru.
K tomu software hledá redundanci. Neptá se: “Je to slovo?” Ptá se: “Viděl jsem už tuto sekvenci?” A je to nemilosrdné. Pokud se vzor vyskytuje pouze jednou, je odstraněn. Pokud se kratší vzor vyskytuje častěji než delší, může se delší vzor rozdělit na kousky.
Toto je „adaptivní“ jádro algoritmů založených na LZ. Slovník se vyvíjí. On se mění. Optimalizuje se v reálném čase.
Jak funguje výběr vzoru
Vezměme si slavnou frázi Johna Kennedyho.
“Neptej se, co může tvoje země udělat pro tebe, neptej se, co ty můžeš udělat pro svou zemi.”
Člověk vidí slova. Kompresor vidí symboly.
První opakující se sekvence může být něco malého. “t” následované mezerou. Objevuje se ve slovech „ne“ a „co“. Program to zaznamená. Zapisuje. Pak jde dál.
Proč? Protože v tomto krátkém fragmentu se “t” neopakuje dostatečně často, aby ospravedlnilo náklady na uložení vlastního identifikátoru ve slovníku. Je přepsán nebo ignorován.
Dále se ve slovech „vaše“ a „země“ objeví „ou“. Zdravý? Možná. V celé knize je „ou“ zlatý důl. Zde? Algoritmus najde něco lepšího.
„vaše“ a „země“ se společně zobrazí jako „vaše země“. Opakováno dvakrát. To je silnější signál než „ou“. Položka slovníku pro „ou“ bude zahozena. „vaše země“ nastupuje na jeho místo.
Ale počkej.
Podívejte se na “může udělat za”. Následuje „vaše“ a „vy“. Sekvence „může udělat pro vás“ se opakuje.
Co je účinnější?
“vaše země” = 13 znaků (včetně mezery).
„může pro vás udělat“ = 15 znaků.
Algoritmus preferuje delší shodu, pokud u každé instance ušetří více bitů. Ale „může udělat pro vás“ zahrnuje „vy“, zatímco „vaše země“ zahrnuje „vaše“.
Pokud program upřednostňuje maximální nahrazení znaků, může „vaši zemi“ rozdělit na kousky. Opustí „r země“ jako příponu a vytvoří základní položku pro „můžete udělat pro vás“. To umožňuje kompresoru odkazovat na hlavní část fráze jediným kódem, zatímco zpracuje nepatrnou variaci („vaše“ vs. „vy“) pomocí sekundárních odkazů.
Toto dynamické přepisování činí LZ adaptivní. Slovník není statický. Je to živý záznam toho, co se právě stalo v datovém toku.
Kompresní poměr
Pomocí našich odvozených vzorů:
- zeptat se__
-co__ - vy
- r__country
- cando__for__te
Původní věta se stává řadou ukazatelů:
1 ne__ 2 3 4 5 __ — __ 1 2 3 5 4
Využití paměti se dramaticky mění.
Zdrojový text: 79 jednotek.
Stlačená data: 18 jednotek.
Režie slovníku: 41 jednotek.
Celkem: 59 jednotek.
Ušetřili jsme 20 jednotek. To je přibližně 25% snížení. Hodně na několik řádků řeči. A nemusí to být nutně nejefektivnější možný výsledek. Pravděpodobně byste mohli najít těsnější rozložení. Jde ale o to, že najít správné vzory je důležitější než najít jakékoliv vzory.
Proč se text komprimuje lépe než grafika
Proč se tedy některé soubory zmenšují o 50 % nebo více, zatímco jiné se téměř nemění?
Redundance.
Přirozené jazyky jsou vysoce nadbytečné. Písmena jsou seskupena určitým způsobem. “Th”, “ing”, “tion”. Slova se neustále opakují. Textové soubory jsou plné těchto předvídatelných struktur. Kompresorům se zde daří.
Programový kód je podobný. Omezená sada klíčových slov a příkazů se donekonečna opakuje. ,jestli‘, ,zatímco‘, ,návrat‘. Vzory jsou tvrdé. Komprese funguje dobře.
Grafika? Zvuk?
Vlastně ne.
Obrázek nebo soubor MP3 obsahuje jedinečná data. Každý pixel má určitou hodnotu. Každý zvukový vzorek je jedinečný. Opakujících se sekvencí je málo. Entropie je vysoká. Algoritmus nemůže najít dostatek překrývajících se vzorů k vytvoření užitečného slovníku.
To je důvod, proč bezeztrátová komprese nefunguje pro mediální soubory. Jsou zapotřebí jiné techniky. Více o tom později.
Velikost souboru a výběr algoritmu
Zlepšuje se komprese s rostoucí velikostí souborů?
Obecně ano.
Kdybychom celý Kennedyho projev zhustili, úspory by byly větší. Proč? Protože stejné vzory se opakují častěji. Slovníková hesla se používají tisíckrát. Režie slovníku se v porovnání s úsporami stává zanedbatelnou.
Malé soubory? Režie slovníku žere do zisků.
Velkou roli hraje také výběr algoritmu.
Ne všechny možnosti LZ jsou stejné. Některé jsou nakonfigurovány pro text. Některé jsou pro data. Někteří používají hierarchické slovníky – slovníky ve slovnících – k identifikaci složitých, vnořených vzorů ve velkých souborech. Při malých vstupech mohou koktat.
Programátoři tyto systémy neustále ladí. Cíl je vždy stejný: lepší kompresní poměry, vyšší rychlost. Univerzální řešení ale neexistuje.
Nejlepší kompresor pro váš text může být nejhorší pro vaši databázi.
Mluvíme o bezeztrátové kompresi. Jedině tak lze zaručit, že původní soubor získáte zpět. Každý kousek zůstává nedotčen. Soubor rozložíte na menší kousky pro uložení nebo přenos a poté jej znovu složíte přesně tak, jak byl. Žádná data se neztratí.
Ztrátová komprese jde opačným směrem. Nesnaží se zachránit vše. Místo toho zahodí „nepotřebné“ informace. Cíl je jednoduchý: zmenšit velikost souboru. Najdete ho všude. Toto je standard pro rastrové obrázky.
Bitmapy jsou nafouklé. Zabírají hodně místa. Skvělým příkladem je naskenovaná fotografie.
Bezeztrátové kompresní algoritmy zde selhávají. Ano, velké plochy vypadají stejně. Obloha je modrá. Ale když se podíváte pozorně, každý pixel je trochu jiný. Hodnoty barev se mění. Chcete-li zmenšit velikost souboru bez ztráty rozlišení, musíte tyto hodnoty změnit.
Program vybere jeden odstín modré. Tuto jedinou hodnotu přiřadí každému pixelu na obloze. Přepíše soubor tak, aby ukazoval na tento odkaz. Výsledek? Velikost souboru je výrazně snížena. Rozdíl si nevšimnete.
Má to ale háček. Nikdy nebudete moci získat původní soubor zpět.
Jakmile jej zkomprimujete, zůstane vám interpretace reality navržená komprimačním programem. Původní data zmizí. Ztrátovou kompresi nelze použít pro věci, které vyžadují přesnou reprodukci. Softwarové aplikace? Ne. Databáze? Ne. Prezidentské inaugurační projevy? rozhodně ne.
“Se ztrátovou komprimací nemůžete získat původní soubor zpět poté, co byl komprimován. Zbývá vám komprimační program, který znovu interpretuje originál.”
Aktualizovali jsme tento článek pomocí technologie AI a poté jsme se ujistili, že byl zkontrolován a upraven editorem HowStuffWorks.
Často kladené otázky o kompresi souborů
Co dělá komprese souborů?
Zmenšuje velikost souboru. Menší soubory znamenají rychlejší přenosy. Odesíláte a přijímáte data rychleji.
Jaké jsou hlavní typy schémat komprese souborů?
Jsou dva. Bezztrátová a ztrátová komprese. Bezeztrátová komprese rozdělí soubor a později jej rekonstruuje. Ztrátová komprese odstraňuje bity. Trvale snižuje velikost souboru. Ztrátovou kompresi nelze vrátit zpět.
Jakou kompresi používají soubory zip?
Soubory ZIP spoléhají na bezztrátovou kompresi dat. Zpracovávají více adresářů. Používají algoritmy jako DEFLATE. Údaje vycházejí přesně stejné, jak přišly.
Snižuje komprese souborů kvalitu?
Ano. Po komprimaci snímku v počítači nebo ve fotoaparátu kvalita často trpí. Ostrost klesá. Kontrast zmizí. Jemné barevné detaily zmizí. Obraz vypadá hůř. Je to kompromis.


























