2.2. Huffmanovo kódování

Tato metoda je pojmenována podle svého objevitele, D. A. Huffnana. Je založena na znalosti pravděpodobnosti výskytu jednotlivých znaků. Nejčastějši se vyskytujícím znakům je pak přiřazen krátký kód, méně často se vyskytujícím znakům zase delší kód. Tento princip použil již v roce 1800 Samuel Morse na zakódování písmen anglické abecedy, čímž vznikla telegrafní Morseova abeceda.

Princip metody spočívá ve vytvoření binárního stromu, jehož koncové uzly odpovídají symbolům původní abecedy, hrany jsou ohodnoceny symboly 0 a 1 a uzly jsou ohodnoceny pravděpodobností výskytu. Pravděpodobnost vnitřního uzlu je přitom rovna součtu pravděpodobností jeho následníků. Uzly řadíme do posloupnosti podle rostoucí pravděpodobnosti, v každém kroku z ní odstraníme dva uzly s nejnižší prioritou, vytvoříme z nich následníky nového uzlu a ten opět zařadíme do seznamu.

Huffmanův kód má dvě důležité vlastnosti. Jednak je kódem s minimální délkou, jednak je to prefixový kód a je tedy jednoznačně dekódovatelný. Jeho problémem je to, že musíme znát rozdělení pravděpodobnosti výskytu jednotlivých symbolů. To lze nahradit odhadem, případně je možné tento odhad v průběhu komprese upřesňovat.

Použití Huffmanova kódu je časté v kombinaci s jinými kompresními algoritmy, například při kompresi obrazu a videa ve standardech JPEG a MPEG. Samostatně se s ním můžeme setkat v programu compress pod OS Unix.