class=" del

Historia

En 1951, dieron el David A. Huffman y sus compan@eros de clase de la teoría de información del MIT la opción de un papel de término o de un examen final. El profesor, Roberto M. Fano, asignó un documento de término sobre el problema de encontrar el código binario más eficiente. Huffman, incapaz de probar cualquier código era el más eficiente, estaba a punto de dar para arriba y comenzar a estudiar para el final cuando él golpeó sobre la idea de usar un árbol binario frecuencia-clasificado y probó rápidamente este método el más eficiente.

Al hacer eso, el estudiante aventajó a su profesor, que había trabajado con el Claude Shannon del inventor de la teoría de información para desarrollar un código similar. Huffman evitó el defecto principal de la codificación subóptima de Shannon-Fano desarrollando el árbol de la parte inferior en vez de la tapa abajo.

Definición de problema

Descripción informal

; Dado: Un sistema de los símbolos y de sus pesos (generalmente proporcional a las probabilidades).
; Hallazgo: Un código binario prefijo-libre (un sistema de codewords) con el mínimo contaba con la longitud del codeword de (equivalente, un árbol con la longitud de trayectoria cargada mínimo ).

Descripción formalizada

Entrada .
= \ dejado \ {a_ {1}, a_ {2}, \ cdots, a_ {n} \ derecho \} del A del alfabeto, que es el alfabeto del símbolo del tamaño n.
Fija W = \ a la izquierda \ {w_ {1}, w_ {2}, \ cdots, w_ {n} \ derecho \} , que es el sistema de los pesos del símbolo (del positivo) (generalmente proporcionales a las probabilidades), es decir w_ {i} = \ mathrm {} \ a la izquierda del peso (a_ {i} \ derecho), 1 \ leq i \ leq n.
Cifrar el C \ dejó (A, W \ derecho) = \ a la izquierda \ {c_ {1}, el c_ {2}, \ los cdots, el c_ {n} \ derecho \} , que es el sistema de codewords (del binario), donde está el codeword el c_ {i} para el a_ {i}, 1 \ leq i \ leq n.
Dejan L \ se fueron (C \ derecho) = \ sum_ {i=1} ^ {n} {w_ {i} \ época \ mathrm {} \ a la izquierda de la longitud (c_ {i} \ derechos)} sea la longitud de trayectoria cargada del código C. Condición: L \ se fue (C \) derecho \ leq L \ dejó (T \ derecho) para cualquier T del código \ dejó (A, W \ derecho) .

Muestras

Técnica básica

La técnica trabaja creando un árbol binario de nodos. Éstos se pueden almacenar en un arsenal regular, el tamaño cuyo depende del número de símbolos, n. Un nodo puede ser un nodo de hoja o un nodo interno . Inicialmente, todos los nodos son los nodos de hoja, que contienen el símbolo sí mismo del, el peso (frecuencia del del aspecto) del símbolo y opcionalmente, un acoplamiento a un nodo del padre que haga fácil leer el código (en revés) a partir de un nodo de hoja. Los nodos internos contienen el peso del símbolo, acoplamientos a los nodos de niño del dos y el acoplamiento opcional a un nodo del padre . Como convención común, el pedacito “0” representa el siguiente del niño izquierdo y “1 mordido” representa el siguiente del niño adecuado. Un árbol finished tiene nodos de hoja de n y nodos internos de n-1.

Un linear-tiempo * el método para crear un árbol de Huffman es utilizar dos coletas primer que contiene los pesos iniciales (junto con indicadores a las hojas asociadas), y los pesos combinados (junto con indicadores a los árboles) que son puestos en la parte posterior de la segunda coleta. Esto asegura que el peso más bajo está guardado siempre en el frente de una de las dos coletas.

