You are on page 1of 14

Estructura de Datos Avanzadas

Conceptos y actividades correspondientes al segundo corte.

Instructor: M.C. Aremy Olaya Virrueta Gordillo. 5o. Cuatrimestre. Enero - Abril 2013.

Unidades de aprendizaje
2. rboles Binarios y rboles Ordenados
Conceptos preliminares. rbol Huffman a la medida. rbol AVL. rbol de bsqueda binario (analizador sintctico).

Conceptos Preliminares
Concepto de Arbol:
Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos. Una denicin recursiva: un rbol es una estructura que esta compuesta por un dato y varios rboles.

Relaciones entre nodos:

Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del rbol. Nodo padre: nodo que contiene un puntero al nodo actual.

Nota: Cada nodo slo puede ser apuntado por otro nodo, es decir, cada nodo slo tendr un padre.

Conceptos Preliminares
Posicin dentro del rbol:

Nodo raz: nodo que no tiene padre. Se usa para referirse al rbol. Nodo hoja: nodo que no tiene hijos. Nodo rama: nodos que no pertenecen a ninguna de las dos categoras anteriores.

Nota: Todos los nodos tienen el mismo nmero de punteros, es decir, se utiliza la misma estructura para todos los nodos del rbol.

Arbol Completo
No es necesario que todos los nodos hijos de un nodo concreto existan. Es decir, que pueden usarse todos, algunos o ninguno de los punteros de cada nodo. Un rbol en el que en cada nodo o bien todos o ninguno de los hijos existe, se llama rbol completo. Por lo tanto, un nodo cualquiera puede ser considerado como la raz de un rbol completo.

Conceptos Preliminares
Tamao del rbol:
Orden: es el nmero potencial de hijos que puede tener cada elemento de rbol. De este modo, un rbol en el que cada nodo puede apuntar a otros dos es de orden dos, si puede apuntar a tres ser de orden tres, etc. Grado: el nmero de hijos que tiene el elemento con ms hijos dentro del rbol. Nivel: se dene para cada elemento del rbol como la distancia a la raz, medida en nodos. El nivel de la raz es cero y el de sus hijos uno. Altura: la altura de un rbol se dene como el nivel del nodo de mayor nivel. Como cada nodo de un rbol puede considerarse a su vez como la raz de un rbol, tambin podemos hablar de altura de ramas.

Arbol Binario
Son rboles de orden dos con caractersticas especiales padre Datos hijo Para construir y recorren un rbol binario, es necesario aadir un puntero a cada nodo que apunte al nodo padre. De este modo, es posible avanzar en direccin a la raz, y no slo hacia las hojas. Es importante conservar siempre el nodo raz ya que es el nodo a partir del cual se desarrolla el rbol, si se pierde este nodo, se pierde el acceso a todo el rbol.

Actividad de Clase
Valor 5pts
Identicar las caractersticas principales del siguiente rbol.

Estas son: Nombre, nodo padre, nodo hijo, nodo raz, nodo rama, nodo hoja, orden, grado, nivel y altura.

Actividad de Clase

Resultado

Nombre: rbol A Padre(hijos): A(B,C,D); B(E,F); E(K); C(G); G(L,M); D(H,I,J); J(N,O); Raz: A Ramas: B, C, D, E, G, J. Hojas: F, K, L, M, H, I, N, O. Orden: 3. Grado: 3. Nivel: 3(K,L,M,N,O); 2(E,,F,G,H,I,J); 1(B,C,D); Altura: 3.

Arbol Huffman
Algoritmo
El algoritmo de Huffman es utilizado para compresin de informacin. Este algoritmo est basado en la idea de que algunos caracteres aparecen muchas ms veces que otros. Es especialmente eficaz en archivos de texto, donde ms de la mitad de los caracteres se repiten. Y entre los caracteres que aparecen, hay algunos que aparecen mucho ms que otros. Cada carcter se almacena en una secuencia de 8 bits (byte). Este algoritmo se encarga de asignar cdigos ms cortos a los caracteres que ms se repiten, y cdigos ms largos a los que menos se repiten.

Pasos:
Crear una tabla de frecuencias de aparicin de cada byte presente en el archivo de entrada. Crear el rbol ptimo de codificacin de Huffman a partir del vector de frecuencias. Crear la tabla de codificacin a partir del rbol de codificacin. Establecer la codificacin propiamente descrita.

Esto se implementa en un rbol binario.

Arbol Huffman
Ejemplo
mi mama me mima

Este texto ocupa 120 bits (15 bytes). Lo que propone el algoritmo de Huffman es lo siguiente: Paso 1: Contar cuantas veces aparece cada letra: m(6), i(2), espacio(3), a(3), e(1) (~ = espacio). Para construir la tabla de frecuencias. Paso 2: Remplazar varias veces las dos frecuencias menores con su suma hasta obtener una sucesin de dos elementos.
1, 2, 3, 3, 6 3, 3, 3, 6 3, 6, 6 3, 3, 3, 6 6, 3, 6 9, 6 Carcter Frecuencia e i a 1 2 3 3 6

