Você está na página 1de 8

En la informtica y la teora de la informacin, la codificacin de Huffman es un algoritmo de codificacin de entropa utilizada para la compresin de datos sin prdidas.

El trmino se refiere a la utilizacin de una tabla de cdigos de longitud variable para codificar un smbolo de cdigo fuente donde la tabla de cdigos de longitud variable ha sido derivada de una forma particular, sobre la base de la probabilidad estimada de ocurrencia para cada valor posible de la fuente de smbolo. Fue desarrollado por David A. Huffman mientras que l era un Ph.D. estudiante en el MIT, y publicado en el diario 1952 "Un mtodo para la construccin de cdigos Mnimo-Redundancia". La codificacin de Huffman utiliza un mtodo especfico para la eleccin de la representacin para cada smbolo, lo que resulta en un cdigo de prefijo que expresa los smbolos de la fuente ms comunes utilizando cadenas ms cortas de bits que los que se utilizan para smbolos de la fuente menos comunes. Huffman fue capaz de disear el mtodo de compresin ms eficiente de este tipo: ningn otro mapeo de smbolos de la fuente individuales a cadenas nicas de bits va a producir un tamao de salida media ms pequea cuando las frecuencias de smbolos reales estn de acuerdo con los que se utilizan para crear el cdigo. El tiempo de ejecucin del mtodo de Huffman es bastante eficiente, se necesitan operaciones para construirlo. Un mtodo fue encontrado ms tarde para disear un cdigo de Huffman en el tiempo lineal, si se ordenan las probabilidades de entrada. Para un conjunto de smbolos con una distribucin de probabilidad uniforme y un nmero de miembros que es una potencia de dos, la codificacin de Huffman es equivalente a la codificacin de bloque binario simple, por ejemplo, la codificacin ASCII. Huffman es un mtodo generalizado para la creacin de cdigos de prefijos que el trmino "cdigo de Huffman" es ampliamente utilizado como un sinnimo de "prefijo" aun cuando tal cdigo no es producido por el algoritmo de Huffman. Aunque algoritmo original de Huffman es ptima para un smbolo a smbolo de codificacin con una distribucin de probabilidad de entrada conocida, no es ptimo cuando la restriccin smbolo a smbolo se deja caer, o cuando las funciones de masa de probabilidad son desconocidas, no se distribuye de forma idntica, o no es independiente. Otros mtodos tales como la codificacin aritmtica y la codificacin LZW a menudo tienen una mejor capacidad de compresin: ambos de estos mtodos puede combinar un nmero arbitrario de smbolos para la codificacin ms eficientes, y generalmente adaptarse a las estadsticas de entrada reales, el ltimo de los cuales es til cuando las probabilidades de entrada estn No se conoce con precisin o variar significativamente dentro de la corriente. Sin embargo, las limitaciones de la codificacin de Huffman no deben ser exageradas, sino que puede ser utilizado de forma adaptativa, con capacidad desconocida, cambiar, o probabilidades dependientes del contexto. En el caso de los conocidos variables aleatorias independientes e idnticamente distribuidos, la combinacin de smbolos reduce la ineficiencia de una manera que se acerca optimalidad como el nmero de smbolos combinados aumenta.

Historia
En 1951, David A. Huffman y sus compaeros de clase la teora de la informacin del MIT se les dio la opcin de un trabajo final o un examen final. El profesor

Robert M. Fano, asignado un trabajo sobre el problema de encontrar el cdigo binario ms eficiente. Huffman, no puede probar todos los cdigos son los ms eficientes, estaba a punto de darse por vencido y empezar a estudiar para el final, cuando se le ocurri la idea de utilizar un rbol binario ordenado frecuencia y rpidamente prob este mtodo el ms eficiente. De este modo, el alumno super a su profesor, que haba trabajado con la teora de la informacin inventor Claude Shannon para desarrollar un cdigo similar. Huffman evit el gran defecto del subptima Shannon-Fano codificacin construyendo el rbol desde abajo y no desde arriba hacia abajo.

Definicin del problema


