ALGORITMOS Y

ESTRUCTURAS DE
DATOS II
IDES RIO III
VIRGINIA MORÉ – LIC. EN INFORMÁTICA

ESTRUCTURA DE LA MATERIA
BIBLIOGRAFÍA:
- 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

PROGRAMACIÓN PRÁCTICA:
- IMPLEMENTACIÓN DE TEMAS VISTOS EN CLASE + PROYECTOS DE LA MATERIA

TAD .DEFINIDO POR PROGRAMADOR. SE ENCAPSULAN DENTRO DEL MISMO TAD . DIFIERE DEL TIPO DE DATO PRIMITIVO .SE IMPLEMENTA DE ACUERDO A VALORES COMO VARIABLES Y OPERACIONES SOBRE LAS MISMAS -TANTO LA REPRESENTACIÓN COMO LA IMPLEMENTACIÓN SON INVISIBLES ALUSUARIO.

RECURSIVIDAD PROPIEDAD DE UN MÉTODO PARA LLAMARSE A SÍ MISMO EN FORMA DIRECTA O A TRAVÉS DE OTRO MÉTODO DIFERENCIA CON ITERACIÓN: ITERAR ES USAR UNA ESTRUCTURA REPETITIVA. NATURAL n. OBTENER SUMA DE SUS DÍGITOS: . USAR RECURSIÓN ES USAR UNA ESTRUCTURA DE SELECCIÓN NUM.

Estructuras de datos lineales LISTAS COLAS (FIFO) PILAS (LIFO) .

niveles NIVEL: 3 NODO HOJA .Estructura de datos avanzadas: Árboles binarios NIVEL: 0 NODO RAIZ RAMA SUBÁRBOL DERECHO SUBÁRBOL IZQUIERDO ALTURA: 4 cant.

1 ó 2 hijos subárbol .Características No más de 2 subárboles por nodo Estructuras de control de información Recursivos Características Puede contener de 1 a 2n Cada nodo puede tener cada nodo puede ser la raíz de un 0.

RECORRIDOS .TREE WALKS A 1 PREORDEN Recorrido : A B D E C F G B 2 C 5 Si A no es vacío entonces D E F G inicio ver los datos en la raíz de T preorden (subárbol izquierdo del raíz de T) preorden (subárbol derecho del raíz de T) 3 4 6 7 fin LA RAÍZ SE PROCESA ANTES QUE LOS SUBÁRBOLES .

TREE WALKS Recorrido : 1 7 5 4 2 8 12 10 6 2 INORDEN 8 8 Si el árbol no esta vacío entonces 5 inicio Primero 4 10 recorrer el subárbol izquierdo se resuelve 4 1 10 visitar el nodo raíz este lado recorrer el subárbol derecho 2 5 Fin 7 12 1754 3 8 12 10 9 LA RAÍZ SE PROCESA ENTRE LOS SUBÁRBOLES: PRIMERO EL IZQUIERDO. LUEGO EL DERECHO . VISITA A RAIZ.RECORRIDOS .

RECORRIDOS .TREE WALKS A Recorrido: D E B F G C A POSTORDEN 7 Si A no esta vacío entonces B C inicio postorden (subárbol izquierdo del raíz de A) 3 6 postorden (subárbol derecho del raíz de A) D E F G Visualizar los datos del raíz de A 4 5 Fin 1 2 LA RAÍZ SE PROCESA LUEGO DE LOS SUBÁRBOLES IZQUIERDO Y DERECHO .

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

ABB – ÁRBOLES B NO SON ÁRBOLES B: 21 5 33 6 13 1 17 18 22 4 25 2 15 40 .

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 – BÚSQUEDA .

key = v .left = nil. z. ◦ Dado un nodo z: z.INSERT REGLAS ◦ El valor a insertar no existe en el árbol. z.ABB – AGREGAR .right = nil (El nuevo nodo será un Nodo Hoja) PROCEDIMIENTO ◦ Se busca el padre que corresponde (while) ◦ Agregar nodo z según 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 MÍNIMO/MÁXIMO DEL ÁRBOL Ejercicio a resolver: encontrar las versiones recursivas de ambos. .

esto puede visualizarse si imprimimos la claves según 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 –ANTECESOR/SUCESOR ● Puede necesitarse conocer el antecesor o sucesor de un nodo.

ABB – SUCESOR ● Caso árbol derecho no vacío El sucesor de un nodo x es el nodo con clave mas pequeña mayor a x.key .

ABB – SUCESOR ● Caso árbol derecho vacío .

.ABB – ANTECESOR • Operación simétrica a sucesor Ejercicio a resolver: Encontrar la versión para el antecesor.

ABB – BORRAR . se anula el puntero .DELETE HAY 3 CASOS PARA BORRADO DE UN NODO: – Si p no tiene hijos ◦ ● Se actualiza el padre con NIL en 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 un solo hijo ◦ ● Se sube ese hijo al lugar de p.

Reemplazarlo por el mínimo del subárbol der. . .ABB – BORRAR .DELETE – Si tiene dos hijos ◦ ● Reemplazarlo por el máximo del subárbol izq.

DELETE • En Introduction to Algorithms de Cormen et al se reemplaza el nodo con el mínimo del subárbol derecho TRANSPLANT SE USA PARA MOVER SUBÁRBOLES DENTRO DEL ABB. REEMPLAZA EL SUBÁRBOL CON RAIZ EN u POR OTRO SUBÁRBOL CON RAIZ EN v. ENTONCES EL PADRE DE u SECONVIERTE EN PADRE DE v . REEMPLAZA UN SUBÁRBOL COMO HIJO DE SU PADRE CON OTRO SUBÁRBOL.ABB – BORRAR .

POR ESO SE REEMPLAZA y POR SU HIJO.ABB – BORRAR . E y PASA A SER PADRE DEL SUBÁRBOL r.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 SUBÁRBOL DE r. YA QUE ES EL SUCESOR DE z ELIMINADO .

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. maximo. n=nodos) Notar la diferencia si se busca el nodo 6 NO SOLO IMPORTA IMPLEMENTAR UNA SOLUCIÓN AL PROBLEMA DADO (ALGORITMO) SINO QUE HAY QUE TENER EN CUENTA QUE DEBE SER EL MÁS EFICIENTE. minimo. sucesor. . predecesor.Eficiencia de las operaciones vistas ● Buscar.

imprimir (= recorrer inorder y print como lista) .Práctico Árboles ● Diseñar e Implementar el TAD Árbol con las variables de clase y métodos necesarios ● Diseñar un TAD Arbol_binario que es mas especifico que Árbol (es una subclase) – Implementar una clase árbol_binario que herede de la clase árbol ● Diseñar un TAD Árbol_Binario_Busqueda que es mas específico que Árbol y que árbol binario (es una subclase) – Implementar una clase ABB que herede de la clase árbol_binario ● Métodos deseados: insertar. borrar. buscar.

borrado de un elemento .Práctico ABB ● Crear una clase de python que herede de árbol binario para crear árbol binario de búsqueda (ABB) ● Implementar el TAD diccionario con ABB ● Operaciones de diccionario: – Constructores: creación del diccionario vacío. – Funciones/métodos: consulta si el diccionario es vacío. agregado de un elemento a un diccionario. búsqueda de un elemento .