Arbol de Huffman
Arbol de Huffman (Algoritmo)• El algoritmo de Huffman es un algoritmo para la construcción de
códigos de Huffman, desarrollado por David A. Huffman en 1952 y descrito en “A Method for the Construction of Minimum-Redundancy Codes”.
• Permite la compresión y encriptación de mensajes de entrada, utilizando un mínimo de bits para ello.
• El algoritmo que crea el árbol de Huffman, que llamado también algoritmo voraz
3
La solución se obtiene aplicando las siguientes fases:Fase 1Crear un vector de frecuencias de aparición de cada byte en el archivo de entrada.Ejm. • Se ingresa el texto HOLA PAPA• H, O,L se repite una vez• P se repite dos veces• A se repite tres veces
Vector de Frecuencias
H 1O 1L 1 P 2 A 30.11
L.11
.11
P.22
A.34
1H.11
H O L A P A P A
NULL
H O1 1
H O L A
NULL
P A P A
H 1O 1L 1 P 2 A 31 NULL
2
Algoritmo de Huffman
H O1 1
H O L A
n1
P A P A
1L 1 P 2 A 3 NULL
2
n1 2
H 1O1
Algoritmo de Huffman
H O L A P A P A
1L 1 P 2 A 3 NULLn1 2
H 1O1
Algoritmo de Huffman
H O L A P A P A
P 2 A 3 NULLn1 2
H 1O1
L 1 1
n2 2
Algoritmo de Huffman
H O L A P A P A
P 2 A 3 NULLn1 2
H 1O1
L 1 1
n2 2
n2 2
L 11
Algoritmo de Huffman
H O L A P A P A
P 2 A 3 NULLn1 2
H 1O1
n2 2
L 11
Algoritmo de Huffman
H O L A P A P A
P 2
NULL
n1 2
H 1O1
n2 2
L 11
n3 4A 3 n3 4
P 2 n1 2
H 1O1
Algoritmo de Huffman
Algoritmo de HuffmanH O L A P A P A
NULL
n2 2
L 11
n4 5
A 3P 2 n1 2
H 1O1
n3 4
n2 2
L 11
n4 5
A 3
Arbol de HuffmanH O L A P A P A
NULL
n2 2
L 11
n4 5
A 3P 2 n1 2
H 1O1
n3 4
Arbol de Huffman
NULL
n2 2
L 11
n4 5
A 3P 2 n1 2
H 1O1
n3 4
n5 9
Fase 3Identificando los caminos de los nodos• Colocar 0 a la rama izquierda• Colocar 1 a la rama derecha• Indicar la longitud de cada nodo que contiene una letra
10
Vector de Frecuencias
NULL
n2 2
L 11
n4 5
A 3P 2 n1 2
H 1O1
n3 4
n5 910
10 0
0 0
1
11
Algoritmo de Huffman
H
O
1L
1
P 2
A 3
H O L A P A P A
1
1
010
011
100
101
00
11
Fase 4Crear una tabla de codificación a partir del árbol de codificación.
Algoritmo de Huffman
H O L A P A P A
010 011 100 0011 11 00 11
Fase 5Crear las secuencia codificada según el mensaje y la tabla de codificación
Operaciones con los árboles de Huffman
• Insertar Nodos en el árbol• Eliminar Nodos• Buscar Nodo
ARBOL MONTON
Árbol binario completoUn árbol binario completo es un árbol binario de profundidad K que tiene todos los nodos posibles hasta el penúltimo nivel (profundidad K-1), y donde los elementos del último nivel están colocados de izquierda a derecha sin dejar huecos entre ellos.
Ejemplo de árbol binario completo de profundidad K=3, donde puede verse que está lleno hasta el nivel 2, y que los 5 nodos del último nivel están situados de izquierda a derecha sin dejar huecos libres.
Ejemplo de árbol binario no completo de profundidad K=4, ya que en el último nivel los nodos no se han insertado sin dejar huecos.
Otro árbol binario no completo, ya que no está lleno hasta el penúltimo nivel.
Árbol binario completo
Arboles de Montón o Heap• La estructura heap es frecuentemente usada para implementar colas
de prioridad. • En este tipo de colas, el elemento a ser eliminado (borrados) es aquél
que tiene mayor (o menor) prioridad. • En cualquier momento, un elemento con una prioridad arbitraria
puede ser insertado en la cola. • Una estructura de datos que soporta estas dos operaciones es la cola
de prioridad máxima (mínima).
• Existen tres categorías de un heap: max heap, min heap y min-max heap.
Un max (min) tree es un árbol en el cual el valor de la llave de cada nodo no es menor (mayor) que la de los valores de las llaves de sus hijos (si tiene alguno).
• Un max heap es un árbol binario completo que es también un max tree. • Un min heap es un árbol binario completo que es también un min tree.• De la definición se sabe que la llave del root de un min tree es la menor llave
del árbol, mientras que la del root de un max tree es la mayor.• Si la llave (key) de cada nodo es mayor que o igual a las llaves de sus hijos,
entonces la estructura heap es llamada max heap.
Arboles de Montón o Heap
• Ejemplo de un Max Heap
• El nodo padre siempre será mayor de sus descendientes
• El nodo raíz contiene el valor mas alto
Arboles de Montón o Heap
• Si la llave (key) de cada nodo es menor que o igual a las llaves de sus hijos, entonces la estructura heap es llamada min heap.
Arboles de Montón o Heap
• En una estructura min-max heap, un nivel satisface la propiedad min heap, y el siguiente nivel inferior satisface la propiedad max heap, alternadamente.
Las operaciones básicas de un heap son:• Creación de un heap vacío• Inserción de un nuevo elemento en la
estructura heap.• Eliminación del elemento más grande
del heap.
PropiedadesUn heap tiene las siguientes tres propiedades:
Es completo, esto es, las hojas de un árbol están en a lo máximo dos niveles adyacentes, y las hojas en el último nivel están en la posición más a la izquierdaCada nivel en un heap es llenado en orden de izquierda a derecha.Está parcialmente ordenado, esto es, un valor asignado, llamado key del elemento almacenado en cada nodo (llamado parent), es menor que (mayor que) o igual a las llaves almacenadas en los hijos de los nodos izquierdo y derecho.
Ejercicios
MATEMATICAMENTE
• Utilizando el algoritmo de Huffman, construir el árbol y la tabla de códigos correspondiente a cada letra de la palabra
Ejercicio 1
Ejercicio 2Dados los siguientes nodos, verificar si se puede construir un arbol tipo heap-min y un árbol tipo heap-max
12 10 4 20 50 9 64 43 34 54 67 23
Ejercicio: Arboles ABB1. Construir un algoritmo que permita insertar nodos en un árbol ABB
• Considerar si el árbol esta vacío• Dado un nodo, registrarlo en el lugar adecuado del árbol• No permitir ingresar un nodo que ya exista• Permita hacer el recorrido Pre, In y Post Orden. Mostrar los valores de los nodos
según el tipo de recorrido
2. Construir un algoritmo para obtener la altura del árbol y el peso del árbol3. Implementar la opción de eliminar un nodo en el árbol creado en el
punto 1 que permita realizar lo siguiente.• Eliminar un nodo hoja• Eliminar un nodo con un hijo