DESCRIPCIN INFORMAL Dado un conjunto de smbolos y sus pesos. Encontrar una libre de prefijo binario con longitud mnima palabra de cdigo esperado. DESCRIPCIN FORMALIZADA De entrada. Alfabeto, que es el smbolo del alfabeto de tamao. Conjunto, que es el conjunto de los pesos smbolo, es decir. Salida. Cdigo, que es el conjunto de palabras de cdigo, donde es la palabra de cdigo para. Objetivo. Dejar ser la longitud del camino ponderada de cdigo. Estado: para cualquier cdigo. MUESTRAS Para cualquier cdigo que es biunvoca, lo que significa que el cdigo es exclusivamente decodeable, la suma de los presupuestos de probabilidad a travs de todos los smbolos es siempre menor o igual a uno. En este ejemplo, la suma es estrictamente igual a uno, y como resultado, el cdigo se denomina un cdigo completo. Si este no es el caso, siempre se puede derivar un cdigo equivalente mediante la adicin de smbolos adicionales, para hacer que el cdigo completo mientras se mantiene biunvoca.
Segn la definicin de Shannon, el contenido de la informacin h de cada ai smbolo con probabilidad no nula es La entropa H es la suma ponderada, en todos los smbolos ai con wi probabilidad distinta de cero, de la informacin contenida en cada smbolo: Como consecuencia del teorema de codificacin de fuente de Shannon, la entropa es una medida de la longitud de palabra de cdigo ms pequeo que es tericamente posible para el alfabeto dado con los pesos asociados. En este ejemplo, la longitud de palabra de cdigo de media ponderada es de 2,25 bits por smbolo, slo ligeramente mayor que la entropa calculado de 2.205 bits por smbolo. As que no slo es este cdigo ptimo en el sentido de que ningn otro cdigo factible un mejor rendimiento, pero es muy cercano al lmite terico establecido por Shannon. Tenga en cuenta que, en general, un cdigo de Huffman no tiene que ser nico, pero es siempre uno de los cdigos de reducir al mnimo.

Tcnica bsica
COMPRESIN La tcnica funciona mediante la creacin de un rbol binario de nodos. Estos pueden ser almacenados en una matriz regular, el tamao de los cuales depende del nmero de smbolos,. Un nodo puede ser un nodo de hoja o un nodo interno. Inicialmente, todos los nodos son nodos de hoja, que contienen el smbolo en s mismo, el peso del smbolo y, opcionalmente, un enlace a un nodo principal que hace que sea fcil de leer el cdigo a partir de un nodo hoja. Los nodos internos contienen smbolo de peso, los enlaces a dos nodos secundarios y el enlace opcional a un nodo padre. Como una convencin comn, bit '0 'representa siguiendo el hijo izquierdo y el bit '1' representa despus el hijo derecho. Un rbol terminado tiene un mximo de nodos hoja y los nodos internos. Un rbol de Huffman que omite smbolos no utilizados produce las longitudes de cdigo ms ptimas.
El proceso bsicamente comienza con los nodos de la hoja que contiene las probabilidades de que el smbolo que representan, a continuacin, un nuevo nodo cuyos hijos son los 2 nodos con menor probabilidad se crea, de forma que la probabilidad de que el nuevo nodo es igual a la suma de las probabilidades de los nios. Con los 2 nodos anteriores se fusionaron en un nodo, y con el nuevo nodo que se considera ahora, el procedimiento se repite hasta que slo queda uno de nodo, el rbol de Huffman. El algoritmo de construccin ms simple utiliza una cola de prioridad que se le da el nodo con menor probabilidad ms alta prioridad:

Crear un nodo hoja para cada smbolo y agregarlo a la cola de prioridad. Mientras que hay ms de un nodo en la cola: Retire los dos nodos de alta prioridad de la cola Crear un nuevo nodo interno con estos dos nodos como los nios y con una probabilidad igual a la suma de las probabilidades de los dos nodos. Aadir el nuevo nodo a la cola. El nodo restante es el nodo raz y el rbol es completa. Dado que las estructuras de datos de las colas de prioridad eficientes requerir tiempo O por insercin, y un rbol con n hojas tiene 2n-1 nodos, este algoritmo funciona en tiempo O, donde n es el nmero de smbolos.
Si los smbolos estn ordenados por probabilidad, hay un mtodo de tiempo lineal para crear un rbol de Huffman usando dos colas, la primera uno que contiene los pesos iniciales, y los pesos combinados que son puestos en la parte posterior de la segunda cola. Esto asegura que el peso ms bajo se mantiene siempre en la parte delantera de una de las dos colas:

Comience con las hojas que hay smbolos. Poner en cola todos los nodos de la hoja en la primera fila. Mientras que hay ms de un nodo en las colas: Quitar de la cola los dos nodos con el peso ms bajo mediante el examen de los frentes de ambas colas.

