Está en la página 1de 20

Matemática Computacional

MA475
Unidad 2: Teoría de grafos y redes
• Árboles binarios
• Algoritmo de Huffman
• Compresión de datos
Logro de la sesión

Al finalizar la sesión, el estudiante conoce los


conceptos fundamentales de árboles binarios y la
compresión de datos; además codifica caracteres o
cadenas y decodifica cadenas binarias aplicando el
algoritmo de Huffman.
Bibliografía
Bibliografía textos de consulta.
• Profesores UPC – Libro digital – Compresión de datos.
• Johnsonbaugh, R. (2005). Matemáticas Discretas. Pearson
Educación. Revisar páginas desde 379 hasta 386.

Bibliografía Multimedia

Huffman 1 Huffman 2

Huffman 3
Introducción
Se creó en 1951 por David Huffman y se utiliza para comprimir archivos sin pérdida de
información al momento de hacer la comprensión de información.
Terminología y ejemplo
• Nodo padre: Se le llama así al nodo predecesor de
un elemento.
• Nodo hijo: Es el nodo sucesor de un elemento.
• Hermanos: Nodos que tienen el mismo nodo padre.
• Nodo hoja: Aquel nodo que no tiene hijos.
Padre de G:
A Padre de A: NO TIENE
Nodo padre de F y G

B C Hijos de A:
F y G son nodos hijos de C
F y G son hermanos Hijos de C:
D E F G

Hijos de F: NO TIENE
K
H
Hojas: 5

D, H, F y K son nodos hojas


Hermano de B:
Algoritmo de Huffman

Las computadoras usan números binarios y por ende dígitos binarios en lugar de decimales.
La palabra bit es un diminutivo de digito binario “Binari digIT”. Los bits solos tienen dos
posibles valores: 0 o 1.

Con 8 bits en un byte, uno puede representar 256 valores en un rango del 0 al 255 que son
los ASCII

H o l a m u n d o

Hola mundo Equivale a 72 111 108 97 32 109 117 110 100 111 usando ASCII

En 1951, a David Huffman encontró uno de los códigos binarios más eficientes para
almacenar datos usando árboles binarios (a lo más dos hijos).

6
ASCII y su codificación
Si consideramos la cadena ‘bom esse bombom’ usando codificación ASCII (8 bits por
caracter), los 15 caracteres de la cadena usan 120 bits tal como se muestra en la tabla.
Caracter ASCII Binario
b 98 0110 0010
o 111 0110 1111
m 109 0110 1101
e 101 0110 0101
s 115 0111 0011
Espacio 32 0010 0000
La cadena ‘bom esse bombom’ es escrito numéricamente usando ASCII como:
98 111 109 32 101 115 115 101 32 98 111 109 98 111 109
En binario sería como:
01100010 - 01101111 - 01101101 - 00100000 - 01100101 – 0111-0011 – 01110011-
01100101 - 00100000 - 01100010 – 01101111- 01101101 – 01100010- 01101111-
01101101.
La idea básica de la codificación de Huffman es: Usar el menor número de bits para
representar caracteres con mayor frecuencia.
Algoritmo de Huffman
El algoritmo de Huffman es código de longitud variable, en el que la longitud de cada
código depende de la frecuencia (absoluta o relativa) de aparición de cada símbolo en
un texto; cuanto mas frecuente sea un símbolo, su código asociado será mas corto.

El algoritmo de construcción del árbol puede resumirse así:


1.- Crear un nodo hoja para cada símbolo, asociando un peso según su frecuencia de
aparición e insertarlo en la lista ordenada ascendentemente.
2.- Mientras haya mas de un nodo en la lista:
a) Eliminar de la lista los dos nodos con menor frecuencia.
b) Crear un nuevo nodo interno que enlace a los nodos anteriores, asignándole
como peso la suma de los pesos de los nodos hijos y etiquetamos la arista del
nodo derecho con 1 y del nodo izquierdo con 0.
c) Insertar el nuevo nodo en la lista, (en el lugar que le corresponda según el peso).
3.- El nodo que quede es el nodo raíz del árbol.
Ejemplo 1
Se tiene una cierta frase en la que los símbolos tienen las frecuencias relativas siguientes:

A B C D E F
0,08 0,10 0,12 0,15 0,20 0,35

a. Use el algoritmo de Huffman para codificar los símbolos con las frecuencias dadas.
b. ¿Cuál es la cantidad de bits usada para codificar cada caracter?
Resolución 1

10
Resolución 1

La codificación según el árbol obtenido será:


A B C D E F
000 001 100 101 01 11
Problema de compresión de datos
Use el algoritmo de Huffman para codificar la cadena tres tristes tigres y determine la
cantidad de bits usada para codificar cada carácter.
¿De qué trata el problema? El problema trata de sobre el uso del algoritmo de
Dimensiones Huffman para codificar la cadena tres tristes tigres.
Interpretación ¿Qué pide el problema? Nos pide que determinemos la cantidad de bits
Describe datos e información numérica utilizada para codificar cada carácter en la codificación resultante
pertinente en diversos formatos, para definir
una situación problemática en contexto real. Datos relevantes del problema:
La cadena tres tristes tigres

𝑓𝑖 =frecuencia absoluta (frecuencia de aparición) 𝑓𝑖 =∈ 𝑍 ∧ 𝑓𝑖 ≥ 0


Dimensiones
Contamos y asignamos la frecuencia de aparición a cada carácter de la cadena.
Representación t :4 r:3 e:3 s:4 ’ ’:2 i:2 g:1
Representa de ser necesario todas las
operaciones relacionadas con la situación Ordenemos de menor a mayor los caracteres según su frecuencia de aparición.
problemática en un contexto real. Define la
variable , restricciones y unidades.
g i r e t s
1 2 2 3 3 4 4
Problema de compresión de datos
Use el algoritmo de Huffman para codificar la cadena tres tristes tigres y determine la
cantidad de bits usada para codificar cada carácter.

Dimensiones
g i r e t s
1 2 2 3 3 4 4
Cálculo
Efectúa de forma completa la operación
matemática y/o estadística seleccionada, para 1 2 2 3 3 4 4
resolver la situación problemática en un
contexto real.

𝑔 𝑒𝑠𝑝 𝑖 𝑟 𝑒 𝑡 𝑠
2 3 3 3 4 4

𝑖 𝑟 𝑒 𝑡 𝑠
𝑔 𝑒𝑠𝑝

3 3 4 4 5
Nota: Si un subárbol con el mismo peso
de un vértice (carácter), el subárbol se
𝑟 𝑒 𝑡 𝑠
coloca antes del vértice.
𝑖
𝑔 𝑒𝑠𝑝
Problema de compresión de datos
Use el algoritmo de Huffman para codificar la cadena tres tristes tigres y determine la
cantidad de bits usada para codificar cada carácter.

Dimensiones
g i r e t s
1 2 2 3 3 4 4
Cálculo
Efectúa de forma completa la operación
matemática y/o estadística seleccionada, para
resolver la situación problemática en un 4 4 5 6
contexto real.

𝑡 𝑠
𝑖 𝑟 𝑒
𝑔 𝑒𝑠𝑝

5 6 8

𝑖 𝑟 𝑒 𝑡 𝑠
𝑔 𝑒𝑠𝑝
Problema de compresión de datos
Use el algoritmo de Huffman para codificar la cadena tres tristes tigres y determine la
cantidad de bits usada para codificar cada carácter.

Dimensiones
g i r e t s
1 2 2 3 3 4 4
Cálculo
Efectúa de forma completa la operación
matemática y/o estadística seleccionada, para 8 11
resolver la situación problemática en un
contexto real.

𝑡 𝑠
𝑖 𝑟 𝑒
19 𝑔 𝑒𝑠𝑝

𝑡 𝑠
𝑖 𝑟 𝑒
𝑔 𝑒𝑠𝑝
Problema de compresión de datos
Use el algoritmo de Huffman para codificar la cadena tres tristes tigres y determine la
cantidad de bits usada para codificar cada carácter.
Frecuencia Código de Número de
Carácter
Dimensiones absoluta Huffman bits
t 4 00 8
Análisis y argumentación r 3 110 9
Sustenta el resultado del cálculo e 3 111 9
relacionándolo con la situación problemática
s 4 01 8
i 2 100 6
g 1 1010 4
Espacio 2 1011 8
TOTAL 19 52

Número de bits utilizando el ASCII tradicional: 19(8) = 152


Número de bits utilizando los códigos de Huffman: 52
52
El número de bits utilizados se ha reducido al: × 100% =
152
𝟑𝟒, 𝟐𝟏%
Decodificación
Si al codificar obtenemos el árbol binario de abajo, el equivalente de la secuencia
1101001 sería

11 01 001
F E B
Ejemplo 3
Si al codificar obtenemos el árbol binario abajo mostrado, ¿cuál es el equivalente de la
secuencia 00101100000?
Ejemplo 4
Si al codificar obtenemos el árbol binario abajo mostrado, ¿cuál es el equivalente de la
secuencia 1110011101001111 ?
Preguntas
Si tienes dudas sobre los temas, consulte con el
profesor del curso mediante los medios (correo,
Workplace, etc.) proporcionados por él mismo.

Continúa con las actividades semanales


propuestas en el aula virtual:
❑ Resolución de ejercicios propuestos
❑ Sesión práctica AAD – S7
❑ CV2 remedial
20

También podría gustarte