If you're seeing this message, it means we're having trouble loading external resources on our website.

Pokud používáš webový filtr, ujisti se, že domény: *.kastatic.org and *.kasandbox.org jsou vyloučeny z filtrování.

Hlavní obsah

Bezeztrátová komprese pomocí bitů

Počítače reprezentují všechna data v binární soutavě, takže všechny typy souborů, od textu po obrázky a videa, jsou v konečném důsledku sekvencemi bitů. Bez ohledu na to, zda bity reprezentují dokument nebo GIF, počítače mohou použít kompresní bitovou techniku nazývanou Huffmanovo kódování.

Huffmanův kódovací algoritmus

Podívejme se, jak algoritmus funguje na jednoduchém textovém příkladu. Tento jazykový příklad používá pouze 4 různé znaky, a přesto je pro nás nesmírně důležitý: je to jazyk používaný k reprezentaci DNA a skládá se ze sekvencí čtyř znaků A, C, G a T.
Například 4,6 milionů znaků reprezentujících sekvenci DNA E.coli začíná následovně:
agcttttcattct
Protože potřebujeme reprezentovat čtyři znaky, počítač by obvykle reprezentoval každý znak pomocí 2 bitů, a to následovným způsobem:
znakbinární kód
a00
c01
g10
t11
Výše uvedených 13 znaků by bylo zapsáno pomocí 26 bitů následovně - všimni si, že nepotřebujeme mezi kódem pro jednotlivé bity žádné mezery.
100 111 111 111 000 000 000 000
Můžeme to ale udělat i lépe. Ve výše uvedeném vzorovém textu je písmeno "t" mnohem častější než ostatní písmena ("t" se objevuje sedmkrát, "c" třikrát, "a" dvakrát a "g" jen jednou). Pokud pro písmeno "t" použijeme kratší kód, pak bychom využívali méně místa až 54 % času (7 z 13 znaků). Mohli bychom například použít následující kód:
znakbinární kód
a010
c00
g011
t1
Našich 13 znaků by pak bylo nakódováno následovně:
100 110 011 110 000 000 000
Je to pouhých 22 bitů, o čtyři bity méně než naše původní kódování. Možná to tak nevypadá, ale představ si, že bychom využili takovouto optimalizaci na všech 4,6 milionů znaků DNA!

Huffman dekódování

Možná se nad novými binárními kódy s různými délkami podivuješ. Je ještě možné kód spolehlivě dekódovat? Ano, se správnou kombinací kódů.
Zkus si to!
Dekóduj následující bity pomocí optimalizovaných binárních kódů.
111 001
znakbinární kód
a010
c00
g011
t1
Ujisti se, že začínáš prvním bitem vlevo a propoj kódy zleva doprava. Jaký řetězec DNA dostaneš?
Vyber 1 odpověď:

To je krása Huffmanova kódování: algoritmus nám dává způsob, jak použít množinou binárních kódů pro danou sekvenci, čímž se zajistí, že data mohou být rekonstruována jednoznačně a spolehlivě.

Použití Huffmanova kódování

Mnoho formátů souborů používá nějaký druh Huffmanova kódování ke zmenšení velikosti souboru. Faxové stroje používají Huffmanovo kódování po použití RLE při černobílých sekvencích. PNG obrázky se komprimují pomocí LZ77, algoritmus podobný technologii komprese textu, který jsme se naučili, v kombinaci s Huffmanovým kódováním výsledků.

Chceš se zapojit do diskuze?

Zatím žádné příspěvky.
Umíš anglicky? Kliknutím zobrazíš diskuzi anglické verze Khan Academy.