31
Arbol de Huffman

Sesion 11 Arbol Hoffman

Embed Size (px)

DESCRIPTION

hoffman

Citation preview

Page 1: Sesion 11 Arbol Hoffman

Arbol de Huffman

Page 2: Sesion 11 Arbol Hoffman

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

Page 3: Sesion 11 Arbol Hoffman

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

Page 4: Sesion 11 Arbol Hoffman

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

Page 5: Sesion 11 Arbol Hoffman

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

Page 6: Sesion 11 Arbol Hoffman

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

Page 7: Sesion 11 Arbol Hoffman

H O L A P A P A

1L 1 P 2 A 3 NULLn1 2

H 1O1

Algoritmo de Huffman

Page 8: Sesion 11 Arbol Hoffman

H O L A P A P A

P 2 A 3 NULLn1 2

H 1O1

L 1 1

n2 2

Algoritmo de Huffman

Page 9: Sesion 11 Arbol Hoffman

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

Page 10: Sesion 11 Arbol Hoffman

H O L A P A P A

P 2 A 3 NULLn1 2

H 1O1

n2 2

L 11

Algoritmo de Huffman

Page 11: Sesion 11 Arbol Hoffman

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

Page 12: Sesion 11 Arbol Hoffman

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

Page 13: Sesion 11 Arbol Hoffman

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

Page 14: Sesion 11 Arbol Hoffman

Arbol de Huffman

NULL

n2 2

L 11

n4 5

A 3P 2 n1 2

H 1O1

n3 4

n5 9

Page 15: Sesion 11 Arbol Hoffman

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

Page 16: Sesion 11 Arbol Hoffman

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

Page 17: Sesion 11 Arbol Hoffman

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.

Page 18: Sesion 11 Arbol Hoffman

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

Page 19: Sesion 11 Arbol Hoffman

Operaciones con los árboles de Huffman

• Insertar Nodos en el árbol• Eliminar Nodos• Buscar Nodo

ARBOL MONTON

Page 20: Sesion 11 Arbol Hoffman

Á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.

Page 21: Sesion 11 Arbol Hoffman

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

Page 22: Sesion 11 Arbol Hoffman

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).

Page 23: Sesion 11 Arbol Hoffman

• 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

Page 24: Sesion 11 Arbol Hoffman

• 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

Page 25: Sesion 11 Arbol Hoffman

• 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

Page 26: Sesion 11 Arbol Hoffman

• 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.

Page 27: Sesion 11 Arbol Hoffman

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.

Page 28: Sesion 11 Arbol Hoffman

Ejercicios

Page 29: Sesion 11 Arbol Hoffman

MATEMATICAMENTE

• Utilizando el algoritmo de Huffman, construir el árbol y la tabla de códigos correspondiente a cada letra de la palabra

Ejercicio 1

Page 30: Sesion 11 Arbol Hoffman

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

Page 31: Sesion 11 Arbol Hoffman

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