Departamento Informática Aplicada Algorítmica y Complejidad Tema 3 – Algoritmos sobre Grafos Curso 2012-13 Grafos 1 Conceptos, 1. Conceptos Definiciones y Representación 2 Conectividad y recorrido 2. 3 Árboles de expansión 3. 4 Caminos mínimos 4. 2 Grafos 1. 2 Conectividad y recorrido 2. 3 Árboles de expansión 3. 4 Caminos mínimos 4. 3 Conceptos, Definiciones y Representación El origen de la teoría de grafos ... El problema de los puentes de Königsberg (1736) ¿es posible dar un paseo comenzando desde cualquiera de estas regiones, i pasando d por ttodos d llos puentes, t recorriendo i d sólo ól una vez cada uno, y regresando al mismo punto de partida? Resuelto por Euler l No hay solución •Se puede comprobar utilizando “fuerza bruta” •Demostración D t ió d de E Euler l Grafos 4 Conceptos, Definiciones y Representación Ejemplos – – – – Redes de transporte (carreteras, rutas aéreas, ...) Redes de comunicación (Internet) R d d Redes de iinformación f ió (WWW) Redes sociales (Facebook, Twitter, FourSquare, ...) – Dependencias (asignaturas pre-requisito, diagramas de flujo, ...) D fi i ió formal Definición f l de d grafo f – Par de conjuntos G=(V, E) • • • • Grafos V nodos y E aristas Cada arista es un par (u,v) con u,v V Si el p par está ordenado es un g grafo dirigido g Si no está ordenado es un grafo no dirigido 5 Conceptos, Definiciones y Representación grafo (g (grado G ) • Grado del g – Número de nodos / vértices |V| • Nodos adyacentes – Si están unidos por una arista • Grado de un nodo (grado u ) – Número de aristas que inciden en un nodo ó número de nodos adyacentes – Handshaking Lemma – En grafo dirigido: grado de entrada y grado de salida • Camino C entre dos nodos ((path u,v ) – Secuencia de nodos, tal que dos nodos consecutivos son adyacentes (uxi, xixi+1 i 1, xi+1 i 1xi+2 i 2, ...., xi+n i v) – Es simple cuando no hay nodos repetidos en el camino – Ciclo es un camino simple pero con u = v Grafos 6 Conceptos, Definiciones y Representación • Grafo conexo Cada par de nodos está conectado por un camino • Grafo no conexo No existe un camino que una un nodo con los demás No existe un camino entre a y e • Bosque –Grafo sin ciclos • Árbol libre –Bosque conexo –Con un nodo en el papel de raíz Grafos 7 Conceptos, Definiciones y Representación • Siempre se cumple que: a. b.Si G es conexo, |E| |V|-1 c.Si Si G es árbol, á b l |E| = |V|-1 |V| 1 d.Si G es bosque |E| |V|-1 • Describir este grafo (grid) 1. 1 2. 3. 4 4. Grafos ¿Dirigido Di i id o no di dirigido i id ¿Conexo? ¿Bosque? Grado de los nodos 8 Conceptos, Definiciones y Representación Representación de grafos 1 2 3 • Listas de adyacencia 5 1 2 5 2 1 5 3 2 4 4 2 5 3 5 4 1 2 3 4 4 G=(V,E) Las aristas pueden tener pesos asociados. • Grafos poco densos |E| << |V|2 Espacio (|V|+|E|) • Si el grafo es dirigido list[i].length = |E| • Si ell grafo f es NO dirigido di i id list[i].length = 2*|E| • Longitud total de la lista (|E|) Grafos 9 Conceptos, Definiciones y Representación Representación de grafos 1 2 3 • Matriz de adyacencia 5 1 2 3 4 5 1 0 1 0 0 1 2 1 0 1 1 1 3 0 1 0 1 0 4 0 1 1 0 1 5 1 1 0 1 0 Grafos 4 G=(V,E) Las aristas pueden tener pesos asociados. • Grafos densos |E| ≈ |V|2 Un solo bit por arista Espacio (|V|2) • Consultas C lt sobre b aristas i t 10 Grafos 1 Conceptos, 1. Conceptos Definiciones y Representación 2. 3 Árboles de expansión 3. 4 Caminos mínimos 4. 11 Conectividad y Recorrido Dado un grafo G=(V,E) y dos nodos s y t – Problemas: ¿Existe un camino para llegar de s a t? ¿A qué distancia están? – Concepto de distancia entre dos nodos s y t como (s, t) • Mínimo número de aristas entre s y t. – Breadth-First Search (BFS) • Recorrido en amplitud. Dado un nodo s, primero visita todos los nodos a distancia 1 (L1) de s, luego a distancia 2 (L2), y así sucesivamente. • Li(s) Conjunto de nodos a distancia i de s – Depth-First Search (DFS) • Recorrido en profundidad. Dado un nodo s, visita el primer nodo conectado a s y después el primer nodo conectado al último visitado Grafos 12 Conectividad y Recorrido Breadth-First Breadth First Search 1 7 2 3 4 5 8 6 BFS ((G,, s = 1)) 1 2 L1 1 1 3 2 L2 4 2 3 5 7 8 4 5 L3 Grafos 3 7 8 6 13 Conectividad y Recorrido • BFS (G, s) - Implementación – s y u están conectados si u Lj con j ≥ 1 – Visitados Lista con los nodos visitados BFS G, s : Visitados s true, u s Visitados s false L 0 L 0 s , i 0, T Ø while L i Ø do L i 1 Ø foreach u in L i do foreach v in G do if G.Matriz u,v 0 & Visitados v false then Visitados v true T T u, v L i 1 L i 1 v endif endfor endfor i i 1 endwhile Grafos T: Árbol generado por BFS (lista de aristas de los nodos accesibles desde el nodo s) No hay orden al procesar L ¿Existe la arista (u, v) y v no ha sido visitado todavía? Añadir la arista en el árbol T Incluir el nodo encontrado Complejidad O(|V|2) Con listas de adyacencia y O (| (|V|+|E|) | | |) 14 Conectividad y Recorrido • Complejidad de BFS – Un nodo sólo puede aparecer en una lista (Li) – Por lo tanto el bucle foreach se ejecuta n |V| veces – Cada iteración del bucle se ejecuta n veces, se consideran todos los nodos – Un cota es O n2 – Una cota mejor: • Utilizando listas de adyacencias en lugar de matriz • El procesamiento de cada nodo u puede optimizarse si tiene pocos vecinos • La longitud de la lista de adyacencia es 2 2*m, m, m m |E| |E| • El bucle foreach se ejecutará m veces • Para manejar Li y Visitados se emplea O n • Una cota mejor es O m n Grafos 15 Conectividad y Recorrido 1 Depth-First Depth First Search 2 4 Procesamiento de izda izda. a dcha dcha. 7 3 5 6 8 Procesamiento de dcha. dcha a izda izda. 1 1 2 3 4 5 6 3 8 7 Grafos 7 5 8 6 4 2 16 Conectividad y Recorrido • DFS ((G,, s)) – Implementación p ((no recursiva)) – Utilizando una pila (S) para procesar los nodos – Visitados: Lista con los nodos visitados DFS G, s : i V, Visitados i false push h S, S s while S Ø do u pop u pop S if Visitados u false then Visitados u true foreach v in G.Adyacencia u do push S, v endfor df endif endwhile Grafos C Complejidad l jid d •Añadir y borrar un nodo de S, O 1 •El El número ú d de operaciones i en S acotado por el grado de G, O |E| •Operaciones Operaciones en la lista acotadas por |V| •O ||E|| ||V|| utilizando listas de Adyacencia 17 Conectividad y Recorrido • DFS (G, s) – Implementación (recursiva) – Visitados Lista con los nodos visitados – R Lista de elementos conectados desde un nodo dado – T Árbol DFS 1 2 DFS G, u : Visitados u true R R R R u foreach v in G.Adyacencia u do if Visitados v false then T T u,v DFS G, v endif endfor Grafos 4 7 3 5 8 6 Li t d Lista de Ad Adyacencias i 1. 2. 3. 4. 5. 6. 7 7. 8. 2, 3 1, 3, 5, 4 5, 7, 8, 1, 2 2, 5 4, 6, 2, 3 5 8 8, 3 7, 3 18 Conectividad y Recorrido Grafos Dirigidos – Con BFS y DFS comprobamos la existencia de un camino entre dos nodos s y t – Aunque exista el camino camino, puede que no exista entre t y s – Un grafo está fuertemente conectado si: • s, t V, existe un camino entre s y t y entre t y s A C B A B C D D Fuertemente conectado E NO fuertemente conectado • Algoritmo: g 1.BFS (G, s) ó DFS (G, s) 2.Calcular Grev (Invertiendo el sentido de las artistas) 3.BFS (Grev, s) ó DFS (Grev, s) 4.Si BFS ó DFS fallan y no alcanzan todos los nodos, el grafo NO está fuertemente conectado Grafos 19 Conectividad y Recorrido Grafos Dirigidos – Sin ciclos es un DAG (Directed Acyclic Graph) – Los DAG aparecen con bastante frecuencia • Relaciones de precedencia o dependencia – Si se puede establecer un orden entre los nodos, de tal forma que (u, v) E y u < v (orden), entonces G tiene orden topológico. – Si G es un DAG, entonces tiene orden topológico MD FP ED ALG SO Posible precedencia de las asignaturas de Grado Grafos ED SD POO C FP MD ALG POO C SO SD Orden topológico de las asignaturas 20 Conectividad y Recorrido Algoritmo de ordenación topológica 2 – R Lista con la ordenación (resultado) – Complejidad O n2 6 ORDENACION_TOPOLÓGICA G : Encontrar un nodo u / v V, v, u E R R u R G.V G.V u if G.V G.V Ø then Ø then ORDENACION_TOPOLÓGICA G endif 3 6 5 5 5 7 R 1, 2 Grafos 4 7 R 1, 2, 3 4 7 1 2 3 6 5 4 7 R 1 4 7 6 6 3 6 5 R 1, 2, 3, 4, 5, 6 7 7 R 1, 2, 3, 4, 5, 6, 7 R 1 R 1, 2, 3, 4, 5 2 3 4 5 R 1, 2, 3, 4 21 Grafos 1 Conceptos, 1. Conceptos Definiciones y Representación 2 Conectividad y recorrido 2. 3 Árboles de expansión 3. 4 Caminos mínimos 4. 22 Árboles de Expansión ¿Cómo conectar todos los nodos con el mínimo coste? 4 8 B D 2 11 A 7 C I 7 8 14 4 9 w(u, v), T E (u,v)T E 6 w : E 10 H 1 G 2 F Aplicaciones •Logística •Conexionado Ciudades Ciudades, Componentes eléctricos, Personas, etc. •Enrutamiento en redes Algoritmos de construcción (Voraces) •Genérico •Kruskal •Prim Grafos w(T) 4 B 8 7 C D 2 I A H 1 E 4 G 9 2 F C t 37 Coste Se puede sustituir (B,C) por (A,H) con igual coste 23 Árboles de Expansión Propiedades de los arboles de expansión: – Tienen |V|-1 arcos – No tienen ciclos – Pueden P d no ser ú únicos i MST_GENERICO G, w : // Minimum Spanning Tree A Ø A Ø # Conjunto de arcos que forman el MST # Conjunto de arcos que forman el MST while A no forme Minimum Spanning Tree do Encontrar un arco e E, f E, / w / e w f && A e sea acíclico A A e E E ‐ e done return A – Añ Añade d un arco cada d vez all á árbol b ld de expansión ió (A) – Finaliza cuando todos los nodos están conectados – El problema es comprobar que no se añaden ciclos Grafos 24 Árboles de Expansión Algoritmo de Kruskal • Descripción – Algoritmo voraz, en cada iteración añade un arco de peso mínimo – Utiliza dos conjuntos: • Un bosque F, que inicialmente contiene un árbol por cada vértice V • Un conjunto S con los arcos del grafo G (inicialmente S = G.E) – Mientras S contenga arcos y F no sea un árbol de expansión • Extraer de S el arco de peso mínimo (u,v) • Si (u,v) ( ) une dos d arboles b l diferentes, dif t añadir ñ di ell arco a F y combinar bi llos dos arboles en uno – Al final del proceso F contiene un único componente que forma un árbol de expansión – El coste de ordenar S es O (m log m), siendo m = |E| – Al existir al menos un arco entre cada p par de nodos • m n2 m n* n‐1 /2 Grafo no dirigido conexo • lg m O lg n lg n2, 2*lg n O lg n • La cota es O O m log n m log n Grafos 25 Árboles de Expansión Algoritmo g de Kruskal • Ejemplo (1/2) 4 1 2 3 6 3 3 5 4 7 1 3 4 1 9 4 6 3 1 5 4 4 6 1 3 1 6 3 5 1 5 9 1 1 6 2 1 3 5 4 2 7 5 3 1 3 2 7 6 1 9 2 3 5 1 6 1 3 5 3 9 1 6 2 4 1 2 1 3 7 5 5 4 2 1 6 3 7 5 1 3 6 6 3 1 9 2 2 4 1 9 4 5 1 2 4 1 2 3 7 6 1 ¡CICLO! Los nodos 2 y 5 pertenecen al mismo árbol Grafos 26 Árboles de Expansión Algoritmo g de Kruskal • Ejemplo (2/2) 4 1 2 3 6 3 5 1 3 5 9 4 6 6 1 5 3 4 6 6 1 5 1 9 3 3 5 1 2 7 4 1 2 1 9 3 3 5 1 2 7 4 1 2 4 1 2 3 7 6 1 Coste 12 • Implementación – Mediante conjuntos para representar los diferentes arboles – Estructura de datos para manejar conjuntos disjuntos (Union‐Find) – Operaciones p sobre conjuntos: j • Make‐Set u • Union u, v • Find Find u Grafos 27 Árboles de Expansión Estructura de datos Union‐Find – Find u devuelve el conjunto al que pertence el nodo u – Para comprobar si un arco (u,v) genera un ciclo: • if Find Fi d u Find Fi d v then th ...... – Para combinar dos arboles mediante el arco (u,v): • Union Union u, u, v v S1 S2 cab cola Arcos cab a b cola Conjunto (a,b) {a, b} (c,d) (d,e) {c, d, e} Grafos c d e A C B D E 28 Árboles de Expansión Estructura de datos Union‐Find Union Find – Union b, c S1 cab cola a b c A Arcos B e C Conjunto (a,b) {a, b} (c,d) (d,e) {c, d, e} (a,b) (b,c) (c,d) (d,e) {a, b, c, d, e } Grafos d Dos arboles Un único árbol D E 29 Árboles de Expansión Algoritmo de Kruskal – Utilizando la estructura Union‐Find Union Find – A: conjunto con los arcos que forman el MST – W: lista ordenada de arcos por peso MST‐KRUSKAL G, w : A Ø f foreach h v in i G.V do // GVd // cada nodo un conjunto d d Make‐Set v endfor W Ordenar Ascendente, G.E, w Para comprobar A MST while A MST do •Un único conjunto j Union‐Find u,v ExtraerPrimerArco W •Todos los nodos V conectados if Find u Find v A A A A u, v Union u, v endif endwhile 30 Grafos Árboles de Expansión Algoritmo de Prim • Descripción – – – – Variante del algoritmo genérico Algoritmo voraz, en cada iteración añade un arco de peso mínimo Mantiene un único árbol (en cambio, Kruskal un bosque) Utiliza dos conjuntos • A para almacenar los arcos que forman el MST • S nodos que forman parte del MST – Mientras Mi t G V − S Ø G.V Ø • Escoger el arco de peso mínimo u, v tal que u S y v G.V − S • Añadir (u, v) al conjunto A • Añadir a S el extremo de (u, v) que no pertenece a S – Cotas • Con matrices de adyacencia es O O V2 • Con colas y listas de adyacencia para implementar S es O V E lg V • Con montículos de Fibonacci y listas de adyacencia es O E V lg V Grafos 31 Árboles de Expansión Algoritmo de Prim • Ejemplo Ej l 4 1 2 3 6 3 4 3 3 6 3 4 6 3 6 4 1 6 1 2 3 6 3 5 5 4 1 2 3 7 6 1 5 1 5 9 4 1 2 3 7 Grafos 3 1 9 3 7 6 1 2 1 4 1 3 4 9 2 5 1 6 2 1 5 1 1 3 7 3 3 5 7 4 1 2 4 2 1 5 1 9 6 3 5 1 7 5 6 3 1 9 4 2 1 1 2 4 3 5 9 2 5 1 2 1 6 1 6 3 3 5 7 4 1 9 4 5 1 2 6 1 32 Árboles de Expansión Algoritmo de Prim – El tiempo de ejecución del algoritmo depende de la búsqueda del arco de peso mínimo – Para cada nodo se añaden las informaciones: • key Para mantener ordenados los nodos • parent Nodo padre en el árbol de expansión – Q mantiene a te eo ordenados de ados los os nodos odos de acue acuerdo do a key ey – A guarda el MST A v, v.parent : u V – r – Q Grafos 33 Árboles de Expansión Algoritmo de Prim MST‐PRIM G, w, r : while Q Ø do ¡¡ Crítico !! foreach u in G.V do G V do u EXTRACT EXTRACT‐MIN MIN Q foreach v in G.Adyacencia u u.key Inicialización u parent u. parent NIL if v Q && Q && w u, v v.key key endfor v.parent u r.key k 0 # Nodo raíz 0 #N d í v.key k w u, v Q G.V A A v, v.parent endif dif endfor endwhile d hl Grafos 34 Árboles de Expansión A Algoritmo de Prim V ‐ A – Seguimiento (1/2) Nodo Adyac. Key Parent A B C B, 0 NIL B A, D NIL C A, D NIL D B, C NIL Nodo Adyac. Key Parent A B C B, 0 NIL B A, D 2 A C A, D 1 A D B, C NIL Nodo Adyac. Key Parent A B C B, 0 NIL B A, D 2 A C A, D 1 A D B, C 4 C Grafos 2 A Q = {A, B, C ,D} 3 1 C Q = {B, C ,D} u = A, v = B, v = C 4 A 2 D B 1 3 C Q = {B, D} u = C, C v=A A, v = D B A 4 2 D B 1 3 C 4 D 35 Árboles de Expansión Algoritmo de Prim A Seguimiento (1/2) Nodo Adyac. Key Parent A B, C 0 NIL B A, D 2 A C A, D 1 A D B C B, 4 C Nodo Adyac. Key Parent A B, C 0 NIL B A, D 2 A C A, D 1 A D B C B, Nodo Adyac. A 4 3 C 4 3 V \ A Q = {B, D} u = C, C v = A, A v=D A B 1 3 C Q = {D} u = B, B v = A, A v=D A 4 2 D B 1 3 B C Key Parent A B, C 0 NIL B A, D 2 A C A D A, 1 A D B, C 3 B Grafos 2 Q = {Ø} u = D, v = B, v = C 4 2 D B 1 3 C 4 D 36 Árboles de Expansión Análisis del algoritmo de Prim MST‐PRIM G, w, r : V |V| veces Grafos foreach u in G.V do u.key key u.parent NIL endfor r.key key 0 # Nodo raíz 0 # Nodo raíz Q G.V while Q Q Ø Ø do do u EXTRACT‐MIN Q foreach v in G.Adyacencia u Decrementar / E if v Q && Q && w u, v v.key k T cte v.parent u Grado(u) v.key w u, v veces A A A A u, u.parent Implícito endif endfor endwhile 37 Árboles de Expansión MST‐PRIM G, w, r : V ||V|| veces foreach u in G.V do G V do u.key u.parent NIL endfor r.key 0 # Nodo raíz Q G.V while Q Ø do u EXTRACT‐MIN Q f foreach h v in G.Adyacencia i G Ad i u if v Q && w u, v v.key Decrementar / E T cte v.parent u Grado(u) v.key k w u, v veces A A u, u.parent Implícito endif endfor endwhile Tiempo = V * T * TEXTRACT_MIN E * T * TDECREMENTAR_KEY Grafos 38 Árboles de Expansión • Análisis del algoritmo de Prim – TEXTRACT_MIN y TDECREMENTAR_KEY depende de la estructura de datos utilizada para implementar el conjunto Q – TTOTAL = V * TEXTRACT_MIN E * TDECREMENTAR_KEY Grafos Q TEXTRACT_MIN EXTRACT MIN TDECREMENTAR_KEY DECREMENTAR KEY TTOTAL array O(V) O(1) O(V2) Binary heap O(lg V) O(lg V) O(E lg V) Fibonacci Heap O(lg V) O(1) O(E + V lg V) amortizado amortizado Peor caso 39 Grafos 1 Conceptos, 1. Conceptos Definiciones y Representación 2 Conectividad y recorrido 2. 3 Árboles de expansión 3. 4 Caminos mínimos 4. 40 Caminos mínimos El p problema: ¿ ¿Cuál es la forma más rápida p de ir .... ? – Camino mínimo También ¿Cuál es la más barata? ¿ ¿Cuál es la de menor distancia recorrida? 1 A 2 B 1 2 5 C D 4 3 F E 1 2 caminos mínimos Grafos 41 Caminos mínimos Variantes del problema •BFS caminos mínimos en grafos no ponderados – Todos los enlaces con el mismo peso •Caminos mínimos a un destino desde el resto de nodos •Caminos mínimos para todos los pares de nodos – Una posible solución: calcular el camino mínimo para cada nodo Grafos 42 Caminos mínimos Definiciones •Se parte de un grafo dirigido y ponderado – G V,E V E y w: ER ER •w w p es es el peso del camino p p v0, v v1, ... v vk k w( p) w(vi1, vi ) i1 • u, v es el p peso del camino mínimo entre u y v min {w( p) : u P v} (u, v) Grafos Si existe un camino entre u y v No hay camino 43 Caminos mínimos j de arcos Técnica de la relajación •Asignar peso y predecesor a cada vértice/nodo – Peso al origen (v.d), inicialmente a infinito – Predecesor (v.p), nodo previo en el camino •Técnica de “Relajamiento” A d=5 2 B d=9 RELAX A d=5 Grafos 2 B d=7 iff B.d d A.d A d w A, B A then h B.d A.d w A,B B p A B.p A 44 Caminos mínimos Algoritmo de Bellman-Ford – – – – Camino mínimo a todos los nodos desde una fuente s Permite pesos negativos Devuelve los caminos mínimos y sus pesos asociados Complejidad O (|V|*|E|) (2 bucles anidados) BELLMAN‐FORD BELLMAN FORD G, G w, s ws: INIT‐SINGLE‐SOURCE G, s foreach n in 1 to |G.V‐1| do f foreach h u, v in G.E i G E do d RELAX u, v, w endfor endfor df foreach u, v in G.E do if v.d u.d w u, v return FALSE endif endfor return TRUE Grafos INIT‐SINGLE‐SOURCE G, s foreach v in G.V do v.d d∞ Relaja todas las v.p NIL aristas |V-1| veces endfor s.d d0 Evitar ciclos negativos RELAX u, v, w if v.d u.d w u,, v v.d u.d w u, v v.p u endif 45 Caminos mínimos g de Bellman-Ford Algoritmo A D=∞ 3 -1 B D=∞ 2 S D=0 C D=∞ 2 A D=3 3 2 δ(S, A) = 3 δ(S, B) = 2 Grafos C D=2 S D=0 4 D D=∞ -1 2 S D=0 3 -1 1 1 A D=3 relax relax 2 B D=2 -1 D D=6 δ(S,C) = 2 δ(S,D) = 3 4 2 C D=2 A D=3 3 -1 1 -1 2 S D=0 2 C D=2 1 B D=∞ -1 4 D D=∞ B D=2 1 -1 4 D D=3 “Relaja (C,D)” 46 Caminos mínimos Algoritmo de Bellman-Ford Bellman Ford (Con arcos de peso Negativo) – Problema: No encontrar el camino mínimo en presencia de ciclos A D=3 -4 B D=-1 D= 1 3 S D=0 δ (S,A) = w(S,A) = 3 δ (S,B) = -1 4 5 6 C d=5 D d=11 8 G d= ∞ d=-∞ -3 2 7 Para (S,C) hay infinitos caminos ( ) (s,c,d,c) (s,c), ( d ) ..... pero sólo uno de peso mínimo δ (S,C) = w(S,C) = 5 3 E d=-∞ d= ∞ F d=-∞ d= ∞ -6 Cuantas más vueltas menor peso Grafos Para (S,E) hay infinitos caminos (s,e), (s,e,f,e), (s,e,f,e,f,e) .... NO existe un camino mínimo δ (S,E) = -∞ Ídem para (S,F) y (S,G) 47 Caminos mínimos Al Algoritmo it de d Dijkstra Dijk t – – – – – – Grafos Grafos dirigidos con pesos no negativos Explorar todos los caminos más cortos desde la fuente Estrategia voraz S conjunto de nodos cuyo camino ya ha sido obtenido Q Montículo Min ordenado por v.d Más rápido p q que el algoritmo g de Bellman-Ford • Con Montículo Min, O ( (|V|+|E|) log |V|) • Sin utilizar Montículo,, O (|V| (| |2) 48 Caminos mínimos DIJKSTRA G DIJKSTRA G, w, s ws: INIT‐SINGLE‐SOURCE G, s SØ S Q G.V while hil Q Q Ø do Ød u EXTRACT‐MIN Q S S S u foreach v in G.Adyacencia u do RELAX u, v, w RELAX endfor endwhile d hl Grafos u tiene d (distancia) menor a la fuente (s) (s), en el conjunto V − S 49 Caminos mínimos Nodos en S Algoritmo de Dijkstra A D=∞ P= 3 1 2 S D=0 P= 2 C D=∞ P= A D=3 D 3 P=S 3 1 1 2 S D=0 P P= 2 C D=2 P=S relax 1 B D=∞ P= 3 S D=0 P= 4 1 D D=∞ D P= B D=∞ D P= D D=3 P=C 3 1 2 2 C D 2 D=2 P=S 1 2 B D=4 P=A 1 D D=3 P=C C D=2 P=S 1 1 relax 2 S D=0 P= A D=3 P=S 1 2 A D=3 P=S 3 4 1 relax 2 S D=0 P= Grafos relax A D=3 P=S C D=2 P=S 1 B D=∞ P= 1 4 D D=∞ P= B D=4 P=A 1 4 D D=3 P=C 4 ¿Existe algún camino alternativo? 50 Caminos mínimos Nodos en S Algoritmo de Dijkstra A D=3 P=S 3 B D=∞ P= 1 2 S D=0 P= 2 C D=2 P=S 1 3 D D=3 P=C 2 A D=3 P S P=S 3 2 S D=0 P= 2 Grafos 1 C D=2 P=S 1 1 2 S D=0 P= 4 1 relax A D=3 P=S P S C D 2 D=2 P=S 1 B D=4 P=D P D relax 4 1 D D=3 P=C B D=4 P D P=D relax 4 1 D D=3 P=C 51