~
m

Tabla de Frecuencias

6, 9

15

Registro de Remplazo

Arbol Huffman
15

Paso 3: Construir el rbol para lo cual es necesario establecer una convencin para colocar los bits, regularmente se utiliza 0 a la izquierda y 1 a la derecha. El rbol debe ser construido de forma tal que cada una de sus hojas corresponda a uno de lo caracteres implicados. Paso 4: Recorrer el rbol hasta las hojas para crear los cdigos binarios de los caracteres.
e i a 0011 0010 000 01 1 Cdigo

0 9 0 6 1 3 1 3 0 2

1 6

0 3

1 1

Arbol de Huffman

1.0010.01.1.000.1.000.01.1.0011.01.1.0010.1.000
Compresin
(33 bits es mucho menos que el original de 120 bits)

~
m

Arbol Huffman
Paso 5: Guardar el archivo. Deben incluir la estructura del rbol y el mensaje. Es necesario recorrer el rbol y anotar si el elemento es una hoja o un nodo. Cuando se encuentre una hoja deber anotarse el caracter que representa.
Regla: Al encontrar un nodo se escribir un 0 y para la hoja un 1 seguido de su valor. Un nodo llamar al elemento de su izquierda y despus al de su derecha. Finalmente volver al nodo que lo llam.

0001011000010101101001101100101100100000101101101 Cdigo del rbol 100100110001000011001101100101000 Mensaje Archivo comprimido

Arbol Huffman
15 0 9 0 6 1 3 1 3 0 2 1 6

Car. e i a

Binario
1100101 1101001 1100001 100000 1101101

Ascii 101 105 97 32 109

0 3

1 1

espacio

nodo: 0 0
15

0
9

0
6

1 01100001 0
3 3

1 01101001 1 01100101 1 00100000 1 01101101


2 1 3 6

hoja: 1 valor

0001011000010101101001101100101100100000101101101

Cdigo del rbol

Arbol Huffman
0001011000010101101001101100101100100000101101101 secuencia de bits (pseudo caracter) Cdigo del rbol: Encabezado

Convencin para comprimir y descomprimir Mensaje

100100110001000011001101100101000

Paso 6: Descomprimir el archivo. Consiste en armar el rbol a medida que se lee su descripcin, identicar el pseudo caracter y obtener el mensaje a partir de la clave.
0 1

0
15

0
9

0
6

1 01100001
3

..........

Armar el rbol

000 101100001 0 101101001 101101001

01100001 01101001 01101001

Actividad de Clase
10 Puntos
Construir un rbol de Huffman con su primer nombre y su primer apellido

Construir un rbol de huffman para la cadena formada por el primer nombre y los apellidos de cada alumno, respectivamente. Entregar la tabla de frecuencias, la tabla de reemplazos, la construccin del rbol y el cdigo del rbol. En una hoja separada entregar el archivo comprimido, cdigo del rbol mas mensaje. Intercambiar la segunda hoja para que otro compaero interprete el mensaje.

Arbol Huffman
25% rbol a la medida
Proporcionar hoja de desarrollo de la prctica y rbrica.

Construir un rbol de huffman para la cadena formada por el primer nombre y primer apellido de cada alumno, respectivamente. Deber entregar la tabla de frecuencias, la tabla de reemplazos, la construccin del rbol y la comprensin del archivo. Todo se entrega de manera escrita. Implementar en un programa computacional,

Arboles Ordenados
Concepto
Un rbol ordenado, en general, es aquel a partir del cual se puede obtener una secuencia ordenada siguiendo uno de los recorridos posibles del rbol: inorden, preorden o postorden.

Recorrido del rbol:


Inorden: En este tipo de recorrido, el valor del nodo se procesa antes de recorrer las ramas. Preorden: En este tipo de recorrido, el valor del nodo se procesa despus de recorrer la primera rama y antes de recorrer la ltima. Esto tiene ms sentido en el caso de rboles binarios. Postorden: En este tipo de recorrido, el valor del nodo se procesa despus de recorrer todas las ramas.

Arboles Ordenados
Ejemplo
A partir del rbol mostrado a la izquierda, especicar los recorridos posibles.

Inorden: A B E K F C G L M D H I J N O Preorden: K E B F A L G M C H D I N J O Postorden: K E F B L M G C H I N O J D A

Arboles Ordenados
Tipos:
Arboles binarios de bsqueda (ABB): son rboles de orden 2 que mantienen una secuencia ordenada si se recorren en inorden. Arboles AVL: son rboles binarios de bsqueda equilibrados, es decir, los niveles de cada rama para cualquier nodo no dieren en ms de 1. Arboles perfectamente equilibrados: son rboles binarios de bsqueda en los que el nmero de nodos de cada rama para cualquier nodo no dieren en ms de 1. Son por lo tanto rboles AVL tambin. Arboles 2-3: son rboles de orden 3, que contienen dos claves en cada nodo y que estn tambin equilibrados. Tambin generan secuencias ordenadas al recorrerlos en inorden. Arboles-B: caso general de rboles 2-3, que para un orden M, contienen M-1 claves.