Crear un nuevo nodo interno, con los dos nodos recin retirado como los nios y la suma de sus pesos como el nuevo peso. Poner en cola el nuevo nodo en la parte trasera de la segunda cola. El nodo restante es el nodo raz, el rbol ahora se ha generado. Aunque este algoritmo puede aparecer "ms rpido" complejidad-sabia que el algoritmo anterior utilizando una cola de prioridad, esto no es realmente el caso, porque los smbolos tienen que ser ordenados por probabilidad antes de mano, un proceso que lleva tiempo O en s mismo.
En muchos casos, la complejidad de tiempo no es muy importante en la eleccin del algoritmo de aqu, ya que aqu n es el nmero de smbolos en el alfabeto, que es tpicamente un nmero muy pequeo, mientras que el anlisis de la complejidad se refiere al comportamiento cuando n crece hasta ser muy grande . Por lo general, es beneficioso para reducir al mnimo la varianza de la palabra de cdigo de longitud. Por ejemplo, un tampn de comunicacin de recepcin de datos con codificacin de Huffman puede necesitar ser ms grande para hacer frente a smbolos largos especialmente si el rbol est especialmente desequilibrada. Para minimizar la varianza, simplemente romper los lazos entre colas seleccionando el elemento de la primera fila. Esta modificacin retendr la optimalidad matemtica de la codificacin de Huffman mientras tanto minimizar la varianza y reducir al mnimo la longitud del cdigo de carcter ms larga. Aqu hay un ejemplo usando la cadena de asunto francs "j'aime aller sur le bord de l'eau les jeudis ou les jours perjudica":

DESCOMPRESIN En trminos generales, el proceso de descompresin es simplemente una cuestin de la traduccin de la secuencia de cdigos de prefijo de valores de bytes individuales, por lo general mediante el desplazamiento del nodo de rbol de Huffman por el nodo, ya que cada bit se lee de la secuencia de entrada. Antes de que esto puede tener lugar, sin embargo, el rbol de Huffman debe ser de alguna manera reconstruida. En el caso ms simple, donde las frecuencias de caracteres son bastante predecible, el rbol puede ser preconstruido y por lo tanto volver a utilizar cada vez, a costa de, al menos, alguna medida de la eficiencia de compresin. De lo contrario, la informacin para reconstruir el rbol debe ser enviada a priori. Un enfoque ingenuo podra ser la de anteponer el clculo de la frecuencia de cada personaje en la secuencia de compresin. Por desgracia, la sobrecarga en tal caso podra ascender a varios kilobytes, por lo que este mtodo tiene poca utilidad prctica. Si los datos se comprimen utilizando la codificacin cannica, el modelo de compresin se puede reconstruir con precisin con slo bits de informacin. Otro mtodo es simplemente se antepone el rbol Huffman, poco a poco, el flujo de salida. Por ejemplo, suponiendo que el valor de 0 representa un nodo padre y 1 un nodo de hoja, siempre que este ltimo se encuentra la construccin de rutina rbol simplemente lee los siguientes 8 bits para determinar el valor de carcter de que la hoja en particular. El proceso contina de forma recursiva hasta que se alcanza el ltimo nodo de hoja, en ese momento, el rbol de Huffman ser por lo tanto fielmente reconstruida. La sobrecarga de uso de tal mtodo oscila entre aproximadamente 2 a 320 bytes. Muchas otras tcnicas son posibles tambin. En cualquier caso, ya que los datos comprimidos pueden incluir no utilizados "bits de cola" el descompresor debe ser capaz de determinar

cundo detener la produccin de salida. Esto se puede lograr ya sea por la transmisin de la longitud de los datos descomprimidos, junto con el modelo de compresin o mediante la definicin de un smbolo de cdigo especial para indicar el final de la entrada.

