Un artículo para comprender cómo se construye la codificación de Huffman según el árbol de Huffman y su traducibilidad única

introducir

Codificación Huffman (Codificación Huffman), también conocida como Codificación Huffman. Huffman propuso este método de codificación en 1952. La función principal es acortar la longitud de codificación. El documento adopta la codificación Huffman, el propósito es acortar la longitud de codificación del mapa de bits (mapa de bits) tanto como sea posible y ahorrar espacio de almacenamiento.

método de construcción

Primero construye el árbol de Huffman. El principio de construir un árbol de Huffman es fusionar primero los dos nodos con el valor de peso más pequeño, que son los dos nodos con la frecuencia más baja en aplicaciones específicas; y (2) todos los nodos deben estar en el árbol.

Por ejemplo, tenemos 5 tipos de caracteres, ABCDE, y la frecuencia de aparición es la siguiente:

0.15

b0.1

C 0,15

D 0,2

mi 0.4

De acuerdo con el principio de combinar primero los dos elementos más pequeños, elija el B más pequeño, porque es 0,1, y luego elija la segunda frecuencia más baja de 0,15. Aquí, elija A y combínelo en un solo elemento.

 Luego encuentra los dos ítems con menor frecuencia, encontramos C y D, 0.15 y 0.2.

Tenga en cuenta que el elemento combinado calcula el peso/probabilidad de todos los subelementos por separado, por lo que ahora quedan 3 nodos en el campo: nodo 0,25, nodo 0,35 y nodo E (0,4). Entonces fusionamos el nodo 0.25 y el nodo 0.35.

 Finalmente, es natural fusionar el nodo 0.6 y el nodo E.

Luego codifique de acuerdo con el árbol de Huffman, puede obtener el código de Huffman. Primero confirmemos las reglas de codificación, es muy simple, marque 1 a la izquierda y 0 a la derecha, o marque 0 a la izquierda y 1 a la derecha. Por ejemplo, si elegimos marcar 1 a la izquierda y 0 a la derecha, el resultado de marcar es así:

Así que el resultado de la codificación es el siguiente:

un 111

B 110

101

D 100

mi 0

Comparado

Es posible que desee calcular nuevamente, si se codifica de esta manera, en comparación con la codificación por número uno por uno, a saber:

un 000

B 001

010

D 011

E 100

No lo olvide, A a D son los 3 caracteres, y E guarda dos caracteres, por lo que debe ser breve.

Si hay que calcularlo, es así:

L_{num} = (0.15 + 0.1 + 0.15 + 0.2 + 0.4) \times 3 = 3

L_{Huff} = (0,15 + 0,1 + 0,15 + 0,2) \times 3 + 0,4 \times 1 = 2,2

¿Qué te parece? ¿También tiene 0,8 unidades menos de longitud~?

traducibilidad única

Entonces usted puede preguntar, oye, según los números, cada uno de ellos tiene 3 longitudes, entonces mi número es más corto, 0 es 0, 1 es 1 y 2 es 10, debe ser mejor que eso .

Corto es corto, pero ya ves lo que puede salir mal:

Suponiendo que la codificación se vea así:

un 0

B 1

C 10

D 11

E 100

Por ejemplo, si quiero transmitir EDCBA, ¿qué tipo de flujo de bits se transmitirá según el número más corto? Es tal que:

100111010

Bien, me gustaría preguntar, los primeros 3 que subiste al principio , 1, 0, 0 constituyen BAA, o 10, 0 constituyen CA, o lo que quieras decir, 100 constituye E.

Por lo tanto, este método de codificación tiene el problema de que no puede identificar de manera única la secuencia de codificación en el flujo de bits. El término no es únicamente traducible .

La codificación Huffman resuelve muy bien este problema. Por ejemplo, también es EDCBA, de acuerdo con el código que obtuvimos arriba, ¿en qué se debe compilar?

un 111

B 110

101

D 100

mi 0

EDCBA es:

0100101110111

De hecho, puede ver en el árbol de Huffman que esta codificación definitivamente no codificará la ambigüedad.

Por ejemplo, el comienzo es 0, según el árbol de Huffman, el único nodo desde el nodo raíz hasta 0 es E, y el primer carácter es el primer bit, 0, que representa E;

Bueno, el segundo carácter, a partir del segundo bit, el primer bit es 1, desde el nodo raíz hasta el 1, hay otra rama, luego sigue buscando, el tercer bit es 0, que está a la derecha, y continúa. El cuarto bit es 0 y vuelve a la derecha, por lo que definitivamente es D.

 El tercer carácter, empezando por el 5º bit, 1, 0, 1, luego el cuarto carácter...

De esta manera, desde el principio hasta el final, siempre se puede encontrar un resultado único que le corresponda, por lo que Huffman no tiene el problema de la codificación caótica.

Este es el llamado, todos los códigos de los códigos de Huffman son códigos de prefijo diferentes, que garantizan la traducibilidad única de los códigos.

Supongo que te gusta

Origin blog.csdn.net/m0_46948660/article/details/129986728
Recomendado
Clasificación