Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Codigos de Hoffman y Shannon Fano
Codigos de Hoffman y Shannon Fano
Introducción
Codificación Shannon-Fano
Introducción
Este método de codificación fue desarrollado por Claude Shannon en los laboratorios Bell y por
Robert Fano en MIT (Massachussets Institute of Technology) en la década del 40 casi
simultáneamente.La técnica fue propuesta por Claude Elwood Shannon, en “Una Teoría
Matemática de la Comunicación”, su artículo de 1948 introduciendo el campo de la teoría de la
información. El método fue atribuido a Robert Fano, quien posteriormente lo publicó como un
informe técnico. La codificación Shannon-Fano no debe confundirse con la codificación
Shannon, método de codificación usado para probar el teorema de Shannon de la codificación
sin ruido, ni con la codificación Shannon-Fano-Elias (también conocida como codificación
Elias), el precursor de la codificación aritmética.
El metodo de Shannon fano se refiere a la probabilidad de aparición de cada símbolo en un
mensaje, su utilidad principal es la compresión de datos aunque desafortunadamente,
Shannon-Fano no produce siempre códigos prefijos óptimos, lo cual lo hace no optimo en el
sentido de que no consigue la menor longitud de palabra código esperada posible como en la
codificación Huffman; aunque a diferencia de la codificación Huffman, garantiza que todas las
longitudes de palabras de código están a un bit de su ideal teórico – logP(x).
Propiedades
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
● Diferentes códigos, tienen diferentes tipos de bits
● Los códigos para símbolos con bajas probabilidades tienen más bits
● Los códigos para símbolos con altas probabilidades tienen menos bits
● Códigos de longitud diferente pueden ser unívocamente decodificados
Algoritmo
1 Para una secuencia de símbolos, se calcula la correspondiente lista de frecuencias de
aparición de los símbolos.
2 Se ordena la lista de símbolos según su frecuencia en orden decreciente.
3 Se divide la lista en dos partes, de forma que la suma total de frecuencias de la mitad
superior sea lo más cercana posible a la suma total de la parte inferior
4 A la mitad superior de la lista se le asigna el dígito binario 0, y a la mitad inferior se le
asigna el dígito binario 1. Esto significa que los códigos de los símbolos en la primera
mitad empezarán todos con 0 y los códigos en la segunda mitad empezarán todos con
1.
5 Cada una de las mitades, se subdivide en grupos y se agregan bits (digitos binarios) a
los códigos hasta que cada grupo conste de un único símbolo.
6 Se pueden representar los símbolos a modo de árbol binario
7 Se calcula la entropía como:
X = Largo de la serie / frecuencia
Entropía = Log 2 (X)
8 Una vez calculada la entropía se calcula la entropía en el mensaje (cantidad de bits
necesarios para representar el símbolo en el mensaje)
Entropia * frecuencia del símbolo
9 Finalmente el cálculo de los bits de código a transmitir está dado por la representación
binaria (0,1) del símbolo y los bits de mensajes es la multiplicación de los bits de
códigos * la frecuencia del símbolo
Ejemplo
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
Dada la siguiente secuencia de simbolos codifique segun shannon fano:
DDABEBADACABAAECDCBAEACABCBAADDEAACAEAB
3 Dividir en 2 grupos
Grupo 1 A+B=22
Grupo 2 C+D+E=17
4 A la mitad inferior se le asigna 1 a la superior 0
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
6 Se representa como arbol binario
7 Se calcula la entropia
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
9 Se calculan los Bits de codigo y mensaje
Codificación Huffman
Con este estudio, Huffman superó a su profesor, quien había trabajado con el inventor de la
teoría de la información Claude Shannon con el fin de desarrollar un código similar. Huffman
solucionó la mayor parte de los errores en el algoritmo de codificación Shannon-Fano. La
solución se basaba en el proceso de construir el árbol de abajo a arriba en vez de al contrario.”
1
1
http://es.wikipedia.org/wiki/Codificaci%C3%B3n_Huffman#Historia
1
http://neo.lcc.uma.es/evirtual/cdd/tutorial/presentacion/huffman.html
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
En la codificación Huffman se crea una estructura arbórea ordenada con todos los símbolos y
la frecuencia con que aparecen. Las ramas se construyen en forma recursiva comenzando con
los símbolos menos frecuentes.
La construcción del árbol se realiza ordenando en primer lugar los símbolos según la frecuencia
de aparición. Los dos símbolos con menor frecuencia de aparición se eliminan sucesivamente
de la lista y se conectan a un nodo cuyo peso es igual a la suma de la frecuencia de los dos
símbolos. El símbolo con menor peso es asignado a la rama 1, el otro a la rama 0 y así
sucesivamente, considerando cada nodo formado como un símbolo nuevo, hasta que se
obtiene un nodo principal llamado raíz.
El código de cada símbolo corresponde a la sucesión de códigos en el camino, comenzando
desde este carácter hasta la raíz. De esta manera, cuanto más dentro del árbol esté el símbolo,
más largo será el código.
Algoritmo
Posterior a este procedimiento, se etiquetan las ramas que unen cada uno de los nodos con ‘1’
y ‘0’, que indican hijo derecho e izquierdo respectivamente. El código resultante para cada
caracter es la lectura, siguiendo la rama desde la raiz hacia el nodo hoja que se quiera
alcanzar.
Ejemplo
Una fuente S, tiene un alfabeto con 6 caracteres, S= {s1, s2, … , s6}, y sus probabilidades
asociadas P{1, 2, … , 6} = {0.4, 0.2, 0.2, 0.1, 0.07, 0.03}
Siguiendo el algoritmo para la codificación de Huffman, el arbol binario que representa la fuente
seria este:
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
En las hojas inferiores del árbol estan los nodos que tienen menos frecuencia, o peso. La
frecuencia de los nodos aumenta progresivamente hasta que se alcance la raiz del árbol. Los
nodos intersección hacen 2referencia a la suma de sus dos nodos hijo.
Propiedades principales
2
1
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm
● Concatenando múltiples símbolos en "palabras" de tamaño fijo o variable antes de la
codificación Huffman, normalmente ayuda, especialmente cuando símbolos adyacentes
están correlacionados.
Variaciones
http://es.scribd.com/doc/43669982/Codificacion-Huffman
http://www.isa.cie.uva.es/proyectos/codec/teoria32.html#sanon
http://www.gedlc.ulpgc.es/docencia/seminarios/cd/Codificacion/sld051.htm