Algorisme d'Huffman
L'algorisme d'Huffman és un algorisme per la construcció de codis d'Huffman, desenvolupat per David A. Huffman el 1952 i descrit a A Method for the Construction of Minimum-Redundancy Codes.[1]
Aquest algorisme pren un alfabet de n símbols, juntament amb les seves freqüències d'aparició associades, i produeix un codi d'Huffman per aquest alfabet i aquestes freqüències.
[modifica] Descripció
L'algorisme consisteix en la creació d'un arbre binari que té tots els símbols a cada fulla, i està construït de forma que seguint-lo des de l'arrel a cada una de les fulles s'obtingui el codi d'Huffman associat.
- Es creen diferents arbres, un per cada símbol de l'alfabet, consistint cada arbre en un node sense fills. Cada arbre s'etiqueta amb el seu símbol associat i la seva freqüència d'aparició.
- S'agafen els dos arbres de menor freqüència i s'uneixen creant un nou arbre. L'etiqueta de l'arrel serà la suma de les freqüències de les arrels dels dos arbres que s'uneixen, i aquests dos arbres seran fills del nou arbre. També s'etiqueten les dues branques del nou arbre: amb un 0 la de l'esquerra, i amb un 1 la de la dreta.
- Es repeteix el pas 2 fins que només queda un arbre.
Amb aquest arbre es pot conèixer el codi associat a un símbol i també es pot obtenir el símbol associat a un determinat codi.
Per obtenir el codi associat a un símbol s'ha de procedir de la següent manera:
- Començar amb un codi buit.
- Iniciar el recorregut de l'arbre a la fulla associada al símbol.
- Començar un recorregut de l'arbre cap amunt.
- Cada vegada que es pugi un nivell, afegir al codi l'etiqueta de la branca que s'ha recorregut.
- Després d'arribar a l'arrel, invertir el codi.
- El resultat és el codi d'Huffman desitjat.
Per obtenir un símbol a partir d'un codi s'ha de fer així:
- Començar el recorregut de l'arbre a l'arrel d'aquest.
- Extreure el primer símbol del codi a descodificar.
- Descendir per la branca etiquetada amb aquest símbol.
- Tornar al pas 2 fins que s'arribi a una fulla, que serà el símbol associat al codi.
A la pràctica, gairebé sempre s'utilitza l'arbre per obtenir tots els codis a la vegada; després es guarden en taules i es deixa l'arbre.