idea:
sea s un arreglo de símbolos con como índice y como probabilidad, pq una cola de prioridad de los símbolos basada en las probabilidades, graph un árbol con nodos atribuidos con
for(i=0;i<number_of_symbols;i++) { pq.insert(s[i]); graph.node_insert(s[i]); } n=i; while(pq.size()>1) s_i=pq.delete_min(); s_j=pq.delete_min(); s_k=(n,s_i.p+s_j.p); pq.insert(s_k); graph.node_insert(n); n++; }
al final, las hojas del árbol contienen los símbolos originales, a cada uno se asiña el código binario obtenido bajando desde la raíz hacia la hoja y tomando el cero para la rama izquierda y el uno para la rama derecha (o al revés)
el codificador de Huffman tiene las siguientes propriedades