Está en la página 1de 8

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.

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

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.

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

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.

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

También podría gustarte