You are on page 1of 31

Arbol de Huffman

Arbol de Huffman (Algoritmo)


El algoritmo de Huffman es un algoritmo para la
construccin de cdigos de Huffman, desarrollado por
David A. Huffman en 1952 y descrito en A Method for
the Construction of Minimum-Redundancy Codes.
Permite la compresin y encriptacin de mensajes de
entrada, utilizando un mnimo de bits para ello.
El algoritmo que crea el rbol de Huffman, que llamado tambin
algoritmo voraz

La solucin se obtiene aplicando las siguientes fases:


Fase 1
Crear un vector de frecuencias de aparicin 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
3

Vector de Frecuencias

H 1

O 1

L 1

P 2

A 3

NULL

H.1
1
0.1
1
L.1
1
.11
P.2
2
A.3
4

Algoritmo de Huffman

H
H 1

O
O 1

A
L 1

P 2

NUL
L
H

A 3

NULL

Algoritmo de Huffman

H
L 1

O
1

A
P 2

P
n
1

P
A 3

NULL

n1
H 1

O 1

Algoritmo de Huffman

H
L 1

O
1

P
n
1

P 2

H 1

P
A 3

O 1

A
NULL

Algoritmo de Huffman

P
n
1

P 2

H 1

P
A 3

A
NULL

O 1

n2

Algoritmo de Huffman

L
n
1

P 2

H 1

A
n
2

O 1

L 1

A 3

NULL

n2

Algoritmo de Huffman

L
n
1

P 2

H 1

A
n
2

O 1

L 1

A 3

NULL

Algoritmo de Huffman

n
3

P
n
2

A
n
3

A 3

4
L 1
n
1

P 2

n
1

P 2

2
H 1

H 1

NULL

O 1

O 1

Algoritmo de Huffman

n
4

n
2

L 1

P
n
3

A 3

A
n
4

n
1

P 2

H 1
1

n
2

O 1

L 1

NULL

A 3

Arbol de Huffman

O
n
3

n
4

n
1

P 2

H 1

n
2

O 1

L 1

NULL

A 3

Arbol de Huffman
n
5

n
3

NULL

n
4

n
1

P 2

H 1

n
2

O 1

L 1

A 3

Fase 3
Identificando 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

Vector de Frecuencias
n
5

0
n
3

NULL

1
n
4

P 2

n
1

0
H 1

0
n
2

1
O 1

0
L 1

A 3

1
1

Algoritmo de Huffman

Fase 4
Crear una tabla de
codificacin a partir del
rbol de codificacin.

010

011

100

101

00

11

Algoritmo de Huffman

Fase 5
Crear las secuencia codificada segn el mensaje y la
tabla de codificacin

010 011 100 11

00

11

00

11

Operaciones con los rboles de


Huffman
Insertar Nodos en el rbol
Eliminar Nodos
Buscar Nodo

ARBOL MONTON

rbol binario completo


Un rbol binario completo es un rbol binario de
profundidad K que tiene todos los nodos posibles hasta el
penltimo nivel (profundidad K-1), y donde los elementos
del ltimo nivel estn 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 estn situados de izquierda a
derecha sin dejar huecos libres.

rbol binario completo

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
penltimo nivel.

Arboles de Montn 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 aqul 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 mxima (mnima).

Arboles de Montn o Heap


Existen tres categoras 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 delos valoresde las llaves de sus
hijos (si tiene alguno).
Un max heap es un rbol binario completo que es tambin un max tree.
Un min heap es un rbol binario completo que es tambin un min tree.
De la definicin se sabe que la llavedelroot de un min tree es la menor
llave del rbol,mientras quela 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 Montn o Heap


Ejemplo de un Max Heap

El nodo padre siempre ser


mayor de sus descendientes
El nodo raz contiene el valor
mas alto

Arboles de Montn 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.

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 bsicas de un
heap son:
Creacin de un heap vaco
Insercin de un nuevo elemento
en la estructura heap.
Eliminacin del elemento ms
grande del heap.

Propiedades
Un heap tiene las siguientes tres propiedades:

Es completo, esto es, las hojas de un rbol estn en a lo mximo dos


niveles adyacentes, y las hojas en el ltimo nivel estn en la posicin
ms a la izquierda
Cada 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

Ejercicio 1
Utilizando el algoritmo de Huffman, construir el rbol y
la tabla de cdigos correspondiente a cada letra de la
palabra

MATEMATICAME
NTE

Ejercicio 2
Dados los siguientes nodos, verificar si se puede construir un arbol tipo heap-min y
un rbol tipo heap-max
1
2

1
0

2
0

5
0

6
4

4
3

34

5
4

6
7

23

Ejercicio: Arboles ABB


1. Construir un algoritmo que permita insertar nodos en un rbol ABB

Considerar si el rbol esta vaco


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
segn el tipo de recorrido

2. Construir un algoritmo para obtener la altura del rbol y el peso del


rbol
3. Implementar la opcin 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

You might also like