algoritmos de búsqueda en grafos ii - …ertello/algorithms/sesion09.pdf · tarea 6 dr. eduardo r...
TRANSCRIPT
Algoritmos de búsqueda en grafos II
Dr. Eduardo A. RODRÍGUEZ TELLO
CINVESTAV-Tamaulipas
12 de febrero de 2018
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 1 / 26
1 Algoritmos de búsqueda en grafos
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 2 / 26
Algoritmos de búsqueda en grafos Búsqueda en anchura (BFS)
1 Algoritmos de búsqueda en grafosBúsqueda en anchura (BFS)Eficiencia del algoritmo BFSLongitudes en las aristasAlgoritmo de DijkstraAlgoritmo Bellman-FordTarea 6
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 3 / 26
Algoritmos de búsqueda en grafos Búsqueda en anchura (BFS)
Búsqueda en anchura (BFS)
Recordemos que la búsqueda en profundidad nos ayuda aencontrar componentes conexos en un grafo, e incluso encuentracaminos para cualquier par de vértices alcanzables entre ellos;sin embargo estos caminos no son los más cortos.
DefiniciónLa distancia entre un par de vértices es la longitud del camino máscorto entre ellos.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 4 / 26
Algoritmos de búsqueda en grafos Búsqueda en anchura (BFS)
Búsqueda en anchura (BFS)
La idea más simple para encontrar los caminos más cortos esproceder con una búsqueda capa por capa, es decir, visitar todoslos vértices que están a una distancia d del vértice de inicio, antesde visitar los que están a una distancia d+ 1.
Esta es la idea detrás de la búsqueda en anchura.
Para implementarla, podemos hacer uso de una cola, en la queestarán, en un momento determinado, sólo los vértices a unadistancia d.
Conforme se extraigan estos vértices y sean procesados, se iránagregando a la cola los que están a distancia d+ 1.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 5 / 26
Algoritmos de búsqueda en grafos Búsqueda en anchura (BFS)
Búsqueda en anchura (BFS)
Procedure bfs(G, s)
Require: Un grafo G = (V,E), dirigido o no dirigido; un vértice s ∈ VEnsure: Para todos los vértices u alcanzables desde s, dist(u) almacenará la
distancia de s a u1: for todo u ∈ V do2: dist(u) = ∞3: end for4: dist(s) = 05: Q = [s]6: while Q no esté vacía do7: u = eject(Q)8: for todas las aristas (u, v) ∈ E do9: if dist(v) = ∞ then
10: inject(Q, v)11: dist(v) = dist(u) + 112: end if13: end for14: end while
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 6 / 26
Algoritmos de búsqueda en grafos Búsqueda en anchura (BFS)
Búsqueda en anchura (BFS)
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 7 / 26
Algoritmos de búsqueda en grafos Eficiencia del algoritmo BFS
1 Algoritmos de búsqueda en grafosBúsqueda en anchura (BFS)Eficiencia del algoritmo BFSLongitudes en las aristasAlgoritmo de DijkstraAlgoritmo Bellman-FordTarea 6
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 8 / 26
Algoritmos de búsqueda en grafos Eficiencia del algoritmo BFS
Eficiencia del algoritmo BFS
El algoritmo BFS crea un árbol de los caminos más cortos,porque todos sus caminos son los más cortos posibles siiniciamos del vértice raíz.
Por lo tanto, su árbol generalmente será menos profundo peromás ancho que el de DFS.
Note también que la diferencia esencial con respecto a DFS, es eluso de una cola en vez de una pila.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 9 / 26
Algoritmos de búsqueda en grafos Eficiencia del algoritmo BFS
Eficiencia del algoritmo BFS
Una diferencia más sutil es que en este caso sólo nos interesanlas distancias desde la raíz, por lo que el algoritmo no reinicia enotros componentes conexos.
El algoritmo BFS requiere tiempo O(|V |+ |E|), por las mismasrazones que el tiempo requerido por DFS.
Cada vértice es colocado exactamente una vez en la cola, y unavez que se retira, todas sus aristas son verificadas.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 10 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
1 Algoritmos de búsqueda en grafosBúsqueda en anchura (BFS)Eficiencia del algoritmo BFSLongitudes en las aristasAlgoritmo de DijkstraAlgoritmo Bellman-FordTarea 6
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 11 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
BFS considera que todas las aristas tienen igual longitud
Sin embargo, esto raramente ocurre en las aplicaciones prácticas
Veamos un ejemplo
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 12 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 13 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
BFS no es capaz de manejar aristas con longitudes diferentes
Pero puede hacerse un pequeño truco para hacer que BFS puedamanejar estos grafos
Dado un grafo G es posible romper sus aristas con longitudes envarias partes con longitud unitaria
Veamos un ejemplo
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 14 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 15 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
Sin embargo, esto puede ser ineficiente
Para resolver este detalle es posible usar alarmas
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 16 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
Una en T = 100 para A y otra en T = 200 para B
Son tiempos estimados de llegada basados en los vértices yavisitados.
Al llegar a A la alarma suene en T = 100, y el tiempo estimadopara llegar a B debe ser actualizado a T = 150
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 17 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
De manera más general el algoritmo funcionaría así:Fijar la alarma para el nodo s en el tiempo 0.
Repetir hasta que no haya más alarmas:La distancia de s a u es TPara cada vecino v de u en G
Si no hay todavía una alarma para v, crear una con el tiempoT + l(u, v)Si la alarma de v está programada para después de T + l(u, v),entonces actualiza con este tiempo anterior
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 18 / 26
Algoritmos de búsqueda en grafos Longitudes en las aristas
Longitudes en las aristas
El algoritmo que acabamos de describir permite calcular lasdistancias en cualquier grafo con longitudes positivas en lasaristas
Para implementar eficientemente el sistema de alarmas seemplea una cola con prioridad (usualmente un heap), quemantiene un conjunto de elementos (vértices) con un valornumérico (llave) asociado y soporta las siguientes operaciones:
InsertarDecrementar-llaveExtraer-mínimoConstruir-cola
Las primeras 2 fijan las alarmas, la tercera indica la siguientealarma que sonará
Todo junto no es otra cosa que el algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 19 / 26
Algoritmos de búsqueda en grafos Algoritmo de Dijkstra
1 Algoritmos de búsqueda en grafosBúsqueda en anchura (BFS)Eficiencia del algoritmo BFSLongitudes en las aristasAlgoritmo de DijkstraAlgoritmo Bellman-FordTarea 6
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 20 / 26
Algoritmos de búsqueda en grafos Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 21 / 26
Algoritmos de búsqueda en grafos Algoritmo Bellman-Ford
1 Algoritmos de búsqueda en grafosBúsqueda en anchura (BFS)Eficiencia del algoritmo BFSLongitudes en las aristasAlgoritmo de DijkstraAlgoritmo Bellman-FordTarea 6
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 22 / 26
Algoritmos de búsqueda en grafos Algoritmo Bellman-Ford
Algoritmo Bellman-Ford
El algoritmo de Dijkstra no funciona para grafos con longitudesnegativas en las aristas
Para resolver el problema de encontrar los caminos más cortosen grafos generales a partir de un solo vértice fuente se requieredel algoritmo de Bellman-Ford
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 23 / 26
Algoritmos de búsqueda en grafos Algoritmo Bellman-Ford
Algoritmo Bellman-Ford
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 24 / 26
Algoritmos de búsqueda en grafos Tarea 6
1 Algoritmos de búsqueda en grafosBúsqueda en anchura (BFS)Eficiencia del algoritmo BFSLongitudes en las aristasAlgoritmo de DijkstraAlgoritmo Bellman-FordTarea 6
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 25 / 26
Algoritmos de búsqueda en grafos Tarea 6
Tarea 6
En la carpeta de Dropbox del curso encontrarán un archivo con lasespecificaciones de esta tarea.
Fecha de entrega: Miércoles 21 de febrero antes de las 8 AM.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Búsqueda en grafos II 12 de febrero de 2018 26 / 26