You are on page 1of 29

ALGORITMOS Y

ESTRUCTURAS DE
DATOS II
IDES RIO III
VIRGINIA MOR LIC. EN INFORMTICA
ESTRUCTURA DE LA MATERIA
BIBLIOGRAFA:
- ESTRUCTURA DE DATOS EN JAVA JOYANES 1ED.
- SECUNDARIO: ESTRUCTURA DE DATOS EN C++ JOYANES
- INTRODUCTION TO ALGORITHMS,CORMEN ET AL.
- LIBRO DE PYTHON

TEMAS PRINCIPALES A DESARROLLAR:


- RBOLES Y GRAFOS

PROGRAMACIN PRCTICA:
- IMPLEMENTACIN DE TEMAS VISTOS EN CLASE + PROYECTOS DE LA MATERIA
TAD

- DEFINIDO POR PROGRAMADOR, DIFIERE DEL TIPO DE DATO PRIMITIVO

- SE IMPLEMENTA DE ACUERDO A VALORES COMO VARIABLES Y OPERACIONES


SOBRE LAS MISMAS

-TANTO LA REPRESENTACIN COMO LA IMPLEMENTACIN SON INVISIBLES


ALUSUARIO, SE ENCAPSULAN DENTRO DEL MISMO TAD
RECURSIVIDAD
PROPIEDAD DE UN MTODO PARA LLAMARSE A S MISMO EN FORMA DIRECTA O A TRAVS DE
OTRO MTODO
DIFERENCIA CON ITERACIN: ITERAR ES USAR UNA ESTRUCTURA REPETITIVA, USAR
RECURSIN ES USAR UNA ESTRUCTURA DE SELECCIN

NUM. NATURAL n, OBTENER SUMA DE SUS DGITOS:


Estructuras de datos lineales
LISTAS

COLAS (FIFO)

PILAS (LIFO)
Estructura de datos avanzadas: rboles binarios
NIVEL: 0
NODO RAIZ

RAMA SUBRBOL DERECHO

SUBRBOL IZQUIERDO
ALTURA: 4
cant. niveles

NIVEL: 3
NODO HOJA
Caractersticas
No ms de 2 subrboles por nodo Estructuras de control de informacin

Recursivos Caractersticas Puede contener de 1 a 2n

Cada nodo puede tener cada nodo puede ser la raz de un


0,1 2 hijos subrbol
RECORRIDOS - TREE WALKS
A 1 PREORDEN
Recorrido : A B D E C F G

B 2 C 5
Si A no es vaco entonces
D E F G inicio
ver los datos en la raz de T
preorden (subrbol izquierdo del raz de T)
preorden (subrbol derecho del raz de T)
3 4 6 7 fin

LA RAZ SE PROCESA ANTES QUE LOS SUBRBOLES


RECORRIDOS - TREE WALKS
Recorrido : 1 7 5 4 2 8 12 10
6
2
INORDEN

8 8 Si el rbol no esta vaco entonces


5
inicio
Primero
4 10 recorrer el subrbol izquierdo
se resuelve 4
1 10 visitar el nodo raz
este lado
recorrer el subrbol derecho
2 5 Fin
7
12
1754 3 8 12 10
9

LA RAZ SE PROCESA ENTRE LOS SUBRBOLES: PRIMERO EL IZQUIERDO, VISITA A RAIZ, LUEGO EL DERECHO
RECORRIDOS - TREE WALKS
A
Recorrido: D E B F G C A POSTORDEN
7
Si A no esta vaco entonces
B C inicio
postorden (subrbol izquierdo del raz de A)
3 6 postorden (subrbol derecho del raz de A)
D E F G Visualizar los datos del raz de A
4 5 Fin
1 2

LA RAZ SE PROCESA LUEGO DE LOS SUBRBOLES IZQUIERDO Y DERECHO


ABB RBOLES B BINARY SEARCH TREES
21
RBOL BINARIO ORDENADO
33
REGLAS: 13
Cada nodo del rbol puede tener 0, 1 2
hijos.
5 25 36
Los descendientes izquierdos deben tener un 18
valor menor al padre.
40
Los descendientes derechos deben tener un 15
valor mayor al padre
ABB RBOLES B
NO SON RBOLES B:

21 5

33 6
13 1

17 18 22 4
25 2

15 40
ABB BSQUEDA - SEARCH
Paso
Paso 21
El 25 es mayor o
menor que el 21? 3 21 BUSCAR 25
1
33 13 33
13
Encontrado

40 10 18 40
10 18 25 25
Paso
2 21
El 25 es mayor
o menor que el
13 33 33?

10 18 40
25
ABB AGREGAR - INSERT
REGLAS
El valor a insertar no existe en el rbol.
Dado un nodo z:
z.key = v ; z.left = nil; z.right = nil
(El nuevo nodo ser un Nodo Hoja)
PROCEDIMIENTO
Se busca el padre que corresponde (while)
Agregar nodo z segn sea < o > (12 13)
ABB AGREGAR - INSERT
Paso 21 El 26 es mayor o El 26 es mayor
1 menor que el 21? 21 o menor que el INSERTAR 26
Paso 33?

