360 likes | 597 Views
Universidad de Los Andes Facultad de Ingeniería Postgrado en Computación. Analisis y Diseño de Algoritmos Tema: Grafos. Andr é s Arcia. Arboles de Expansión Mínima. Usos de los AEM: Circuiteria electrónica: se desea unir n pines con n-1 cables.
E N D
Universidad de Los Andes Facultad de Ingeniería Postgrado en Computación Analisis y Diseño de AlgoritmosTema: Grafos Andrés Arcia
Arboles de Expansión Mínima • Usos de los AEM: • Circuiteria electrónica: se desea unir n pines con n-1 cables. • Cableado de la compañía telefónica, cable, etc. • Identificación de grupos en un conjunto de puntos. • Crear grafos esparcidos que dan bastante información del grafo original. • Soluciones posibles: O(ElgV) • Algoritmo de Kruskal. • Algoritmo de Prim. heaps fibonacci ^ (|V| << |E|) => O(E + VlgV)
Definición • Un árbol de expansión mínima de un grafo con pesos es el árbol de expansión cuyos arcos suman el peso mínimo.
¿Cómo funciona? • Estrategia: • Dado un grafo no dirigido, w : E -> R. • MST = Σ1 arco seguro por vez. • Existe A AEM. • ¿(u,v) A? si, entonces es seguro.
Algoritmo 1 A = Ф 2 while A does not form a MST • do find an edge (u,v) safe for A • A<-A U {(u,v)} 5 return A
Arcos Seguros • Corte: (S, V-S) es una partición de V. Respeta A A corte Blancos: parte del MST. Negros: aún por ser considerados. Debe encontrarse un Arco Liviano del corte para incluirlo en la solución.
Noción de Corte Teorema: Sea G = (V,E) un grafo conexo, con w : ER. Sea A un subgrafo de E que se incluye en algún MST G. Sea (S, V-S) cualquier corte de G que respeta A y sea (u,v) un Arco Ligero que cruza (S,V-S). Luego (u,v) es seguro para A.
Noción de Corte Prueba: Sea T un MST y A un subgrafo de T. Sea (u,v) T. Deberiamos construir T´ que es el MST buscado. Se plantea T y un corte que respeta A. Hay un camino p de u a v. Dado que u y v son opuestos, hay al menos otro arco (x,y) T que cruza el corte. Al cambiar (x,y) por (u,v) tenemos T’ que es un MST. w(T’) = w(T) – w(x,y) + w(u,v) w(T’) <= w(T) Pero se supone que T es MST, por lo que w(T)<=w(T’), se trata entonces del mismo arbol. T’ es un MST. A T’, pues A T y (x,y) A => A U {(u,v)} T’. Luego, como T’=T es un MST y (u,v) es seguro.
Análisis • El loop 2-4 se ejecuta |V|-1 veces => O(V). Tarea: Hacer 24.1-4 y 24.1-7.
Algoritmo de Kruskal KRUSKAL(G,w) 1 A Ф 2 for each vertex v V[G] • do MAKE-SET(V) 4 sort the edges E by nondecreasing weight w. 5 for each edge (u,v) E in order • do if FIND-SET(u) ≠FIND-SET(v) • then AA U {(u,v)} • UNION(u,v) O(V) O(ElgE) O(ElgE) Total: O(ElgE)
Ejemplo 8 7 b c d 4 2 9 4 a 11 i 14 e 7 6 8 10 h g f 1 2
Algoritmo de Prim PRIM(G,w,r) 1 Q V[G] 2 for each u Q • do key[u] 4 key[r] 0 5 [r] NIL 6 while Q≠Ф • do EXTRACT-MIN(Q) • for each v Adj[u] • do if v Q and w(u,v) < key[v] • then [v]u • key[v] w(u,v) O(V) heap binario O(VlgV) O(lgV) O(ElgV) O(lgV) Total: O(Vlg V + Elg V) = O(E lg V)
Ejemplo • Para un ejemplo de implantación vea: http://students.ceid.upatras.gr/~papagel/project/adjoin.htm
Problema del Camino más Corto Definición: Dado un grafo dirigido G=(V,E) con una función de pesos w: ER, el peso de un camino p=<v0, v1, …, vk> es la suma de los pesos de los arcos: w(p) = Σ(i=1, k, w(vi-1,vi)) y el camino mínimo sera: (u,v) = min {w(p): u ~> v}, si hay camino de u a v, en otro caso será .
Variantes del Problema Se requiere averiguar el camino más corto desde un nodo s V a cada uno v V-S. • Problema de todos los caminos cortos a un destino simple (común). Solución: invertir la salida. • Problema del camino más corto entre un par de nodos. • Problema del camino más corto de todos los pares. Solución: Ejecutar el algoritmo para todos los pares desde cada nodo.
Arcos Negativos Los caminos más cortos están bien definidos ssi no existen ciclos negativos. De otra manera no estará bien definido, pues cada vez que demos vuelta a ciclo el camino será más corto. 3 a b (a,b) = - -4
Caminos Cortos y Relajación Para hacer más entendibles los algoritmos de caminos más cortos, es esencial comprender la técnica de relajación. La Relajación es el método mediante el cual se hace decrecer la cota superior en el peso actual del camino más corto hasta que iguale a la cota del camino más corto.
Relajación INITIALIZATION(G,s) 1 for each vertex v V[G] • do d[v] • [v] NIL 4 d[s] 0 Relajar es mejorar la distancia de un nodo a otro. Dado (u,v) se pregunta si el camino calculado hasta ahora hasta ves mejor que el camino hasta u y luego w(u,v). RELAX(u,v,w) 1 if d[v] > d[u] + w(u,v) • then d[v] d[u] + w(u,v) • [v] u 2 2 5 6 5 9 2 2 5 6 5 7
Propiedades de la Relajación • Una vez relajado (u,v), d[v] d[u] + w(u,v) • Luego de la inicialización d[v] (s,v) vV. • Si no hay camino entre sV y vV, luego de inicializar el grafo, d[v]=(s,v)=. • Dado un camino s~>uv es un camino corto (s,v) si, d[u]=(s,u) antes de la llamada a RELAX y luego sera d[v]=(s,v).
Algoritmo de Dijkstra Resuelve el camino mínimo para aquellos grafos dirigidos, con peso no negativo. Entonces se asume w(u,v)0 (u,v) E. Al final del algoritmo se tiene que para todos los vértices d[v] = (s,v).
Algoritmo de Dijkstra DIJKSTRA (G,w,s) 1 INITIALIZE(G,s) 2 SФ 3 QV[G] 4 while Q≠Ф • do u EXTRACT-MIN(Q) • S S U {u} • for each vertex v Adj[u] • do RELAX(u,v,w)
Ejemplo u v 1 10 9 2 3 s 4 6 7 5 2 x y
Análisis Si EXTRACT-MIN es un arreglo lineal O(V). Como hay O(V) operaciones de ese tipo O(V2). Hay (E) operaciones con arcos. TOTAL: O(V2 + E) = O(V2). Si utilizamos un heap binario, la operación DECREASE-KEY en RELAX y EXTRACT-MIN sería O(lgV). TOTAL: O((V+E)lgV) = O(ElgV), si todos los nodos son alcanzables desde el origen. Se puede mejorar aún más si Q se implanta con heaps de fibonacci. El costo amortizado de los |V| EXTRACT-MIN es O(lgV) y los |E| DECREASE-KEY serán O(1).
Algoritmo de Bellman - Ford Resuelve caminos cortos desde un nodo en el caso general, aún con pesos negativos. BELLMAN-FORD(G,w,s) 1 INITIALIZE(G,s) 2 for i1 to |V[G]| - 1 • do for each edge (u,v) E[G] • do RELAX(u,v,w) 5 for each vertex (u,v) E[G] • do if d[v] > d[u] + w(u,v) • then return false 8 return true (V) (V) (E) TOTAL: (VE)
Ejemplo u v 5 6 -2 -4 -3 0 8 z 7 2 7 9 x y Orden de relajación: (u,v), (u,x), (u,y), (v,u), (x,v), (x,y), (y,v), (y,z), (z,u), (z,x).
Funcionamiento Lema: Sea G(V,E) un grafo con peso w: ER, dirigido. Sea sV el vertice origen y sea s~>uv un camino corto en G para algun par de vertices u, v V. Suponga que G se inicia con INITIALIZE(G,s) y luego existe una secuencia de pasos de relajación RELAX(u,v,w). Si d[u]=(s,u) en cualquier momento previo de la llamada con (u,v), entonces d[v]= (s,v) todo el tiempo despues de la llamada. Prueba: Sabiendo que d[u]= (s,u) en algún momento antes de relajar (u,v), y que esto se mantiene al dejar el arco (u,v): d[v] d[u] + w(u,v) = (s,u) + w(u,v) = (s,v)
Funcionamiento Lema: Sea G(V,E) un grafo con peso y dirigido con origen s y función peso w:ER. Asuma que G no contiene ciclos negativos alcanzables desde s. Al terminar BELLMAN-FORD, se tiene d[v]= (s,v) vV y s~>v. Prueba: Por inducción. Sea v un nodo alcanzable desde s, y p=<v0, v1, …, vk> un camino corto desde s a v, donde v0=s y vk=v. Como hay |V|-1 pasadas es suficiente probar por inducción. Base: d[v0]= (s,v0)=0, y se mantiene… Paso inductivo: d[vi-1]= (s,vi-1) luego de la (i-1)esima pasada, el arco (vi-1,vi) se relaja en la i-esima pasada. Por el lema anterior se concluye que d[vi]= (s,vi) y se mantiene…
Caminos Cortos en DAGs. Si se relajan los arcos de un DAG con peso G(V,E) y de acuerdo con su orden topológico, se puede computar los caminos más cortos en (V+E). En los DAGs los caminos cortos siempre estan bien definidos pues no hay ciclos.
Caminos Cortos en DAGs. DAG-SHORTEST-PATHS 1 Topologically sort the vertex of G 2 INITIALIZE(G,s) 3 for each vertex u taken in topollogically sorted order 4 do RELAX(u,v,w) (V+E) (E) TOTAL: (V+E)
Ejemplo 1 6 u r s t v x 5 2 7 -1 -2 0 2 4 3
Funcionamiento Teorema: Si un grafo G=(V,E) tiene como origen s y no hay ciclos, al terminar el algoritmo DAG-SHORTEST-PATHS, d[v]=(s,v) v V y G es un árbol de caminos más cortos. Prueba: 1) d[v] = (s,v) v V. Si (s~>v) d[v]=(s,v)=. 2) Suponga s~>v y el camino es p=<v0, v1, …, vk>, v0=s y vk=v. Como esta en orden topológico, p=(v0,v1), (v1,v2)…(vk-1,vk), y por inducción se puede demostrar que d[vi]=(s,vi) y al finalizar G es un árbol de caminos más cortos.
Restricciones Diferenciales y Caminos Cortos Programación Lineal:En el problema general de la programación lineal se tiene una matriz mxn llamada A, un vector b de tamaño m y un vector x de n elementos que maximiza la función objetivo (i=1, n, cixi) dado las m restricciones de la forma Axb.
Restricciones Diferenciales En la matriz, cada fila contiene 1, -1 y el resto 0. Se plantea entonces: xi-xJbk. donde: 1i,jn y 1km Ejemplo:
Funcionamiento Lema: Sea x=(x1, x2, …, xk) una solución de un sistema Axb y sea d una constante cualquiera. Luego x=(x1+d, x2+d, …, xk+d) tambien es una solución. Prueba: (xj+d) – (xi+d) = xj-xi
Grafos de Restricciones Desde el punto de vista de los grafos, A puede ser interpretada como una matriz de incidencia dada por un grafo de n nodos y m arcos. Cada nodo vi corresponde a una de las n variables desconocidas. Cada arco corresponde a una de las m desigualdades que implica a dos variables. V = {v0, v1, …, vn} E = {(vi,vj): xj-xibk es una restricción} U {(v0,v1), (v0,v2),…,(v0,vn)} w(vi,vj) = bk w(v0,vi) = 0
Análisis Observese que en la solución xi0. La solución será: x=((v0,v1), (v0,v1), …, (v0,vn)), si G no tiene ciclos negativos, de lo contrario la solución no existe. Esto sugiere usar BELLMAN-FORD. Dado que hay n+1 nodos y n+m arcos, se puede resolver el sistema en O((n+1)(n+m)) = O(n2+nm). Tarea: Hacer 25.5-1, 25.5-2 y 25-2. ¿Por qué funciona? Porque se trata de distancias mínimas y estas cumplen una restricción de cota.