El árbol de Huffman es un algoritmo de compresión de datos sin pérdida que utiliza una estructura de árbol binario para asignar códigos de longitud variable a cada símbolo en un conjunto de datos.
En términos matemáticos, el árbol de Huffman se basa en la probabilidad de aparición de cada símbolo en el conjunto de datos y utiliza esta información para construir un árbol binario óptimo.
El algoritmo comienza creando nodos para cada símbolo y asignando una probabilidad a cada uno. Luego, combina los dos símbolos con las probabilidades más bajas en un nuevo nodo, cuya probabilidad es la suma de las probabilidades de los nodos originales.
Este proceso se repite hasta que todos los nodos se combinan en un único nodo raíz que representa todo el conjunto de datos. Los códigos de longitud variable se asignan a cada símbolo en función de su posición en el árbol: los símbolos que aparecen con más frecuencia tienen códigos más cortos, mientras que los símbolos menos comunes tienen códigos más largos.
En resumen, el árbol de Huffman es un algoritmo matemático que utiliza la probabilidad de los símbolos en un conjunto de datos para construir un árbol binario óptimo que asigna códigos de longitud variable a cada símbolo.
En nuestro caso particular, la respresentación del árbol será una tupla de tuplas. Definimos el árbol por inducción en su 'complejidad', siendo $ a_n $ un árbol de complejidad $ n $:
- Caso base $ n = 0 $:
donde
- Caso inductivo
$n > 0$ :
donde
Para esta práctica se han usado dos archivos de texto externos español.txt y ingles.txt. La práctica consiste en hacer una codificación huffman de dichos archivos de texto y de ahí obtener ciertos resultados.
Español |
---|
- Longitud media:
- Comprobación del primer teorema de Shannon:
por tanto
- Codigos del alfabeto:
Inglés |
---|
- Longitud media:
- Comprobación del primer teorema de Shannon:
por tanto
- Codigos del alfabeto:
Español | Inglés | |
---|---|---|
Codificacion de dimensión | ||
Longitud | 38 | 37 |
Longitud ascii | 72 | 72 |
Sea
entonces, la decodificación (del texto en inglés) de dicho código es
Primero de todo destacar que el primer teorema de Shannon se cumple, como era de esperar. El hecho de poner únicamente 2 decimales es debido a que el error de la entropía para el español y el inglés respectivamente son:
Además, podemos observar en la primera pregunta las longitudes medias ponderadas de los caracteres en los textos español e inglés son repectivamente 4.37 y 4.44, bastante menores que 8 (la longitud usual con codificación ascii). Hay que tener en cuenta que estas medias son ponderadas, es decir, que unas letras pesas más que otras en función de la frecuencia que aparecen en el texto. Esto es precisamente un punto fuerte en la codificación con un árbol de huffman, pues se asegura de que los caracteres que vayan a ser más utilizados tengan una codificación más corta que los que aparezcan menos.
También, mediante un pequeño ejemplo, se puede apreciar en la pregunta 2 como la proporción entre la longitud de nuestro código frente al código ascii de la palabra dimension es similar a la total del texto:
Español |
---|
Inglés |
---|