Huffmanovo kódování – aplet

Aplet demonstruje princip vytváření Huffmanova kódu. Jedná se o nejznámějšího zástupce prefixových kódů. Vlastnost prefixového kódu je, že žádné kódové slovo není předponou (prefixem) jiného, takže je možné slova po přijetí kódované zprávy jednoznačně rozlišit.

Ovládání

Aplet je tvořen dvěma poli pro vstupní a výstupní text, tabulkou pro tvorbu kódu a ovládacími prvky. Do levého vstupního pole se vepíše zprávu k zakódování a tlačítkem Kóduj se započne proces kódování. Klikáním na tlačítko Krok pod tabulkou se pak provádí jednotlivé kroky vytvoření Huffmanovy tabulky binárních kódů, tj. postupné slučování skupin prvků s nejnižší četností. Vrátit se o krok zpět umožňuje tlačítko Zpět.

Jakmile je kód vytvořen, zpřístupní se posuvník pro kódování samotné. Jeho posouváním se jednotlivé symboly nahrazují příslušným kódovým slovem z tabulky. Zároveň se v tabulce barevně zvýrazňují nahrazované znaky.

V jakémkoliv okamžiku je možno stisknout tlačítko Reset, které vyčistí tabulku a odemkne vstupní pole pro novou sekvenci znaků.

Algoritmus sestavení Huffmanovy tabulky

Algoritmus publikoval D. A. Huffman v roce 1952. Znaky častěji se vyskytující ve zprávě se reprezentují kratší kódovou posloupností než znaky zřídka se vyskytující. Pokud je výskyt znaků ve zprávě rozložený rovnoměrně, ke kompresi zprávy nedojde.

Kódování řetězce

Zakódování vstupního řetězce proběhne triviálně nahrazením každého vstupního znaku odpovídající posloupností nul a jedniček z Huffmanovy tabulky.

Dekódování

Dekódování probíhá tak, že se načítají jednotlivé bity kódu, a jakmile je nalezena shoda s některým kódem v tabulce, vypíše se dekódpvaný znak. Tak se postupuje až do konce bitového řetězce.


(c) 2014 Luděk Novotný, Pavel Rajmic, Ústav telekomunikací, FEKT, VUT v Brně