Arboles Binarios de Bsqueda (ABB)


Concepto
Se trata de rboles de orden 2 en los que se cumple que para cada nodo, el valor de la clave de la raz del subrbol izquierdo es menor que el valor de la clave del nodo y que el valor de la clave raz del subrbol derecho es mayor que el valor de la clave del nodo
*raz

0001
0001

750

0010
0010

NULL

700

NULL

NULL

800

NULL

Arboles Binarios de Bsqueda (ABB)


Operaciones
Buscar, insertar y eliminar un elemento. Movimientos a travs del rbol (izquierda, derecha y raz) Informacin (comprobar rbol vaco, calcular el nmero de nodos, comprobar si el nodo es hoja, calcular la altura de un nodo y calcular la altura de un rbol ).

Buscar:

Valor de retorno: Puntero al nodo encontrado o NULL.

Si el rbol est vaco, la bsqueda termina: el elemento no est en el rbol. Si el valor del nodo raz es igual que el del elemento buscado, la bsqueda termina con xito. Si el valor del nodo raz es mayor que el elemento buscado, continuar la bsqueda en el rbol izquierdo. Si el valor del nodo raz es menor que el elemento buscado, continuar la bsqueda en el rbol derecho.

Arboles Binarios de Bsqueda (ABB)


Insertar:
Si el elemento est en el rbol no se inserta. Si el elemento no est, se inserta a continuacin del ltimo nodo visitado. Se necesita un puntero auxiliar para conservar una referencia al padre del nodo raz actual. El valor inicial para ese puntero es NULL.

Insertar:

Arboles Binarios de Bsqueda (ABB)


Borrar:
Si el elemento no est en el rbol no se puede borrar. Si el elemento est, hay dos casos posibles:

Se trata de un nodo hoja: se borra directamente. Se trata de un nodo rama: se busca el nodo ms a la izquierda del subrbol derecho, o el ms a la derecha del subrbol izquierdo y se intercambian sus valores.

Se necesita un puntero auxiliar para conservar una referencia al padre del nodo raz actual. El valor inicial para ese puntero es NULL.

+ Izq. del subrbol Der. + Der. del subrbol Izq.

Borrar: Nodo Hoja

1. Recorrer el rbol para encontrar el nodo que se quiere eliminar.

2. Eliminar el nodo y poner la referencia del padre apuntando a NULL.

Arboles Binarios de Bsqueda (ABB)


Borrar: Nodo Rama
1. Recorrer el rbol para encontrar el nodo que tiene el valor X que se quiere eliminar (nodo). 2. Buscar el nodo (nodoAux) ms a la izquierda del rbol derecho de nodo o el ms a la derecha del rbol izquierdo. Hay que tener en cuenta que puede que slo exista uno de esos rboles. Por lo tanto habr que actualizar la referencia anterior (padre) para que apunte al padre de 'nodo'. 3. Intercambiar los valores entre los valores de nodoAux y nodo. 4. Eliminar el nodoAux y poner la referencia del padre apuntando a NULL.

Borrar: Nodo Rama

Informacin del ABB


Concepto
Existen varios parmetros que podemos calcular o medir dentro de un rbol. Algunos de ellos nos darn idea de lo ecientemente que est organizado o el modo en que funciona.

Parmetros a calcular:
rbol vaco: Un rbol est vaco si su raz es NULL. Nmero de nodos: Tenemos dos opciones para hacer esto, una es llevar siempre la cuenta de nodos en el rbol al mismo tiempo que se aaden o eliminan elementos. La otra es, sencillamente, contarlos. Para contar los nodos podemos recurrir a cualquiera de los tres modos de recorrer el rbol: inorden, preorden o postorden, como accin sencillamente incrementamos el contador. Comprobar si es nodo hoja o nodo rama: Comprobar si tanto el rbol izquierdo como el derecho estn vacos. Si ambos lo estn, se trata de un nodo hoja.

Informacin del ABB


Altura de un nodo: No hay un modo directo porque no es posible recorrer el rbol en la direccin de la raz. Por lo tanto se recurre a otra tcnica para calcular la altura. Buscar el elemento del nodo del que queremos averiguar la altura. Cada vez que avancemos un nodo incrementamos la variable que contendr la altura del nodo. Empezamos con la variable nodo apuntando a raiz y la variable altura = 0. Si el valor de la variable nodo es igual que el del elemento que buscamos, terminamos la bsqueda y el valor de la altura es la variable altura, de lo contrario incrementamos en uno la variable altura. Si el valor de la variable nodo es mayor que el elemento que buscamos, continuaremos la bsqueda en el rbol izquierdo. Si el valor de la variable nodo es menor que el elemento que buscamos, continuaremos la bsqueda en el rbol derecho.

You might also like