La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Analisis y Diseño de Algoritmos Tema: Grafos

Presentaciones similares


Presentación del tema: "Analisis y Diseño de Algoritmos Tema: Grafos"— Transcripción de la presentación:

1 Analisis y Diseño de Algoritmos Tema: Grafos
Universidad de Los Andes Facultad de Ingeniería Postgrado en Computación Analisis y Diseño de Algoritmos Tema: Grafos Andrés Arcia

2 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)

3 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.

4 ¿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.

5 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

6 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.

7 Noción de Corte Teorema: Sea G = (V,E) un grafo conexo, con
w : ER. 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.

8 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.

9 Análisis El loop 2-4 se ejecuta |V|-1 veces => O(V). Tarea:
Hacer y

10 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 AA U {(u,v)} UNION(u,v) O(V) O(ElgE) O(ElgE) Total: O(ElgE)

11 Ejemplo 8 7 b c d 4 2 9 4 a 11 i 14 e 7 6 8 10 h g f 1 2

12 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)

13 Ejemplo Para un ejemplo de implantación vea:

14 Problema del Camino más Corto
Definición: Dado un grafo dirigido G=(V,E) con una función de pesos w: ER, 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á .

15 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.

16 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

17 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.

18 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 v es 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

19 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)  vV. Si no hay camino entre sV y vV, luego de inicializar el grafo, d[v]=(s,v)=. Dado un camino s~>uv es un camino corto (s,v) si, d[u]=(s,u) antes de la llamada a RELAX y luego sera d[v]=(s,v).

20 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).

21 Algoritmo de Dijkstra DIJKSTRA (G,w,s) 1 INITIALIZE(G,s) 2 SФ
3 QV[G] 4 while Q≠Ф do u  EXTRACT-MIN(Q) S  S U {u} for each vertex v  Adj[u] do RELAX(u,v,w)

22 Ejemplo u v 1 10 9 2 3 s 4 6 7 5 2 x y

23 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).

24 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 i1 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)

25 Ejemplo u v 5 6 -2 -4 -3 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).

26 Funcionamiento Lema: Sea G(V,E) un grafo con peso w: ER, dirigido. Sea sV el vertice origen y sea s~>uv 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)

27 Funcionamiento Lema: Sea G(V,E) un grafo con peso y dirigido con origen s y función peso w:ER. Asuma que G no contiene ciclos negativos alcanzables desde s. Al terminar BELLMAN-FORD, se tiene d[v]= (s,v)  vV 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…

28 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.

29 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 do RELAX(u,v,w) (V+E) (E) TOTAL: (V+E)

30 Ejemplo 6 1 r u s t v x 5 2 7 -1 -2 2 3 4

31 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.

32 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 Axb.

33 Restricciones Diferenciales
En la matriz, cada fila contiene 1, -1 y el resto 0. Se plantea entonces: xi-xJbk. donde: 1i,jn y 1km Ejemplo: 1 -1 x1 x2 x3 4 1 -2

34 Funcionamiento Lema: Sea x=(x1, x2, …, xk) una solución de un sistema Axb 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

35 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-xibk es una restricción} U {(v0,v1), (v0,v2),…,(v0,vn)} w(vi,vj) = bk w(v0,vi) = 0

36 Análisis Observese que en la solución xi0. 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 , y 25-2. ¿Por qué funciona? Porque se trata de distancias mínimas y estas cumplen una restricción de cota.


Descargar ppt "Analisis y Diseño de Algoritmos Tema: Grafos"

Presentaciones similares


Anuncios Google