La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte

Presentaciones similares


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

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

2 Caminos Cortos en Todos los Pares de Arcos
Dado un grafo dirigido G=(V,E) con una función de peso w:ER. Se desea encontrar todos los caminos más cortos (de menor peso) entre todos los pares (u,v)  V.

3 ¿Cómo resolver el problema?
En una primera instancia utilizando algún algoritmo de caminos cortos desde un solo vértice, |V| veces, una vez para cada vértice. Si todos los arcos son positivos  Dijkstra. Luego: Utilizando arreglos para las colas de prioridad  O(V3+VE) = O(V3) Utilizando heaps binarios  O(VElgV) Utilizando heaps fibonacci  O(V2lgV+VE) Si hay arcos negativos  Bellman-Ford, una vez por vértice.  O(V2E) y para grafos densos O(V4)

4 Representación Se dispone de una matriz de entrada W de tamaño nxn, que representa los pesos de un grafo dirigido G=(V,E) de n arcos. Luego, para W=(wij) 0 si i=j peso de (i,j) si i≠j y (i,j)  E  si i≠j y (i,j)  E wij

5 Salida Una matriz D=(dij) con las distancias mínimas entre el par (i,j). Una matriz =(ij), donde ij=NULL si i=j ó no hay camino de i a j, de otra forma contiene al predecesor de j en el camino mínimo. El grafo resultante se define como: G,i= (V,i, E,i) donde V,i={ jV : ij ≠ NULL } U { i } E,i={(ij,j) : j V,i y ij≠NULL

6 Impresión del Camino PRINT-ALL-PAIRS-SP(,i,j) 1 if i=j 2 then print i
else if (ij=NULL) then print “no path from” i “to” j else PRINT-ALL-PAIRS-SP(,i,ij) print j

7 Multiplicación de Matrices y Caminos Cortos
Se presenta un algoritmo basado en programación dinámica para resolver todos los caminos más cortos en todos los pares de nodos del grafo G=(V,E). El método es similar a la multiplicación de matrices. Recapitulando la programación dinámica: Caracterizar la estructura de la solución óptima. Definir recursivamente el valor de la solución óptima. Computar el valor de la solución óptima de abajo hacia arriba.

8 Estructura del Camino más Corto
Sabemos que todos los subcaminos de los caminos más cortos son también caminos más cortos. Supongamos W=(wij), asumamos que no hay ciclos negativos y que el camino p tiene m arcos que van de i a j y, p es un camino corto. si i=j p0 si i≠j pi ~p’> kj tiene m-1 nodos (i,j) = (i,k) + w(k,j)

9 Solución Recursiva Sea dij(m) el peso mínimo para algún camino de i a j con m arcos: si m=0  no hay arcos dij(0) = 0 si i=j  si i≠j Si m1  dij(m) = min (1kn, dik(m-1) + wkj) ¿Cuál es el límite de m? (i,j) = dij(n-1)=dij(n)=dij(n+1)=…

10 Cálculo de la Solución de Abajo hacia Arriba
Entrada: W=(wij), luego se calcula una serie de matrices D(1), D(2), …, D(n-1) | D(m)=(dij(m)). D(n-1) contiene los caminos más cortos.

11 Cálculo de la Solución de Abajo hacia Arriba
En esencia el siguiente algoritmo extiende la solución del camino más corto, un arco a la vez. EXTEND-SHORTEST-PATHS (D,W) 1 n  rows[D] 2 let D’=(d’ij) be a nxn matrix. 3 for i  1 to n do for j  1 to n do d’ij   for k  1 to n do d’ij = min(d’ij, dik + wkj) 8 return D’ Este algoritmo es O(n3). Observe los tres for anidados.

12 Relación con la Multiplicación de Matrices.
Suponga C=A.B; donde A,B y C son matrices nxn. La multiplicación de matrices se define: cij = (k=1, n, aik.bkj)  dij(m)=min(1kn, dik(m-1) + wkj) d(m-1)a wb d(m)c min+ +  .

13 Algoritmo Sea AB un producto matricial retornado por EXTEND-SHORTEST-PATHS(A,B) D(1) = D(0).W = W D(2) = D(1).W = W2 D(3) = D(2).W = W3 D(n-1) = D(n-2).W = Wn-1 SLOW-ALL-PAIRS-SHORTEST-PATHS(W) 1 n  rows[w] 2 D(1)  W 3 for m 2 to n-1 do D(m)  EXTEND-SHORTEST-PATHS(D(m-1),w) 5 return D(n-1) O(n4)

14 Mejora del Tiempo de Ejecución
¿Cuál es el objetivo? R: D(n-1) Recordemos que si no hay ciclos negativos, D(m)=D(n-1)  m  n-1 Así, podemos computar D(n-1) en solo lg(n-1), haciendo D(1) = W D(2) = W2 = W.W D(4) = W4 = W2. W2 D(8) = W8 = W4. W4 D(2^ln(n-1)) = W(2^ln(n-1)) = W(2^(ln(n-1)-1)) . W(2^(ln(n-1)-1)) La técnica se denomina “repetición cuadrática”.

15 Algoritmo FASTER-ALL-PAIRS-SHORTEST-PATHS(W) 1 nrows[w] 2 D(1)W
4 while n-1 > m do D(2m)EXTEND-SHORTEST-PATH(D(m), D(m)) m 2m 7 return D(m) n-12m2n-2 O(n3lgn)

16 Algoritmo Floyd-Warshall
Estructura del camino más corto Se consideran los vértices intermedios (v.i.) de un camino simple p=<v1, v2,…, vl>, es decir, cualquier vertice que no sea v1 y vl. El algoritmo se basa en la siguiente observación: Sean los nodos de G, V={1,2,…n} y considere el subconjunto {1,2,…,k} para algún k. Para cualquier par de vertices i,j V considere todos los caminos de i a j cuyos vertices son todos obtenidos de {1,2,…,k} y sea p el camino de minimo peso entre ellos. El algoritmo explota la relación entre el camino p y los caminos cortos de i a j con vértices intermedios en el conjunto {1,2, …, k-1}. Si tenemos que p se divide en i~p1~>k~p2~>j. p1 y p2 son caminos cortos con vértices intermedios en {1,2,...,k}.

17 Solución Recursiva Sea dij(k) el peso del camino más corto de i a j con v.i. en {1,2,…,k}. Cuando k=0 el camino de i a j no tiene un v.i. numerado más alto que 0 y de hecho no tiene v.i. dij(k) = Wij si k=0 min(dij(k-1) , dik(k-1) + dkj(k-1) ) si k1

18 Computo de Abajo hacia Arriba
FLOYD-WARSHALL(W) 1 nrows[n] 2 D(0)  w 3 for k  1 to n do for i 1 to n do for j 1 to n dij(k) min(dij(k-1), dik(k-1)+ dkj(k-1)) return D(n) (n3)

19 Ejemplo Valores iniciales D(0) = (0) = D(1) = (1) = D(2) = (2) = 3
3 8 -4 1 7 4 2 -5 6 NIL 1 2 3 4 5 D(0) = (0) = NIL 1 2 3 4 5 3 8 -4 1 7 4 2 5 -5 -2 6 D(1) = (1) = 3 8 4 -4 1 7 5 11 2 -5 -2 6 NIL 1 2 3 4 5 D(2) = (2) =

20 Construcción del camino más corto
Se selecciona el mismo predecesor que en camino más corto, pero queda atado por apuntadores a los padres en una cadena. ij(k-1) si dij(k-1)  dik(k-1)+ dkj(k-1) kj(k-1) si dij(k-1) > dik(k-1)+ dkj(k-1) ij(k)

21 Clausura transitiva de un grafo dirigido
Dado un grafo dirigido G=(V,E) con un conjunto de nodos V = {1,2,…,n} se quiere averiguar si hay un camino de i a j  i,j  V. La clausura transitiva se define: G*=(V,E*) donde E*={(i,j): hay camino de i a j en G}.

22 ¿Cómo se calcula? Asignar peso 1 a todos los arcos en E y ejecutar Floyd-Warshall  O(n3). Si hay camino  dij<n Si no hay camino  dij= Otra manera es utilizando los operadores lógicos  y  en vez de los operadores min y + en FLOYD-WARSHALL. tij(0) = 0 si i≠j y (i,j)  E. = 1 si i=j o (i,j)  E. Para k1: tij(k) = tij(k-1)  (tik(k-1)  tkj(k-1)). (n3).

23 Algoritmo de Jhonson para grafos esparcidos
Encuentra los caminos más cortos en O(V2lgV + VE), que es asintóticamente mejor que los otros dos métodos. Usa Dijkstra y Bellman-Ford. Usa la técnica de reasignación de pesos. Si todos los pesos son positivos, entonces se utiliza Dijkstra en c/u de los nodos y con heap fibonacci se tiene O(V2lgV + VE), de lo contrario se recalculan los pesos para que queden todos positivos y se aplica la misma técnica.

24 Reasignación de Pesos Sea  el nuevo peso asignado.  debe cumplir con: (u,v)  E, (u,v) con w:ER es también (u,v) con  :ER. (u,v)  E, (u,v)0.  se determina en O(VE).

25 Reasignación de Pesos Lema:
La reasignación de pesos no cambia los caminos más cortos. Sea G=(V,F) con w:ER y h:VR cualquier función que mapea VR. Luego (u,v)E: (u,v) = w(u,v) + h(u) – h(v). Sea p = <v0, v1, … vk> un camino de v0 a vk. w(p)=(v0,vk)  (p)=(v0,vk) G tiene ciclo negativo  G´ tiene ciclo negativo

26 Reasignación de Pesos Prueba: (p) = w(p) + h(v0) – h(vk) Se tiene
(p) = (i=1, k, (vi-1, vi)) = (i=1, k, w(vi-1, vi) + h(vi-1) - h(vi)) = (i=1, k, w(vi-1, vi)) + h(v0) – h(vk) = w(p) + h(v0) – h(vk) Suponga que hay un camino más corto p’ desde v0 a vk usando . Entonces (p’)< (p). w(p’) + h(v0) – h(vk) = (p’) < w(p) = w(p)+h(v0)+h(vk) Que implica que w(p’) < w(p) que contradice que p es el camino más corto. Suponga que hay un ciclo negativo c = <v0, v1, …, vk> Luego, (c)=w(c) + h(v0) – h(vk) =w(c)  si hay ciclo negativo en (c) tambien lo hay en w(c).

27 Algoritmo JHONSON 1 compute G’, V[G’]=V[G] U {s}, E[G’]=E[G]U{(s,v) : v  V[G]} 2 if BELLMAN-FORD(G’,w,s) = false then print “there is a negative weight cycle” else for each vertex v  V[G] do set h(v) to the value computed by the BELLMAN-FORD algorithm. for each edge (u,v)  E[G’] do (u,v)w(u,v) + h(u) – h(v) for each vertex u  V[G] do run Dijkstra(G, , u) to compute ’(u,v)  u  V[G] for each vertex v  V[G] do duv ’(u,v) + h(v) – h(u) return D

28 Ejemplo -1 3 4 7 1 -5 8 5 -4 2 -5 -1 -4 4 6 10 -5 13 2 4 -4 2

29 Ejemplo 2/1 0/0 0/0 2/-3 2/3 0/-4 0/-4 2/2 2/-1 0/1 4 4 10 10 13 13 2
4 10 10 0/0 2/-3 2/3 0/-4 13 13 2 2 0/-4 2/2 2/-1 0/1 2 2

30 Flujo Máximo Imaginemos algún flujo que va desde un sitio s, donde es producido, hasta un sitio t donde es consumido a la misma tasa de producción. Intuitivamente, el flujo en cualquier punto de la red es la tasa a la que se mueve el material. Usos: modelado de flujo en tuberías, líneas de ensamblado, corrientes eléctricas, información en redes de comunicación, etc.

31 Flujo Máximo Cada arco dirigido puede ser visto como un conducto por donde pasa el material, según las siguientes restricciones: Cada conducto tiene una capacidad máxima finita. Se cumple la conservación de flujo. fi = fo (por nodo). Problema del Flujo Máximo: ¿Cuál es la mayor tasa a la que se puede llevar material sin violar ninguna restricción?

32 Redes de Flujo Una red de flujo G=(V,E) es un grafo dirigido tal que cada arco (u,v)E posee una capacidad c(u,v)0. Si (u,v)E, c(u,v)=0. Se distinguen 2 vertices, el fuente “s” y el destino “t”. Cada vertice vV esta en algun s~>v~>t. El grafo es conexo |E||V|-1

33 Flujo El flujo está dado por una función con imagen en los reales. f:VxVR que satisface: Restricción de capacidad: u,v  V, f(u,v)c(u,v). Simetría distorsionada: u,v  V, f(u,v)=-f(v,u). Conservación de flujo: u,v  V-{s,t} se requiere que vV f(u,v) = 0 Sea f(u,v) el flujo desde u hasta v, el valor de ese flujo se define como |f|= f(s,v) vV

34 Relación entre 2 nodos 8 de v1 a v2 3 de v2 a v1 cancelación
7 más de v2 a v1 v1 v2 10 4 v1 v1 v1 v1 8/10 8/10 5/10 10 4 3/4 4 2/4 v2 v2 v2 v2

35 Redes de múltiples entradas y múltiples salidas
T’ S’

36 Metodo Ford-Fulkerson
El método iterativo depende de tres ideas importantes: Red residual Aumento de camino Cortes Para ello usaremos el teorema max-flow min-cut que caracteriza el flujo máximo en terminos de cortes de la red de flujo.

37 Iteración En cada iteración se va consiguiendo un valor de flujo que aumenta el camino, es decir, podemos aumentar el flujo en un camino de s a t. Este proceso se repite hasta que no haya más posibilidad de aumentar. FORD-FULKERSON-METHOD(G,s,t) 1 initialize flow f to 0 2 while there exists an augmenting path p. do augment flow f along p 4 return f.

38 Red Residual La red residual consiste en arcos que admiten más flujo.
Dada una red de flujo G=(V,E) con fuente s y destino t. Sea f el flujo en G, y considere un par de vertices u,v V. La cantidad de flujo adicional que se puede verter sobre u,v es la capacidad residual. cf(u,v) = c(u,v) – f(u,v) Ejemplo: c(u,v)=16, f(u,v)=-4 cf(u,v)=20 c(u,v)=16, f(u,v)=10 cf(u,v)=6 La red residual se define como: Ef – {(u,v)  VxV: cf(u,v) > 0}

39 Aumento de Caminos Dada una red de flujo G=(V,E), un camino aumentado p es un camino simple de s a t en la red residual Gf. Este camino solo admite flujo positivo. La cantidad máxima de flujo que puede llevarse por los arcos en un aumento de p se denomina capacidad residual de p, y está dado por: cf(p) = min {cf(u,v): (u,v)  p}

40 Corte de la red de flujo El método aumenta repetidamente el flujo a través de los caminos de aumento hasta alcanzar el máximo. Un corte (S,T) de la red de flujo G=(V,E) esuna partición de V en S y T=V-S tal que sS y tT. Si f es el flujo, entonces el flujo de red a través del corte (S,T) se define f(S,T). La capacidad del corte (S,T) es C(S,T).

41 Teorema max-flow min-cut
Teorema: El máximo valor de entre todos los flujos en una red es igual a la capacidad mínima de entre todos los cortes. Prueba: Es suficiente con mostrar un flujo y un corte tal que sean iguales en valor. Luego, el flujo ha de ser máximo pues no puede rebasar la capacidad del corte y el corte ha de ser mínimo porque ninguna otra capacidad puede ser menor que el valor actual del flujo.

42 Algoritmo de Ford-Fulkerson
FORD-FULKERSON(G,s,t) 1 for each edge (u,v)  E[G] do f[u,v]0 f[v,u]0 4 while there exists a path p from s to t in the residual network Gf do cf(p)=min {cf(u,v) : (u,v)p} for each edge (u,v) in p do f[u,v]  f[u,v] + cf(p) f[v,u]  -f[u,v]

43 Ejemplo s s s 1 2 1 2 1 2 3 4 3 4 3 4 5 5 5 t t t Cmin = 2 Cmin = 1
2 2 3 3 2 1 2 1 2 1 2 1 2 1 1 1 1 1 1 3 1 2 1 1 1 2 1 3 4 3 4 3 4 1 2 3 3 2 5 5 2 2 5 t t t Cmin = 2 Cmin = 1 Cmin = 1

44 Ejemplo S T Flujo Máximo s 1 2 Dirección del Flujo 3 4 5 t 2 2 1 1 1 2
2 1 1 2 1 1 Dirección del Flujo 2 1 1 3 4 2 2 1 5 t T 1 2

45 Análisis El algoritmo está acotado por O(|f*|) donde f* es el flujo máximo. u u s 1 s 1 t 1 t 1 v v u s 1 1 t 1 v

46 Mejora Si hallamos el camino mínimo de s a t en la red residual donde cada arco tiene peso 1, se puede mejorar Ford-Fulkerson. Este método es llamado Edmonds-Karp y esta acotado por O(VE).


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

Presentaciones similares


Anuncios Google