Propiedades principales
Las probabilidades pueden ser utilizados los genricos para el dominio de aplicacin que se basan en la experiencia media, o pueden ser las frecuencias reales que se encuentran en el texto que est siendo comprimida. La codificacin de Huffman es ptima cuando la probabilidad de cada smbolo de entrada es una potencia negativa de dos. Los cdigos prefijo tienden a tener ineficiencia en las pequeas alfabetos, donde las probabilidades a menudo caen entre estos puntos ptimos. "Bloqueo", o ampliar el tamao del alfabeto mediante la agrupacin de varios smbolos en "palabras" de longitud fija o variable antes de la codificacin de Huffman ayuda tanto para reducir esa ineficiencia y tomar ventaja de las dependencias estadsticas entre los smbolos de entrada dentro del grupo. El peor de los casos para la codificacin de Huffman puede suceder cuando la probabilidad de un smbolo supera 2-1 = 0,5, por lo que el lmite superior de la ineficiencia ilimitada. Estas situaciones a menudo responden bien a una forma de llamada codificacin de longitud de ejecucin bloqueo; para el caso simple de los procesos de Bernoulli, codificacin Golomb ptima es un cdigo de longitud de ejecucin demostrable. Codificacin aritmtica produce algunas ganancias en Huffman, aunque la codificacin aritmtica tiene mayor complejidad computacional. Adems, la codificacin aritmtica fue histricamente un tema de preocupacin en torno a asuntos relacionados con patentes. Sin embargo, a partir de mediados de 2010, diversas tcnicas eficaces conocidos para la codificacin aritmtica han pasado al dominio pblico las primeras patentes han expirado.

Variaciones
Existen muchas variaciones de codificacin de Huffman, algunos de los cuales utilizan un algoritmo de Huffman-como, y otros de los que encontramos prefijos ptimos. Tenga en cuenta que, en este ltimo caso, el mtodo no necesita ser Huffman-como, y, de hecho, no necesita ser incluso tiempo polinmico. Una lista exhaustiva de documentos sobre la codificacin de Huffman y sus variaciones se da por "Cdigo Analizar y rboles para la codificacin fuente Lossless".

N-ARIA CODIFICACIN DE HUFFMAN El algoritmo de Huffman n-aria utiliza el {0, 1, ..., N - 1} alfabeto para codificar mensajes y construir un rbol de n-aria. Este enfoque fue considerado por Huffman en su artculo original. El mismo algoritmo se aplica para los cdigos binarios, excepto que los n smbolos menos probables se toman juntos, en lugar de slo el 2 menos probable. Tenga en cuenta que para n mayor que 2, no todos los conjuntos de palabras de cdigo se pueden formar adecuadamente un rbol de n-aria para la codificacin de Huffman. En este caso, hay que aadir los titulares adicionales lugar 0-probabilidad. Esto es debido a que el rbol debe formar un N a 1

contratista; para la codificacin de binarios, esto es un contratista de 2 a 1, y cualquier conjunto de tamao puede formar un contratista tales. Si el nmero de palabras de cdigo es congruente con 1 mdulo n-1, entonces el conjunto de palabras de cdigo se formar un rbol de Huffman adecuada.

ADAPTATIVA LA CODIFICACIN DE HUFFMAN Una variacin llamada adaptativa la codificacin de Huffman implica el clculo de las probabilidades dinmicos en base a las frecuencias reales recientes en la secuencia de smbolos de la fuente, y el cambio de la estructura de rbol de codificacin para que coincida con las estimaciones de probabilidad actualizados. Es muy poco frecuente en la prctica, debido a que el costo de la actualizacin del rbol hace que sea ms lento que la codificacin aritmtica adaptable optimizados, que es ms flexible y tiene una mejor compresin. ALGORITMO DE PLANTILLA DE HUFFMAN Muy a menudo, los pesos utilizados en las implementaciones de codificacin Huffman representan probabilidades numricas, pero el algoritmo dado anteriormente no requiere esto, slo requiere que los pesos forman un monoide conmutativo totalmente ordenado, es decir, una forma de pesas de orden y para agregarlos. El algoritmo de Huffman plantilla permite a uno usar cualquier tipo de pesos y uno de los muchos mtodos de combinacin. Tales algoritmos pueden resolver otros problemas de minimizacin, como minimizar, un problema aplicado primero a diseo de circuito. DURACIN LIMITADA HUFFMAN/MNIMA VARIANZA HUFFMAN Longitud-limitado codificacin de Huffman es una variante donde el objetivo sigue siendo alcanzar una longitud mnima de camino ponderado, pero hay una restriccin adicional de que la longitud de cada palabra de cdigo debe ser menor que una constante dada. El algoritmo de paquete-de mezcla resuelve este problema con un enfoque codiciosos sencilla muy similar a la utilizada por el algoritmo de Huffman. Su complejidad es el tiempo, que es la longitud mxima de una palabra de cdigo. No se algoritmo es conocido para resolver este problema en el tiempo lineal o linearithmic, a diferencia de los problemas convencionales de Huffman PRESORTED y sin clasificar, respectivamente. CODIFICACIN HUFFMAN CON COSTES DE LETRAS DESIGUALES En el problema de codificacin de Huffman estndar, se asume que cada smbolo en el conjunto de las palabras de cdigo que se construyen a partir tiene un coste igual a transmitir: una palabra de cdigo cuya longitud es N dgitos siempre tendr un coste de N, no importa cuntas de esos dgitos son 0s, cuntos estn 1s, etc Cuando se trabaja en este supuesto, reducir al mnimo el coste total del mensaje y minimizar el nmero total de dgitos son la misma cosa.
Codificacin Huffman con costes desiguales carta es la generalizacin sin esta suposicin: las letras del alfabeto de codificacin pueden tener longitudes no uniformes, debido a las caractersticas del medio de transmisin. Un ejemplo es el alfabeto de codificacin de cdigo Morse, donde tarda ms un 'tablero' para enviar que un "punto", y por lo tanto el costo de un guin en el tiempo de transmisin es mayor. El objetivo sigue siendo para reducir al mnimo la longitud de palabra de cdigo de media ponderada, pero ya no es suficiente slo para minimizar el nmero de smbolos utilizados por el mensaje. No se algoritmo es conocido para

