Está en la página 1de 15

|1|1

INSTITUTO POLITÉCNICO NACIONAL


Escuela Superior de Ingeniería Mecánica y Eléctrica
Unidad Zacatenco
Codificación y manejo de la información
Práctica: codificación de fuentes discretas mediante el código
de huffman

Profesor: Rojas Lima José Ernesto

Alumnos:
Galicia Rojas Ulises Alberto
Méndez Ruiz Jorge Yatzar
Mejía Cortes Abraham

Grupo: 8CV1

Fecha de Realización: 09/10/2019


Marco Teórico

En 1952, David Huffman propuso un método estadístico que permitía asignar un


código binario a los diversos símbolos a comprimir (píxeles o caracteres, por
ejemplo). La longitud de cada código no es idéntica para todos los símbolos: se
asignan códigos cortos a los símbolos utilizados con más frecuencia (los que
aparecen más a menudo), mientras que los símbolos menos frecuentes reciben
códigos binarios más largos. La expresión Código de Longitud Variable (VLC) se
utiliza para indicar este tipo de código porque ningún código es el prefijo de otro. De
este modo, la sucesión final de códigos con longitudes variables será en promedio
más pequeña que la obtenida con códigos de longitudes constantes.

El codificador Huffman 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.
Analicemos la siguiente oración: "COMMENT_CA_MARCHE". Las siguientes son
las frecuencias de aparición de las letras:

Los códigos correspondientes a cada carácter son tales que los códigos para los caracteres
más frecuentes son cortos y los correspondientes a los símbolos menos frecuentes son largos:

Las compresiones basadas en este tipo de código producen buenas proporciones


de compresión, en particular, para las imágenes monocromáticas (faxes, por
ejemplo). Se utiliza especialmente en las recomendaciones T4 y T5 utilizadas en
ITU-T
CUESTIONARIO

1.- ¿En qué consiste el principio de codificación de fuente?

La salida que se tiene del codificador está en muchos casos correlada, y algunos bits o

cadenas de bits son mucho más probables que otros. Esto provoca que se transmitan

más bits de los que son estrictamente necesarios para enviar la información deseada

entre el transmisor y el receptor. La cantidad de información por símbolo generada por

una fuente viene medida por su entropía. Suponiendo que una fuente discreta es capaz

de generar un total de M valores distintos, cada uno de ellos con probabilidad pi, su

entropía se define como:

La entropía proporciona el límite inferior del número de bits por muestra necesarios
para transmitir la información de la fuente sin pérdidas, y es la tasa de salida hacia la

que debe tender un buen codificador de fuente. Cuando la tasa de transmisión es mucho

mayor que la entropía de la fuente, entonces es posible que algunas de las propiedades

de las modulaciones (por ejemplo, su anchura espectral) no sean idénticas a los valores

teóricos, lo que puede dar lugar a interferencias con otros sistemas de comunicaciones.

La codificación de fuente se encarga de eliminar dicha correlación de tal forma que los

bits que aparecen a su salida están incorrelados, y todas las cadenas de cualquier

longitud son igualmente probables, obteniéndose un espectro similar al teórico y una

cadena de bits a transmitir lo más corta posible.

Una de las formas más habituales de realizar la codificación de fuente es la codificación

de Huffman, en la que a cada símbolo o cadena de bits de idéntica longitud se le asigna

otra cadena de bits de longitud variable. Cuanto mayor sea la probabilidad de aparición

de un símbolo (o cadena de bits) menor será la longitud de la cadena asignada, de tal

forma que la longitud media de las cadenas resultantes sea menor que la de las cadenas

de bits originales. La ventaja de este tipo de codificadores es que se pueden ilustrar de

manera sencilla mediante un ejemplo.

2.- Explicar ¿Qué es un código de longitud variable?

Se conoce como código de longitud variable (o varchar) en la teoría de la información a un código


en donde su ancho de palabra es variable de longitud, es decir, al codificar el abecedario no es
necesario hacerlo con el mismo número de bits cada letra, ya que en el lenguaje español, es
mucho más probable que se encuentre una vocal, por ejemplo "a", que la letra "k", entonces para
hacer una codificación de reducción de espacio o código de compresión, la letra "a" se codifica con
un menor número de bits, por ejemplo 2 bits "01", y la letra "k" se codifique con 8 bits, por decir
un ejemplo "01001010". Entonces como sabemos que es más probable encontrar la letra "a" se
codificara con un número mínimo de bits que la letra "k".

Si seguimos haciendo una codificación con respecto a las demás letras, encontraremos que hay
algunas que se utilizan menos que otras, y por lo tanto, tenemos que analizar la probabilidad de
ocurrencia de cada letra, para codificarlo con más o menos bits. Pero hay que tener cuidado que
sea un código prefijo, es decir, que ninguna palabra del código constituye la palabra de otro código
y no presentar ambigüedad en la decodificación.

3.- ¿Por qué es importante tener un esquema de codificación único?

Es importante hacer una clara distinción entre los conceptos "set de caracteres" y "codificación de
caracteres".

Un set de caracteres o repertorio comprende el grupo de caracteres que se utilizarían para una
finalidad específica, ya sea los necesarios para el soporte de los idiomas de Europa Occidental en
la computadora, o los que aprendería en el colegio un niño chino en tercer grado (sin relación con
la computadora).

Un set de caracteres codificados es un grupo de caracteres en el que se ha asignado un número


exclusivo a cada carácter. Las unidades de un set de caracteres codificados se conocen como
puntos de código. El valor de un punto de código representa la ubicación de un carácter en el set
de caracteres codificados. Por ejemplo, el punto de código para la letra á en el set de caracteres
codificados Unicode es 225 en notación decimal, o E1 en notación hexadecimal. (Tenga presente
que la notación hexadecimal generalmente se utiliza para hacer referencia a puntos de código y es
la que se usará aquí). A Unicode code point can have a value between 0x0000 and 0x10FFFF.

