Co je Huffmanova komprese?

Také známé jako Huffmanovo kódování, algoritmus pro bezztrátovou kompresi souborů na základě četnosti výskytu symbolu v komprimovaném souboru. Huffmanovův algoritmus je založen na statistickém kódování, což znamená, že pravděpodobnost symbolu má přímý vliv na délku jeho reprezentace. Čím pravděpodobnější je výskyt symbolu, tím kratší bude jeho bitová reprezentace. V každém souboru jsou určité znaky použity více než jiné. Při použití binární reprezentace závisí počet bitů potřebných k reprezentaci každého znaku na počtu znaků, které je třeba reprezentovat. Pomocí jednoho bitu můžeme představovat dva znaky, tj. 0 představuje první znak a 1 představuje druhý znak. Pomocí dvou bitů můžeme představovat čtyři znaky atd.

Na rozdíl od kódu ASCII, což je kód pevné délky využívající sedm bitů na znak, je Huffmanova komprese systém kódování s proměnnou délkou, který přiřazuje menší kódy častěji používaným znakům a větší kódy méně často používaným znakům, aby se zmenšila velikost soubory komprimované a přenášené.

Například v souboru s následujícími daty:

XXXXXXYYYYZZ

frekvence „X“ je 6, frekvence „Y“ je 4 a frekvence „Z“ je 2. Pokud je každý znak reprezentován pomocí kódu pevné délky dvou bitů, pak počet bitů potřebný k uložit tento soubor bude 24, tj. (2 x 6) + (2x 4) + (2x 2) = 24.

Pokud by byla výše uvedená data komprimována pomocí Huffmanovy komprese, častěji se vyskytující čísla by byla reprezentována menšími bity, například:

X kódem 0 (1 bit)
Y kódem 10 (2 bity)
Z kódem 11 (2 bity)

proto bude velikost souboru 18, tj. (1x 6) + (2 x 4) + (2 x 2) = 18.

Ve výše uvedeném příkladu jsou častěji se vyskytujícím znakům přiřazeny menší kódy, což má za následek menší počet bitů v konečném komprimovaném souboru.

Huffmanova komprese byla pojmenována podle jejího objevitele Davida Huffmana.