Algoritmos y estructuras de datos Dr. Eduardo A. Rodríguez Tello Laboratorio de Tecnologías de Información Cinvestav Tamaulipas ertello@tamps.cinvestav.mx Cursos de inducción a la MCC Cinvestav Tamaulipas 2012 1
Temario I. Introducción II. III. IV. Estructuras de datos estáticas y dinámicas Tipos de datos abstractos a. Listas b. Colas c. Pilas d. Arboles e. Grafos Ordenamientos V. Búsquedas VI. Resumen Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 2
Arboles Un árbol es un conjunto finito de nodos: 1. Si la colección es vacía, se dice que el árbol es vacío 2. En caso contrario, un árbol A consiste de un nodo especial llamado raíz y n (sub)árboles no vacíos T 1,T 2,,T n.laraízde A se conecta con la raíz de cada T i por un arco dirigido A B C D E F G H Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 3
Relaciones entre nodos Todo nodo n j, exceptuando el raíz, está conectado exclusivamente a otro nodo n k donde: n j es el padre de n k (e.g., B es el padre de E) n k es uno de los hijos de n j (e.g., E es un hijodeb) Nodos con el mismo padre son hermanos (e.g. B y C) Nodos sin hijos son llamados hojas (e.g. G) A B C D E F G H Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 4
Árboles binarios Un árbol binario es un árbol en el cual cada nodo puede tener como máximo dos hijos Un árbol binario se define como: un árbol vacío, o un nodo raíz con un subárbol bárboliq izquierdo ierdoy un subárbol derecho Raíz 25 36 64 10 15 8 30 Árbol Árbol izquierdo derecho Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 5
Operaciones básicas en árboles Crear un árbol vacío Verificar si el árbol está vacío Insertar un nodo Eliminari un nodo Recorrer un árbol Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 6
Recorridos de árboles Procedimientos que visitan todos los nodos de un árbol efectuando una acción sobre cada uno Existen dos formas posibles de recorrer un árbol no vacío Amplitud: el proceso se realiza horizontalmente desde la raíz a todos sus hijos, luego a los hijos de sus hijos y así sucesivamente Profundidad: se sigue un camino desde la raíz a través de un hijo antes de proseguir al siguiente hijo Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 7
Ejemplo de recorrido en amplitud A B C D E F G A, B, C, D, E, F, G Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 8
Recorridos en profundidad Existen tres formas posibles de recorrer en profundidad un árbol no vacío, según cuando la raíz sea visitada Primer orden: Pre orden Segundo orden: Recorrida en orden Orden simétrico Tercer orden: Post orden se visita la raíz; se recorre el subárbol b izquierdo; i se recorre el subárbol derecho; se recorre el subárbol izquierdo; se visita la raíz; se recorre el subárbol derecho; se recorre el subárbol izquierdo; se recorre el subárbol derecho; se visita la raíz; Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 9
Ejemplo de recorridos en profundidad A B C D E F G Preorden: A, B, D, E, C, F, G Inorden: D, B, E, A, F, C, G Postorden: D, E, B, F, G, C, A Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 10
Grafos Un grafo G es un par (V,E), tal que: V: conjunto de nodos E: conjunto de arcos conectando a los nodos en V Un arco e = (u,v) es un par de nodos a c b V= {a,b,c,d,e} a b E= {(a,b),(a,c),(a,d), c (b,e),(c,d),(c,e), (d,e)} V={a, b, c} a d e E={<a, b>,<a, c>, <c,b>} Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 11
Grafos dirigidos y no dirigidos Dirigido (o Digrafo) Cada línea te tiene euna adirección eccó a su sucesor Note que <vi, vj> <vj, vi> No dirigido Las líneas no tienen dirección Note <vi, vj> = <vj, vi> Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 12
Operaciones en grafos Considere un grafo G y dos nodos x y y añade(g, x,y): añade en G un arco de x a y, si no existe borra(g, x,y): suprime un arco de x a y,siexiste adyacente(g, x,y): verifica si hay un arco de x a y en G vecinos(g, x): lista todos los nodos y tal que hay un arco entre x y y En los grafos que tienen valores asociados a sus arcos, también se tienen: asigna_valor(g, x,y,v): ) asigna el valor asociado id al arco (x,y) a v. obtener_valor(g, x,y): regresa el valor asociado al arco (x,y). Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 13
Referencias Weiss, Mark A. Data Structures and Algorithm Analysis in C++, 3rd Ed. Addison Wesley Wesley, 2007. Joyanes Aguilar, Luis. Programación en C++: Algoritmos, estructuras de datos y objetos. McGraw Hill, 2000. Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 14