1 / 171

Almacenamiento y recuperación de información

Almacenamiento y recuperación de información. Prof. Hugo Moncayo López Cubículo H-294 Tel. 5318-9532/139 Correo hmoncayo@hp9000a1.uam.mx. Contenido sintético. Árbles AVL Grafos y sus aplicaciones Estructuras de archivos Ordenamiento externo Indexación Árboles B y B+ Dispersión.

akamu
Download Presentation

Almacenamiento y recuperación de información

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Almacenamiento y recuperación de información Prof. Hugo Moncayo López Cubículo H-294 Tel. 5318-9532/139 Correo hmoncayo@hp9000a1.uam.mx

  2. Contenido sintético • Árbles AVL • Grafos y sus aplicaciones • Estructuras de archivos • Ordenamiento externo • Indexación • Árboles B y B+ • Dispersión

  3. Evaluaciones • Dos evaluaciones periódicas en las semanas 4 y 7 • Una evaluación terminal en la semana de evaluaciones globales • 8 tareas consistentes el elaboración de programas • Calificación: • Evaluaciones 60% • Tareas 40%

  4. Escala de calificaciones • NA > 6 • S entre 6 y menos de 7 • B entre 7 y menos de 8.5 • MB 8.5 o superior

  5. Bibliografía • Folk, M. J., Zoellick, Bill, Riccardi, Greg. "Fil estructures: an object orientes approach with C++, Addison Wesley Longman, Inc. 1998 • Cormen, T. H., Leiserson, C. E., Rivest, R. L., "Introduction to algorithms", Mc Graw Hill, 1998. • Knuth, D.E., "The art of computer programming: Vol. 3 Sorting and searching", Addison-Wesley Publishing Company, Inc. Philipines, 1973. • Joyanes, L. "Programación en C++: Algoritmos, estructuras de datos y objetos", McGraw-Hill/Interamericana de España, S. A. U., 2000 • Langsam, Y., Augenstein, M., Tenenbaum, A. M., "Estructuras de datos con C y C++" segunda edición, Prentice-Hall Hispanoamericana, S. A. 1997.

  6. 1.- Árboles AVL • Adelson, Velskii, Landis • Son árboles de búsqueda bien balanceados • Permiten inserciones y remociones en tiempo muy eficientes • Mantienen una profundidad de O(log N)

  7. Árboles no balanceados 11 13 10 5 3

  8. Árbol balanceado 10 5 13 3 11

  9. Propiedades de los árboles AVL • Balanceado • En cualquier nodo las alturas de los hijos izquierdo y derecho sólo pueden diferir en uno • Los nodos vacíos tienen altura de –1 • Las hojas tienen altura de 0 • Los nodos se encuentran ordenados por una llave

  10. Altura de los nodos 10 3 5 13 2 1 3 1 7 0 11 0 1 0

  11. llave llave llave raiz altura altura altura Estructuras de datos para árboles AVL

  12. Estructuras en C++ class Nodo; class avl{ public: Nodo *raiz; avl() {raiz = 0;} void RotacionSimpleIzquierda(); void RotacionSimpleDerecha(); ... }; class Nodo{ public: int llave; int altura; avl izq, der; Nodo(int llave) { this->llave = llave; altura = 0; izq.raiz = 0; der.raiz = 0; } };

  13. 10 5 3 2 1 0 beta delta nil nil Rotación simple por la izquierda this raiz raiz->izq

  14. 10 5 3 2 1 0 beta delta nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz t raiz->izq

  15. 10 5 3 2 1 0 beta delta nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz = t->izq.raiz; raiz t raiz->izq

  16. 10 5 3 2 1 0 delta beta gama delta nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz = t->izq.raiz; t->izq = raiz->der; raiz t raiz->izq

  17. 10 5 3 2 1 0 delta beta gama nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz = t->izq.raiz; t->izq = raiz->der; raiz->der.raiz = t; raiz t raiz->izq

  18. 10 5 3 0 1 0 delta beta gama nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz = t->izq.raiz; t->izq = raiz->der; raiz->der.raiz = t; raiz->der.AjustaAltura(); raiz t raiz->izq

  19. 10 5 3 0 1 0 delta beta gama nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz = t->izq.raiz; t->izq = raiz->der; raiz->der.raiz = t; raiz->der.AjustaAltura(); raiz->der.AjustaAltura(); AjustaAltura(); } raiz t raiz->izq

  20. 10 5 3 0 1 0 delta beta gama nil nil Rotación simple por la izquierda this void avl::RotacionSimpleIzquierda() { Nodo *t = raiz; raiz = t->izq.raiz; t->izq = raiz->der; raiz->der.raiz = t; raiz->der.AjustaAltura(); raiz->der.AjustaAltura(); AjustaAltura(); } raiz raiz->izq

  21. Rotación doble 50 20 rotación simple izquierda 20 50 30 30

  22. 50 20 30 2 1 0 alfa beta gamadelta Rotación doble izquierda this raiz raiz->izq Subarbol alfa > 50 beta < 20 20 < gama < 30 30 < delta < 50

  23. 50 30 20 2 1 0 alfa delta betagama Rotación doble izquierda this void RotacionDobleIzquierda() { raiz->izq.RotacionSimpleDerecha(); } raiz raiz->izq Subarbol alfa > 50 beta < 20 20 < gama < 30 30 < delta < 50

  24. 50 30 20 0 1 0 delta alfa betagama Rotación doble izquierda this void RotacionDobleIzquierda() { raiz->izq.RotacionSimpleDerecha(); Rotacion SimpleIzquierda(); } raiz raiz->izq Subarbol alfa > 50 beta < 20 20 < gama < 30 30 < delta < 50

  25. Grafos

  26. Grafos Un grafo es un conjunto de vértices conectados por líneas llamadas aristas Grafo no dirigido 1 2 3 4 G=(V,A) 5 6 Grafo dirigido 1 2 3 4 5

  27. 3 2 1 4 1 5 3 2 6 6 1 6 2 4 3 4 Representación de grafos Lista de adyacencia 1 2 1 2 3 4 5 6 3 4 5 6 Matriz de adyacencia

  28. 3 6 2 4 3 2 2 5 Representación de grafos Lista de adyacencia 1 2 3 4 5 1 2 3 4 5 Matriz de adyacencia

  29. Búsqueda primero en amplitud Para cada vertice u en V[G] u.color = blanco u.distancia = infinito u.padre = nil s.color = gris s.distancia = 0 s.padre = nil Q.InsertaFinal(s) Mientras Q no sea vacio u = Q.ExtraeCabeza() Para cada vertice v en u.adyacencia Si v.color = blanco v.color = gris v.distancia = u.distancia+1 v.padre = u Q.AgregaFinal(v) u.color = negro

  30. 1 1 2 0 1 2 1 0 0                        Búsqueda primero en aplitud t u t u r s r s Q = {s} Q = {} v w x y v w x y t u r s t u r s Q = {w,r} Q = {r,t,x} v w x y v w x y

  31. 1 2 1 2 2 2 3 2 0 1 1 2 3 0 2 0 1 3 2 1 0 3 2 2 1 2 3 2 1    Búsqueda primero en amplitud t u r s t u r s Q = {x,v,u} Q = {t,x,v} v w x y v w x y r s t u r s t u Q = {u,y} Q = {v,u,y} v w x y v w x y

  32. 0 2 1 2 3 2 1 3 3 1 2 3 2 0 1 2 Búsqueda primero en amplitud r s t u r s t u Q = {y} Q = {} v w x y v w x y

  33. Búsqueda primero en amplitud • Funciona para arista unitarias • Calcula la distancia más corta desde el vértice origen a cada uno de los vértices a los que se puede llegar • Se puede aplicar a grafos direccionados o grafos no direccionados • Genera el árbol de rutas mas cortas mediante los predecesores de cada nodo

  34. Implementación Clase deque Constructora: deque<Vertice*> adyacencia; Funciones de acceso: adyacencia.push_back(&Vertice) adyacencia.push_front(&Vertice) adyacencia.begin(); adyacencia.end();

  35. Iterar en los elementos de deque deque<Vertice*>::iterator it; for (it = u.adyacencia.begin(); it != u.adyacencia.end(); it++) { Vertice *v = *it; }

  36. Búsqueda primero en profundidad • Busca primeramente la máxima profundidad posible en cada ruta • Cuando ha agorado una ruta en lo profundo regresa (backtrack) a los vértices por donde vino para analizar las aristas pendientes

  37. Algoritmo ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++

  38. 0 0 0 0 0 0 0 0 0 0 0 1/ BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 0 x y z u=u(v, x) v=v w u v time 1 x y z

  39. 1/ 0 0 0 0 0 0 0 0 2/ 1/ 0 BPP w ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ u v time 1 x y z x y z u=u(v, x),v(y) v=y w u v time 2 x y z x y z

  40. 0 1/ 2/ 0 0 3/ 0 2/ 1/ 0 0 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 2 x y z x y z u=u(v, x),v(y),y(x) v=x w u v time 3 x z x y z

  41. 0 1/ 2/ 0 4/ 3/ 0 2/ 1/ 3/ 0 0 BPP w w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 3 x z x y z u=u(v, x),v(y),y(x),x(v) v=v w u v time 4 z x y z

  42. 0 1/ 2/ 0 4/5 3/ 0 1/ 4/ 3/ 2/ 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 4 z x y z u=u(v, x),v(y),y(x),x(v) v=v w u v time 5 z x y z

  43. 0 1/ 2/ 0 4/5 3/6 0 1/ 4/5 3/ 2/ 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 5 z x y z u=u(v, x),v(y),y(x),x(v) v= w u v time 6 z x y z

  44. 0 1/ 2/7 0 4/5 3/6 0 1/ 4/5 3/6 2/ 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 6 z x y z u=u(v, x),v(y),y(x),x(v) v= w u v time 7 z x y z

  45. 0 1/8 2/7 0 4/5 3/6 0 1/ 4/5 3/6 2/7 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 7 z x y z u=u(v, x),v(y),y(x),x(v) v=x w u v time 8 z x y z

  46. 0 1/8 2/7 9/ 4/5 3/6 0 1/8 4/5 3/6 2/7 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 8 z x y z u=u(v, x),v(y),y(x),x(v),w(y, z) v=z w u v time 9 z x y z

  47. 4/5 1/8 2/7 9/ 4/5 3/6 10/ 2/7 1/8 3/6 9/ 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 9 z x y z u=u(v, x),v(y),y(x),x(v),w(y, z),z(w,z) v=z w u v time 10 x y z

  48. 4/5 1/8 2/7 9/ 4/5 3/6 10/11 2/7 1/8 3/6 9/ 0 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 10 z x y z u=u(v, x),v(y),y(x),x(v),w(y, z),z(w,z) v=z w u v time 11 x y z

  49. 9/ 1/8 2/7 9/12 4/5 3/6 10/11 1/8 4/5 2/7 3/6 10/11 BPP w u v ALGORITMO BPP(G) Para cada vértice u en G.V u.color = BLANCO u.padre = NIL time = 0 Para cada vértice u en G.V Si u.color = BLANCO BPP_Visita(u) ALGORITMO BPP_Visita(u) u.color = GRIS u.distancia = time++ Para cada vértice v en u.Adyacencia Si v.color = BLANCO v.padre = u BPP_Visita(v) u.color = NEGRO u.f = time++ time 11 x y z u=u(v, x),v(y),y(x),x(v),w(y, z),z(w,z) v=z w u v time 12 x y z

  50. 1/8 2/7 9/12 4/5 3/6 10/11 BPP w u v x y z u w v z y x 1 2 3 4 5 6 7 8 9 10 11 12

More Related