En algunos casos, los sets de caracteres codificados se denominan páginas codificadas.

La codificación de caracteres refleja la manera en la que el set de caracteres codificados se


convierte a bytes para su procesamiento en la computadora. En la siguiente imagen se muestra
cómo se convierten a secuencias de bytes en memoria los caracteres y puntos de código del
sistema de escritura Tifinagh (Berber) mediante la codificación UTF-8. Los valores de los puntos de
código para cada carácter se enumeran inmediatamente debajo del glifo (es decir, la
representación visual) correspondiente a dicho carácter en la parte superior del diagrama. Las
flechas indican de qué manera estos elementos se convierten en secuencias de bytes, donde cada
byte está representado por un número hexadecimal de dos dígitos. Observe cómo los puntos de
código de Tifinagh se convierten en tres bytes mientras que el signo de exclamación se convierte
en un solo byte.
4.- ¿Cuáles son las ventajas de un código libre de prefijo?

La ventaja principal del software open source es la posibilidad de compartir, modificar y estudiar el
código fuente de un sistema informático. Por otro lado, el código abierto promueve la
colaboración entre usuarios. Esta característica supone el desarrollo rápido y variado de multitud
de herramientas. Por ejemplo, los usuarios de un determinado programa pueden realizar
personalizaciones, solventar fallos o mejorar las funcionalidades básicas gracias a los miembros de
las comunidades, los foros, etc.

El software open source pertenece a la comunidad, por lo que su desarrollo y actualizaciones


dependen principalmente de ellos, ampliando así la confianza en la continuidad del programa.

5.- ¿Cuáles son las características que debe cumplir un código óptimo?

Me gusta que mi código sea elegante y eficaz. La lógica debe ser directa para evitar errores
ocultos, las dependencias deben de ser mínimas para facilitar el mantenimiento, el procesamiento
de errores completo y sujeto a una estrategia articulada, y el rendimiento debe ser óptimo para
que los usuarios no tiendan a estropear el código con optimizaciones sin sentido. El código limpio
hace bien una cosa.

las características que debe cumplir el código limpio son las siguientes:

 Legible
 Simple
 Elegancia
 Eficaz
 Óptimo
 Con pruebas

6.- ¿Cuál es el principio de codificación de los códigos de longitud variable?

Se conoce como código de longitud variable (o varchar) en la teoría de la información a un código


en donde su ancho de palabra es variable de longitud, es decir, al codificar el abecedario no es
necesario hacerlo con el mismo número de bits cada letra, ya que en el lenguaje español, es
mucho más probable que se encuentre una vocal, por ejemplo "a", que la letra "k", entonces para
hacer una codificación de reducción de espacio o código de compresión, la letra "a" se codifica con
un menor número de bits, por ejemplo 2 bits "01", y la letra "k" se codifique con 8 bits, por decir
un ejemplo "01001010". Entonces como sabemos que es más probable encontrar la letra "a" se
codificara con un número mínimo de bits que la letra "k".
Si seguimos haciendo una codificación con respecto a las demás letras, encontraremos que hay
algunas que se utilizan menos que otras, y por lo tanto, tenemos que analizar la probabilidad de
ocurrencia de cada letra, para codificarlo con más o menos bits. Pero hay que tener cuidado que
sea un código prefijo, es decir, que ninguna palabra del código constituye la palabra de otro código
y no presentar ambigüedad en la decodificación.

7.- ¿Qué es la eficiencia de codificación?

Un buen código de fuente reduce la cantidad de bits que se requiere para enviar la información. La
codificación de fuente consigue que el canal reciba la información con la mayor redundancia
binaria posible, obteniendo así mayor eficiencia en términos de ancho de banda v/s velocidad de
transmisión.

8.- ¿Qué es la redundancia de codificación?

La redundancia es la información superflua o innecesaria para interpretar el significado de los


datos originales. La introducción de redundancia en la codificación tiene como finalidad mejorar la
fiabilidad de la transmisión.

¿A qué se refiere la longitud media de un código de la fuente?

Supongamos que L es la longitud media de un código de la fuente S, L no puede ser inferior a

9.- ¿Cuál es el significado de la longitud promedio de las palabras código?

Longitud media de un código de la fuente S, L no puede ser inferior a H(S). Según esto, se define el
rendimiento de un código.

La longitud media de un código se define como la sumatoria de los productos entre las
probabilidades y longitudes de cada símbolo.
CONCLUSIONES

Huffman es una manera de lograr comprensión de la información sin perdidas de


manera que la información enviada puede llegar completa

Se tiene que conocer inicialmente las frecuencias de cada carácter en el archivo y


ordenar para poder generar el árbol binario que nos ayuda a generarlas claves de
cada carácter.

Galicia Rojas Ulises Alberto

La codificación de huffman es útil para la codificación de las palabras y ponerlas en


binario ya que el árbol que se forma para la codificación binario

Los resultados de la codificación en algunos casos son diferentes dependiendo del


recorrido que se use para el árbol, pero existen coincidencia en algunas letras que
es el mismo resultado en binario.

Méndez Ruiz Jorge Yatzar

Para la realización de esta práctica fue necesario investigar a fondo el


funcionamiento del algoritmo de Huffman y buscar diferentes librerías que nos
ayudarán a desarrollar el programa con la calidad que esperábamos.

Este es un algoritmo que es útil para la codificación de datos si se requiere tener un


ahorro de memoria. Se puede notar como aumenta la eficiencia, y como los bits
disminuyeron mucho, en comparación a los que se usarían realmente si
consideramos a cada char como un byte.

Mejía Cortes Abraham

También podría gustarte