1. Sección 9.2
Aplicaciones de los Árboles
Tomado de Matemáticas Discretas y sus Aplicaciones. Rosen
Esteban Andrés Díaz Mina
2. Introducción
Se presentan dos problemas que se pueden
estudiar utilizando árboles:
1. ¿Cómo se pueden almacenar elementos en
una lista de manera que todos los elementos
puedan ser localizados fácilmente?
2. ¿Cómo se pueden codificar de manera
eficiente un conjunto de caracteres mediante
una cadena de bits?
3. Árboles Binarios de Búsqueda
La búsqueda de elementos en una lista es una de
las tareas más importantes que surgen en el área
de la computación. Los árboles binarios de
búsqueda definen un algoritmo que encuentran los
elementos de manera eficiente.
4. Definición 1
Un árbol binario de búsqueda es un árbol binario
donde cada vértice está etiquetado con una clave, de
modo que la clave de un vértice es mayor que la de
todos los vértices de su subárbol izquierdo y menor
que la de todos los vértices de su subárbol derecho.
5. Ejemplo 1
Construya un árbol binario de búsqueda para las
siguientes palabras.
mathematics,
physics,
geography,
zoology,
meteorology,
geology,
psychology y
chemistry.
7. Códigos instantáneos
Considere el problema de codificar las letras del
alfabeto mediante cadenas de bits. Podemos
representar cada letra utilizando una cadena de
bits de longitud cinco, puesto que sólo hay 27
letras y hay 32 cadenas de longitud cinco.
El número total de bits utilizados para codificar
los datos es cinco veces el número de
caracteres en el texto si cada carácter se
codifica mediante cinco bits.
8. Códigos instantáneos
¿Es posible encontrar una forma de codificar las
letras de modo que utilice menos bits? De este
modo estaríamos ahorrando espacios en memoria y
reduciendo el tiempo de transmisión de datos.
Para codificar las letras vamos a utilizar cadenas de
bits de longitud variable. Las letras que aparecen
con mayor frecuencia deberán codificarse utilizando
cadenas de bits más cortas, mientras que las letras
menos comunes se codificarán mediante cadenas
más largas. Cuando las letras se codifican
utilizando cadenas de longitud variable, se debe
establecer algún método para determinar cuándo
comienza y cuándo termina cada cadena de bits.
9. Códigos instantáneos
Por ejemplo, si e se codificara por 0, a por 1 y s
por 01, entonces la cadena 0101 podría
corresponder a sea, eas, eaea, ss.
Una manera de asegurarse de que ninguna
cadena de bits se corresponde con más de una
secuencia de caracteres consiste en codificar
las letras de manera que cada cadena de bits
asociada a una letra nunca aparezca al
principio de la cadena de bits de otra letra.
Los códigos con esta propiedad se llaman
códigos instantáneos.
10. Códigos instantáneos
Un código instantáneo puede representarse
utilizando un árbol binario, donde los
caracteres son las etiquetas de las hojas del
árbol.
Las aristas del árbol están etiquetadas de modo
que a la arista que va al hijo izquierdo se le
asigna 0 y a la que va al hijo derecho se le
asigna 1.
La cadena de bits que codifica cada carácter es
la sucesión de etiquetas de las aristas del único
camino de la raíz a la hoja que tiene ese
carácter como etiqueta.
11. Códigos instantáneos
Por ejemplo, el siguiente árbol
representa la codificación de e
por 0, a por 10, t por 110, n
por 1110 y s por 1111.
Los árboles que representan
códigos se pueden utilizar
para descodificar cadenas de
bits. Por ejemplo, descodificar
la cadena 111110111010.
12. Códigos de Huffman
Este algoritmo toma como datos de entrada las
frecuencias de los símbolos de una cadena y
devuelve un código instantáneo que codifica la
cadena de bits utilizando la menor cantidad de
bits, de entre todos los posibles códigos
instantáneos binarios para este conjunto de
símbolos. Este algoritmo, conocido como
codificación de Huffman, fue desarrollado por
David Huffman en 1951.
13. Códigos de Huffman
La codificación de Huffman es un algoritmo
esencial en la compresión de datos, el área de
conocimiento que se dedica a reducir el número
de bits necesarios para representar la
información.
La codificación de Huffman se utiliza en
numerosas ocasiones para comprimir cadenas
de bits que representan texto y también
desempeña un papel fundamental en la
compresión de archivos de audio y de
imágenes.
14. Códigos de Huffman
Se tiene un archivo con 100 caracteres que se
desea compactar. Las frecuencias de aparición
de caracteres en el archivo son las siguientes:
a b c d e f
Frecuencia 45 13 12 16 9 5
15. Códigos de Huffman
Puede usarse un código de longitud fija (de 3
bits). El archivo requeriría 300 bits.
a b c d e f
Código de Longitud Fija 000 001 010 011 100 101
16. Códigos de Huffman
Usando un código de Longitud Variable
obtenemos:
Este código ahorra más del 25% (requiere 224
bits en lugar de 300).
a b c d e f
Código de Longitud Variable 0 101 100 011 1101 1100