112029637 codigos de hoffman y shannon fano
DESCRIPTION
Teoria de la informacion. Hoffmann y ShannonTRANSCRIPT
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
Codigos de Huffman y Shannon Fano
Ciencia y Tecnologia de la Informacion II
Universidad Distrital Francisco Jose de Caldas
Docente:Julio Florez
Christian Javier Bonilla Herrera 20072020013
Jonathan Camilo Bonilla Malaver 20072020014
David Felipe Camargo Polo 20071020016
Sergio Andres Novoa Moreno 20072020111
Introducción
El objetivo de estos códigos es generar una representación de la información de la fuente de
forma tal que su tamaño se aproxime a la entropía teórica de esa fuente, produciendo una
"compresión" de los datos. Son códigos prefijo.
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
1 Calcular frecuencias de simbolos
A = 15 ; B = 7; C = 6; D = 6; E = 5
2 Hacer una tabla de simbolos
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
5 Se agregan bits hasta que sean unicos
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
8 Y despues la entropia del mensaje
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
10 Utilizariamos 89 bits lo que es el 29% de compresion
Codificación Huffman
“En 1951, a David Huffman y sus compañeros de clase de la asignatura “Teoría de la
Información” se les permitió optar entre la realización de un examen final o la presentación de
un trabajo. El profesor Robert. M. Fano asignó las condiciones del trabajo bajo la premisa de
encontrar el código binario más eficiente. Huffman, ante la imposibilidad de demostrar qué
código era más eficiente, se rindió y empezó a estudiar para el examen final. Mientras estaba
en este proceso vino a su mente la idea de usar árboles binarios de frecuencia ordenada y
rápidamente probó que éste era el método más eficiente.
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
La codificación de Huffman es una técnica para la compresión de datos, ampliamente usada y
muy efectiva. Es un método general de codificación y compresión diseñado para minimizar el
número medio de bits necesarios para transmitir un símbolo cuando se debe transmitir varias
copias independientes y estadísticamente equivalentes de dicho símbolo. Este método
determina cómo los distintos valores del símbolo deben representarse como cadenas binarias.
1http://es.wikipedia.org/wiki/Codificaci%C3%B3n_Huffman#Historia 1http://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
El algoritmo para la aplicación de la codificación Huffman, consiste en la creación de un arbol
binario que representa una fuente de información, los nodos hoja se etiquetan con los
caracteres del alfabeto propio de la fuente, y sus frecuencias de aparición, o probabilidades
asociadas. Se unen consecutivamente los nodos cuya suma de frecuencia sea menor, y se
procede hasta que no queda ningun nodo hoja por unir a ningun nodo superior y de esta
manera se haya completado la creación del arbol binario.
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}
La entropía asociada a esta fuente es: H(S) = 2.21 bits
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
● Es óptima cuando la probabilidad de cada símbolo de entrada es una potencia negativa
de dos.
● Los códigos prefijos tienden a ser ligeramente ineficientes en alfabetos pequeños.
1 2
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
Código huffman n-ario
El algoritmo n-ario de huffman usa el alfabeto {0,1,…,N-1} para codificar el mensaje y construir
un árbol n-ario. Este enfoque fue considerado por huffman en su enfoque originario.
Código huffman adaptable
La variación llamada código de huffman adaptable calcula dinámicamente la probabilidad de la
frecuencia de la cadena de origen basada en antiguas apariciones. Está relacionado con la
familia de algoritmos LZ.
Algoritmo de Huffman de plantilla
El algoritmo de plantilla de Huffman permite utilizar cualquier tipo de tamaño de código (costos,
frecuencias, los pares del tamaño, tamaños no numéricos) y uno de los muchos que combina
métodos (no solo la adición).
Código de Huffman de tamaño limitado
El Código de Huffman de tamaño de limitado es una variante donde el objetivo es lograr que el
camino de coste mínimo con la restricción de que la longitud de cada palabra sea menor que
una constante.
Codificación huffman con costes desiguales
En la codificación huffman con costes, los símbolos del alfabeto pueden tener longitudes no
uniformes, debido a características del medio de transmisión.U n ejemplo es el alfabeto del
código morse, donde una 'raya' requiere más tiempo para ser enviada que un 'punto', y por lo
tanto el costo del tiempo de transmisión de una raya es mayor.
Árboles binarios alfabéticos óptimos (codificación hu-tucker)
En una situación de codificación huffman estándar, se asume que cualquier código puede
corresponderse con cualquier símbolo de entrada. En la versiónal fa bé t ic a, el orden
alfabético de las entradas y salidas debe ser idéntico.