resolver esto en la misma forma o con la misma eficiencia que la codificacin de Huffman convencionales.

RBOLES BINARIOS ALFABTICOS PTIMOS En el problema de codificacin de Huffman estndar, se asume que cualquier palabra de cdigo puede corresponder a cualquier smbolo de entrada. En la versin alfabtico, el orden alfabtico de las entradas y salidas deben ser idnticas. As, por ejemplo, podra no ser asignado cdigo, sino que debe ser asignado ya sea o. Esto tambin se conoce como el problema de Hu-Tucker, despus de que los autores del artculo que presenta la primera solucin a este problema linearithmic ptima alfabtica binario, que tiene algunas similitudes con el algoritmo de Huffman, pero no es una variacin de este algoritmo. Estos rboles binarios alfabticos ptimos se utilizan a menudo como rboles binarios de bsqueda. EL CDIGO DE HUFFMAN CANNICA Si los pesos correspondientes a las entradas ordenadas alfabticamente estn en orden numrico, el cdigo de Huffman tiene la misma longitud como el cdigo alfabtico ptima, que se pueden encontrar de clculo de estas longitudes, lo que hace Hu-Tucker codificacin innecesaria. El cdigo que resulta de la entrada ordenada numricamente a veces se llama el cdigo de Huffman cannica y es a menudo el cdigo utilizado en la prctica, debido a la facilidad de codificacin/decodificacin. La tcnica para la bsqueda de este cdigo se llama a veces de Huffman-Shannon-Fano codificacin, ya que es ptima como la codificacin de Huffman, pero alfabtico en peso probabilidad, como ShannonFano codificacin. El cdigo de Huffman-Shannon-Fano correspondiente al ejemplo de ello es, que, teniendo las mismas longitudes de palabra de cdigo como la solucin original, tambin es ptima.

Aplicaciones
La codificacin aritmtica se pueden ver como una generalizacin de la codificacin de Huffman, en el sentido de que generan el mismo resultado cuando cada smbolo tiene una probabilidad de la forma 1/2k;, en particular, que tiende a ofrecer significativamente una mejor compresin para los pequeos tamaos del alfabeto. La codificacin de Huffman, sin embargo sigue siendo de uso generalizado debido a su simplicidad y alta velocidad. Intuitivamente, la codificacin aritmtica pueden ofrecer una mejor compresin de Huffman codificacin, ya que sus "palabras clave" pueden tener efectivamente longitudes de bits no enteros, mientras que las palabras de cdigo de Huffman slo pueden tener un nmero entero de bits. Por lo tanto, existe una ineficiencia en codificacin de Huffman, donde una palabra de cdigo de longitud k coincide de manera ptima slo un smbolo de 1/2k de probabilidad y otras probabilidades no estn representados la forma ms ptima, mientras que la longitud de palabra de cdigo en la codificacin aritmtica puede ser hecho para coincidir exactamente con el verdadera probabilidad del smbolo. Huffman hoy se utiliza a menudo como un "back-end" con algunos otros mtodos de compresin. Codecs desinflan y multimedia como JPEG y MP3 tienen un modelo de front-end y cuantificacin seguido de la codificacin de Huffman.

Você também pode gostar