En informática y teoría de la información , un código Huffman es un tipo particular de código de prefijo óptimo que se usa comúnmente para la compresión de datos sin pérdidas . El proceso de encontrar o usar dicho código procede por medio de la codificación Huffman , un algoritmo desarrollado por David A. Huffman cuando era un Sc.D. estudiante del MIT y publicado en el artículo de 1952 "Un método para la construcción de códigos de redundancia mínima". [1]
La salida del algoritmo de Huffman se puede ver como una tabla de códigos de longitud variable para codificar un símbolo fuente (como un carácter en un archivo). El algoritmo deriva esta tabla de la probabilidad estimada o frecuencia de ocurrencia ( peso ) para cada valor posible del símbolo fuente. Como en otros métodos de codificación de entropía , los símbolos más comunes generalmente se representan usando menos bits que los símbolos menos comunes. El método de Huffman se puede implementar de manera eficiente, encontrando un código en el tiempo lineal al número de pesos de entrada si se ordenan estos pesos. [2] Sin embargo, aunque es óptimo entre los métodos que codifican símbolos por separado, la codificación Huffman no siempre es óptimaentre todos los métodos de compresión, se reemplaza con codificación aritmética [3] o sistemas numéricos asimétricos [4] si se requiere una mejor relación de compresión.
En 1951, a David A. Huffman y sus compañeros de clase de teoría de la información del MIT se les dio a elegir entre un trabajo trimestral o un examen final . El profesor, Robert M. Fano , asignó un trabajo final sobre el problema de encontrar el código binario más eficiente. Huffman, incapaz de probar que ningún código fuera el más eficiente, estaba a punto de darse por vencido y comenzar a estudiar para el examen final cuando se le ocurrió la idea de usar un árbol binario ordenado por frecuencia y rápidamente demostró que este método era el más eficiente. [5]
Al hacerlo, Huffman superó a Fano, quien había trabajado con el inventor de la teoría de la información Claude Shannon para desarrollar un código similar. Construir el árbol de abajo hacia arriba garantizó la optimización, a diferencia del enfoque de arriba hacia abajo de la codificación de Shannon-Fano .
La codificación de Huffman utiliza un método específico para elegir la representación de cada símbolo, lo que da como resultado un código de prefijo (a veces llamado "códigos sin prefijo", es decir, la cadena de bits que representa un símbolo en particular nunca es un prefijo de la cadena de bits que representa cualquier otro símbolo). La codificación de Huffman es un método tan extendido para crear códigos de prefijo que el término "código de Huffman" se usa ampliamente como sinónimo de "código de prefijo", incluso cuando dicho código no es producido por el algoritmo de Huffman.
Símbolo | Código |
---|---|
a1 | 0 |
a2 | 10 |
a3 | 110 |
a4 | 111 |