Un código canónico de Huffman del es un tipo particular de código de Huffman que tenga la característica que puede muy compacto ser descrito.

Los compresores de los datos funcionan generalmente en una de dos maneras. Cualquier el descompresor puede deducir qué codebook ha utilizado el compresor de contexto anterior, o el compresor debe decir a el descompresor cuáles el codebook es. Puesto que un codebook canónico de Huffman se puede almacenar especialmente eficientemente, la mayoría de los compresores comienzan generando un " normal" Codebook de Huffman, y el convertido él a Huffman canónico antes de usarlo.

Algoritmo

El algoritmo normal de la codificación de Huffman asigna un código de longitud variable a cada símbolo en el alfabeto. Los símbolos más con frecuencia usados serán asignados un código más corto. Por ejemplo, suponer que tenemos el siguiente no - codebook canónico:

A = 11 B = 0 C = 101 D = 100

Aquí la letra A se ha asignado 2 pedacitos, B tiene 1 pedacito, y C y D ambas tienen 3 pedacitos. Para hacer el código un el código canónico de Huffman, los códigos se vuelve a numerar. Las longitudes de pedacito permanecen iguales con el libro de código que es el clasificado primer por longitud del codeword y el en segundo lugar por valor alfabético:

B = 0 A = 11 C = 101 D = 100

Cada uno de los códigos existentes se substituye por un nuevo de la misma longitud, usar el algoritmo siguiente:

que el primer símbolo del en la lista consigue asignó a codeword 000… 000. Este código es la misma longitud que el código original pero todos los ceros. Éste será a menudo un solo cero (“0”).
Cada símbolo subsecuente se asigna el número binario siguiente en orden, asegurándose que eso los códigos siguientes son siempre más altos en valor.
Cuando usted alcanza un codeword más largo, cambiar de puesto el codeword a la izquierda por la diferencia de la longitud, después de incrementar de .

Siguiendo estas tres reglas, la versión canónica del del libro de código producido estará:

B = 0 A = 10 C = 110 D = 111

Codificación del Codebook

La ventaja entera de un árbol canónico de Huffman es que uno puede codificar la descripción (el codebook) en pocos pedacitos que un árbol lleno-descrito.

Tomemos a nuestro el codebook original de Huffman:

A = 11 B = 0 C = 101 D = 100

Hay varias maneras que podríamos codificar este árbol de Huffman. Por ejemplo, podríamos escribir a cada uno el símbolo seguido por el número del de los pedacitos y del código :

(“A”, 2.100)

Puesto que estamos enumerando los símbolos en orden alfabético secuencial, podemos omitir los símbolos ellos mismos, enumerando apenas el número del de los pedacitos y del código :

(2.100)

Con nuestra versión canónica del tenemos el conocimiento que los símbolos están en secuencial del orden alfabético y que un código posterior será siempre más alto en valor que anterior. Las únicas piezas se fueron para transmitir son las pedacito-longitudes (número del de los pedacitos ) para cada símbolo. Observar que nuestro árbol canónico de Huffman tiene siempre valores más altos para longitudes de pedacito más largas y que cualquier símbolo de la misma longitud de pedacito ( C y D ) tiene valores de código más altos para símbolos más altos:

A = 10 (valor de código: 2 decimal, pedacitos: 2 ) B = 0 (valor de código: 0 decimales, pedacitos: 1 ) C = 110 (valor de código: 6 decimal, pedacitos: 3 ) D = 111 (valor de código: 7 decimal, pedacitos: 3 )

Puesto que dos tercios de los apremios se saben, sólo el número del de los pedacitos para cada símbolo necesita ser transmitido:

2, 1, 3, 3

Con el conocimiento del algoritmo canónico de Huffman, es entonces posible reconstruir la tabla entera (los valores del símbolo y de código) apenas de las pedacito-longitudes. Los símbolos inusitados se transmiten normalmente como teniendo longitud de pedacito cero.

Pseudo código

El pseudo código para la construcción de una tabla canónica de Huffman podía mirar algo como el siguiente:

código = 0 mientras que más símbolos: símbolo de la impresión, código código = código + (1 << (longitud de pedacito actual - 1)) si longitud de pedacito siguiente > longitud de pedacito actual: código = código << (longitud de pedacito siguiente - longitud de pedacito actual)

.

  • Zenithic
  • Maison de l'Enfance
    Random links:Grecia | Orquesta filarmónica de Hong Kong | Hongseong | Categoría de Simplicial | Especialidades veterinarias

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">