Huffmanovo kódování je algoritmus využívaný pro bezeztrátovou kompresi dat.[1] Konvertuje znaky vstupního souboru do bitových řetězců různé délky. Znaky, které se ve vstupním souboru vyskytují nejčastěji, jsou konvertovány do bitových řetězců s nejkratší délkou (nejfrekventovanější znak tak může být konvertován do jediného bitu), zatímco znaky, které se vyskytují velmi zřídka, jsou konvertovány do delších řetězců (mohou být i delší než 8 bitů).
Nejjednodušší metoda komprese touto metodou probíhá ve dvou fázích. První projde soubor a vytvoří statistiku četností každého znaku. Ve druhé fázi se využije této statistiky pro vytvoření binárního stromu a k následné kompresi vstupních dat.
Dekomprese naopak pomocí rekonstruovaného binárního stromu dekóduje řetězce proměnlivé délky.
Uvažujme příklad, kdy je cílem zakódovat text skládající se ze čtyř různých symbolů (s1, s2, s3, s4), jejichž četnosti výskytu v textu jsou (0,08; 0,7; 0,1; 0,12).
1
(s2, znak s vyšší pravděpodobností) a 0
(s134).1
a 0
, dokud nepřiřadíme kódové znaky všem zdrojovým znakům.1
a 0
podle toho, jak se daný znak seskupoval s ostatními znaky. (s134 = 0
→ s13 = s1341
= 01
; s4 = s1340
= 00
→ s3 = s131
= 011
; s1 = s130
= 010
)Je známo více variací Huffmanova kódování, ale není mezi nimi téměř žádný rozdíl v účinnosti komprese dat.