Crear el árbol: Comenzar con tantas hojas pues hay símbolos.

  • Enviar a la cola todos los nodos de hoja en la primera coleta (por probabilidad en orden cada vez mayor de modo que el menos artículo probable esté en el jefe de la coleta).
  • Mientras que hay más de un nodo en las coletas: Dequeue los dos nodos con el peso más bajo.
  • Crear un nuevo nodo interno, con los dos nodos apenas-quitados como niños (cualquier nodo puede ser cualquier niño) y la suma de sus pesos como el nuevo peso.
  • Enviar a la cola el nuevo nodo en la parte posterior de la segunda coleta.
  • de El nodo restante es el nodo de raíz; el árbol ahora se ha generado.

    Es generalmente beneficioso reducir al mínimo la variación de la longitud del codeword. Por ejemplo, un almacenador intermediario de comunicación que recibe datos Huffman-codificados puede necesitar ser más grande ocuparse especialmente de símbolos largos si el árbol es especialmente desequilibrado. Para reducir al mínimo la variación, romper simplemente los lazos entre las coletas eligiendo el artículo en la primera coleta. Esta modificación conservará el óptimun matemático de la codificación de Huffman mientras que variación de reducción al mínimo y reducción al mínimo de la longitud del código de carácter más largo.

    Este método de * es tiempo linear si se asume que usted hace ya los nodos de hoja clasificar por el peso inicial. Si no, el que clasifica él tomará el O (n \ tiempo del registro n).

    Características principales

    Las frecuencias usadas pueden ser las genéricas para el dominio del uso que se basan en la experiencia media, o pueden ser las frecuencias reales encontradas en el texto que es comprimido. (Esta variación requiere que la tabla de la frecuencia o la otra indirecta en cuanto a la codificación se deba almacenar con el texto comprimido; las puestas en práctica emplean varios trucos para almacenar tablas eficientemente.)

    La codificación de Huffman es óptima cuando la probabilidad de cada símbolo de la entrada es una energía negativa de dos. los códigos Prefijo-libres tienden a tener ineficacia leve en los pequeños alfabetos, adonde las probabilidades bajan a menudo entre estos puntos óptimos. " Blocking", o ampliando el tamaño del alfabeto por símbolos múltiples que se unen en " words" de fijo o de variable-length antes de la codificación de Huffman, generalmente ayudas, especialmente cuando se correlacionan los símbolos adyacentes (como en el caso del texto de lenguaje natural). El peor caso para la codificación de Huffman puede suceder cuando la probabilidad de un símbolo se excede 2-1 = 0.5, haciendo el límite superior de la ineficacia ilimitado. Estas situaciones responden a menudo bien a una forma de bloquear la codificación llamada de la Funcionar-longitud.

    La codificación aritmética produce aumentos leves sobre la codificación de Huffman, pero estos aumentos han sido en la práctica raramente bastante grandes compensar a derechos más altos de la complejidad de cómputo de la codificación aritmética y de la patente . (En fecha el de julio 2006, IBM posee patentes en muchos métodos de codificación aritmética en varias jurisdicciones; ver las patentes de los E. en la codificación aritmética .)

    Variaciones

    Muchas variaciones de la codificación de Huffman existen, algunos cuyo el uso a Huffman-como algoritmo, y otros cuyo encontrar los códigos óptimos del prefijo (mientras que, por ejemplo, poniendo diversas restricciones en la salida). Observar que, en el 3ultimo caso, el método no necesita estar Huffman-como, y, no necesitar de hecho incluso ser el tiempo polinómico . Una lista exhaustiva de papeles en la codificación de Huffman en sus variaciones es dada por el " Cifrar y analizar los árboles para la fuente sin pérdidas Encoding".

    n - codificación ary de Huffman

    El n del - el algoritmo ary de Huffman utiliza {0, 1,…, &minus del n ; 1} alfabeto para codificar el mensaje y para construir un n - árbol ary. Este acercamiento era considerado por Huffman en su papel original.

    Codificación adaptante de Huffman

    Una variación llamada la codificación adaptante de Huffman del calcula las frecuencias basadas dinámicamente en frecuencias reales recientes en la secuencia de la fuente. Esto se relaciona algo con la familia LZ de algoritmos.

    Algoritmo de la plantilla de Huffman

    Lo más a menudo posible, los pesos usados en puestas en práctica de la codificación de Huffman representan probabilidades numéricas, pero el algoritmo dado arriba no requiere esto; requiere solamente una manera de pedir pesos y de agregarlos. El algoritmo de la plantilla de Huffman del permite a uno utilizar cualquier clase de pesos (costes, frecuencias, pares de pesos, pesos no numéricos) y a uno de muchos métodos que combinan (no apenas adición). Tales algoritmos pueden solucionar otros problemas de la minimización, tales como \ max_i de reducción al mínimo \ left, un problema primero aplicado al diseño de circuito.

    codificación Longitud-limitada de Huffman

    la codificación Longitud-limitada de Huffman del es una variante donde está todavía alcanzar la meta una longitud de trayectoria cargada mínima, pero hay una restricción adicional que la longitud de cada codeword debe ser menos que un constante dado. El paquete-combina algoritmo de soluciona este problema con un acercamiento codicioso simple muy similar a ése usado por el algoritmo de Huffman. Su complejidad del tiempo es el O (NL) , donde está la longitud L máxima de un codeword. No se sabe ningún algoritmo para solucionar este problema con la misma eficacia que la codificación convencional de Huffman,

    Codificación de Huffman con costes desiguales de la letra

    En el problema de codificación estándar de Huffman, se asume que cada símbolo en el sistema que las palabras de código están construidas de tiene un coste igual a transmitir: una palabra de código cuya longitud es dígitos del N tendrá siempre un coste del N, no importa cómo muchos de esos dígitos son 0s, cuántos son 1s, etc. Cuando el trabajo bajo esta asunción, la reducción al mínimo del coste total del mensaje y la reducción al mínimo del número total de dígitos son la misma cosa.

    La codificación de Huffman del con los costes desiguales de la letra es la generalización en la cual esta asunción es no más verdad presunto: las letras del alfabeto de la codificación pueden tener longitudes no uniformes, debido a las características del medio de la transmisión. Un ejemplo es el alfabeto de la codificación del código Morse, adonde una “rociada” dura para enviar que un “punto”, y por lo tanto el coste de una rociada en tiempo de transmisión es más alto. La meta es todavía reducir al mínimo la longitud media cargada del codeword, pero es no más suficiente apenas reducir al mínimo el número de símbolos usados por el mensaje. No se sabe ningún algoritmo para solucionar esto de manera semejante o con la misma eficacia que la codificación convencional de Huffman.

    Árboles binarios alfabéticos óptimos (codificación HU-Tucker y el código canónico de Huffman)

    En el problema de codificación estándar de Huffman, se asume que cualquier codeword puede corresponder a cualquier símbolo de la entrada. En la versión alfabética, el orden alfabético de entradas y las salidas deben ser idénticos. Así, por ejemplo, = \ dejado \ {a, b, c \ derecho \} del A no se podría asignar el H del código \ dejó (A, C \ derecho) = \ a la izquierda \ {00.01 \ derechos \} , sino que por el contrario se debe asignar o el H \ dejó (A, C \ derecho) = \ a la izquierda \ {00.1 \ derechos \} o el H \ salió (A, C \ derecho) de = \ a la izquierda \ {0.11 \ derechos \} . Esto también se conoce como el problema de HU-Tucker, después de los autores del papel que presenta la primera solución de Linearithmic a este problema alfabético binario óptimo, que tiene algunas semejanzas al algoritmo de Huffman, pero no es una variación de este algoritmo. Estos árboles binarios alfabéticos óptimos son de uso frecuente como árboles de busqueda binaria si los pesos que corresponden a las entradas alfabéticamente pedidas están por orden numérico, el código de Huffman tienen las mismas longitudes que el código alfabético óptimo, que se puede encontrar de calcular estas longitudes. El código alfabético resultante se llama el el código canónico de Huffman y es a veces a menudo el código usado en la práctica, debido a la facilidad de la codificación/de descifrar. La técnica para encontrar este código a veces se llama la codificación de Huffman-Shannon-Fano del, puesto que es óptima como la codificación de Huffman, solamente alfabético en probabilidad del peso, como la codificación de Shannon-Fano. El código de Huffman-Shannon-Fano que corresponde al ejemplo es \ {000.11 \} , que, teniendo las mismas longitudes del codeword que la solución original, es también óptimo.

    Usos

    La codificación aritmética se puede ver como generalización de la codificación de Huffman; de hecho, la codificación aritmética es precedida en la práctica a menudo por la codificación de Huffman, pues es más fácil encontrar un código aritmético para una entrada binaria que para una entrada nonbinary. También, aunque la codificación aritmética ofrezca un mejor funcionamiento de la compresión que la codificación de Huffman, la codificación de Huffman sigue siendo adentro uso amplio debido a su simplicidad, velocidad y carencia del embarazo por las patentes

    La codificación de Huffman es hoy de uso frecuente como " back-end" a un cierto otro método de la compresión. El DESINFLA ( algoritmo de s del PKZIP ') y los codificadores-decodificador de las multimedias tal como JPEG y MP3 tienen una cuantificación anticipada del modelo y seguida por la codificación de Huffman.

    Ver también

    El modificó la codificación de Huffman - usada en las máquinas de fax
    Codificación de Shannon-Fano
    Compresión de datos
    Lempel-Ziv-Galés
    Sistema binario asimétrico
    Varicode
  • .

  • Zenithic
  • Nie Yali
    Random links:Ambergris Caye | Economía de la localización | Hōshi de Biwa | Gilbert, cuenta de Montpensier | El ángel azul

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