13 33 2
13 33 Paso
4 21
10 40
18 25 18 40
10 25 33
13
Paso
3 21
10 18 40
25
13 33
Agregar el nodo
26
40 Se encontr el Nodo
10 18 25 Padre
ABB MINIMO/MAXIMO
GRACIAS AL ORDEN, ABB ASEGURA QUE SIGUIENDO LOS PUNTEROS DE HIJOS
(IZQUIERDOS/DERECHOS) DESDE NODO RAIZ HASTA ENCONTRAR NIL (NODO HOJA) SE OBTIENE
EL MNIMO/MXIMO DEL RBOL

Ejercicio a resolver: encontrar las versiones recursivas de ambos.


ABB ANTECESOR/SUCESOR
Puede necesitarse conocer el antecesor o sucesor de un nodo, esto puede visualizarse si
imprimimos la claves segn el recorrido inorden
En este orden el antecesor no necesariamente es el padre
Ejemplo: el predecesor de 18 es 16 y su padre es 20
ABB SUCESOR
Caso rbol derecho no vaco
El sucesor de un nodo x es el nodo con clave mas pequea mayor a x.key
ABB SUCESOR
Caso rbol derecho vaco
ABB ANTECESOR
Operacin simtrica a sucesor
Ejercicio a resolver: Encontrar la versin para el antecesor.
ABB BORRAR - DELETE
HAY 3 CASOS PARA BORRADO DE UN NODO:
Si p no tiene hijos
Se actualiza el padre con NIL en lugar de p, se anula el puntero
ABB BORRAR - DELETE
Si tiene un solo hijo
Se sube ese hijo al lugar de p, ya que es su sucesor
ABB BORRAR - DELETE
Si tiene un solo hijo
Se sube ese hijo al lugar de p, ya que es su sucesor
ABB BORRAR - DELETE
Si tiene dos hijos
Reemplazarlo por el mximo del subrbol izq. ; Reemplazarlo por el mnimo del subrbol der.
ABB BORRAR - DELETE
En Introduction to Algorithms de Cormen et al se reemplaza el nodo con el mnimo del subrbol derecho

TRANSPLANT SE USA PARA MOVER


SUBRBOLES DENTRO DEL ABB.

REEMPLAZA UN SUBRBOL
COMO HIJO DE SU PADRE
CON OTRO SUBRBOL.

REEMPLAZA EL SUBRBOL CON RAIZ EN u


POR OTRO SUBRBOL CON RAIZ EN v,
ENTONCES EL PADRE DE u
SECONVIERTE EN PADRE DE v
ABB BORRAR - DELETE
c): CASOS DOS HIJOS: y ES ELSUCESOR DE z
a) Y b): CASOS UN SOLO HIJO

d): CASOS DOS HIJOS: SU HIJO DERECHO r NO ES EL SUCESOR (y) DE z, SINO QUE y SE ENCUENTRA DENTRO DEL SUBRBOL DE
r, POR ESO SE REEMPLAZA y POR SU HIJO, E y PASA A SER PADRE DEL SUBRBOL r, YA QUE ES EL SUCESOR DE z ELIMINADO
Eficiencia de las operaciones vistas
Buscar, minimo, maximo, predecesor, sucesor, insertar y borrar tienen un costo proporcional a la
altura del arbol O(h)
Mientras mas alto mas nodos hay que visitar para encontrar el que buscamos
Si el rbol esta balanceado (completo) estas operaciones son mas eficientes (log n, n=nodos)

Notar la diferencia
si se busca el nodo 6

NO SOLO IMPORTA IMPLEMENTAR UNA SOLUCIN AL PROBLEMA DADO (ALGORITMO) SINO QUE HAY QUE
TENER EN CUENTA QUE DEBE SER EL MS EFICIENTE.
Prctico rboles
Disear e Implementar el TAD rbol con las variables de clase y mtodos necesarios
Disear un TAD Arbol_binario que es mas especifico que rbol (es una subclase)
Implementar una clase rbol_binario que herede de la clase rbol
Disear un TAD rbol_Binario_Busqueda que es mas especfico que rbol y que rbol binario
(es una subclase)
Implementar una clase ABB que herede de la clase rbol_binario
Mtodos deseados: insertar, borrar, buscar, imprimir (= recorrer inorder y print como lista)
Prctico ABB
Crear una clase de python que herede de rbol binario para crear rbol binario de bsqueda
(ABB)
Implementar el TAD diccionario con ABB
Operaciones de diccionario:
Constructores: creacin del diccionario vaco, agregado de un elemento a un diccionario,
Funciones/mtodos: consulta si el diccionario es vaco, bsqueda de un elemento , borrado de
un elemento

You might also like