grafosiii
TRANSCRIPT
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 1/46
Analisis y Diseño de AlgoritmosTema: Grafos
3ra Parte
Andrés Arcia
Universidad de Los Andes
Facultad de Ingeniería
Postgrado en Computación
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 2/46
Caminos Cortos en Todos los
Pares de Arcos Dado un grafo dirigido G=(V,E) con una
función de peso w:EpR. Se desea
encontrar todos los caminos más cortos(de menor peso) entre todos los pares
(u,v) V.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 3/46
¿Cómo resolver el problema?
En una primera instancia utilizando algún algoritmo decaminos cortos desde un solo vértice, |V| veces, una vezpara 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)
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 4/46
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)
wij
0 si i=j
peso de (i,j) si ij y (i,j) Eg si ij y (i,j) E
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 5/46
Salida
Una matriz D=(dij) con las distancias mínimasentre el par (i,j).
Una matriz 4=(Tij), donde Tij=NULL si i=j ó no
hay camino de i a j , de otra forma contiene alpredecesor de j en el camino mínimo.
El grafo resultante se define como:
GT,i= (VT,i, ET,i) dondeVT,i={ jV : Tij NULL } U { i }
ET,i={(Tij,j) : j V
T,i y TijNULL
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 6/46
Impresión del Camino
PRINT-ALL-PAIRS-SP(4,i,j)
1 if i=j
2 then print i3 else if (Tij=NULL)
4 then print ³no path from´ i ³to´ j
5 else
6 PRINT-ALL-PAIRS-SP(4,i,Tij)
7 print j
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 7/46
Multiplicación de Matrices y
Caminos Cortos Se presenta un algoritmo basado enprogramación dinámica para resolver todos loscaminos más cortos en todos los pares denodos del grafo G=(V,E).
El método es similar a la multiplicación dematrices.
Recapitulando la programación dinámica:1. Caracterizar la estructura de la solución óptima.
2. Definir recursivamente el valor de la soluciónóptima.
3. Computar el valor de la solución óptima de abajohacia arriba.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 8/46
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 marcos que van de i a j y, p es un camino corto.
si i=j p
0si ij pi ~p¶> kp j tiene m-1 nodos
H(i,j) = H(i,k) + w(k,j)
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 9/46
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 arcosdij
(0) = 0 si i=j
g si ij
Si mu1 dij(m) = min (1eken, dik
(m-1) + wkj)
¿Cuál es el límite de m?
H(i,j) = dij(n-1)=dij
(n)=dij(n+1)=«
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 10/46
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.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 11/46
Cálculo de la Solución de
Abajo hacia Arriba En esencia el siguiente algoritmo extiende la solucióndel camino más corto, un arco a la vez.
EXTEND-SHORTEST-PATHS (D,W)
1 n n rows[D]
2 let D¶=(d¶ij) be a nxn matrix.3 for i n 1 to n
4 do for j n 1 to n
5 do d¶ijn g6 for k n 1 to n
7 do d¶ij = min(d¶ij, dik + wkj)
8 return D¶
Este algoritmo es O(n3). Observe los tres for anidados.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 12/46
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 = 7(k=1, n, aik.bkj) p dij(m)=min(1eken, dik
(m-1) + wkj)
d(m-1)pa
wpb
d(m)pc
minp+
+ p .
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 13/46
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 nn rows[w]
2 D(1) nW
3 for mn2 to n-1
4 do D(m) n EXTEND-SHORTEST-PATHS(D(m-1),w)
5 return D(n-1)
O(n4)
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 14/46
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 u n-1
Así, podemos computar D(n-1) en solo «lg(n-1)», haciendo
D(1) = WD(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´.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 15/46
Algoritmo
FASTER-ALL-PAIRS-SHORTEST-PATHS(W)
1 nnrows[w]
2 D(1)nW
3 m n 14 while n-1 > m
5 do D(2m)nEXTEND-SHORTEST-PATH(D(m), D(m))
6 m n2m
7 return D(m)
n-1e2me2n-2
O(n3lgn)
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 16/46
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 losnodos 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 consideretodos 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 soncaminos cortos con vértices intermedios en {1,2,...,k}.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 17/46
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 ku1
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 18/46
Computo de Abajo hacia Arriba
FLOYD-WARSHALL(W)
1 nnrows[n]
2 D(0)n w
3 for k n 1 to n
4 do for i n1 to n
5 do for j n1 to n
6 dij
(k)nmin(dij
(k-1)
, dik
(k-1)
+ dkj
(k-1)
)7 return D(n)
5(n3)
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 19/46
EjemploNIL 1 1 NIL 1
NIL NIL NIL 2 2
NIL 3 NIL NIL NIL
4 NIL 4 NIL NIL
NIL NIL NIL 5 NIL
0 3 8 g -4
g 0 g 1 7
g 4 0 g g
2 5 -5 0 -2
g g g 6 0
NIL 1 1 NIL 1
NIL NIL NIL 2 2
NIL 3 NIL NIL NIL
4 1 4 NIL 1
NIL NIL NIL 5 NIL
0 3 8 g -4
g 0 g 1 7
g 4 0 g g
2 g -5 0 g
g g g 6 0
0 3 8 4 -4
g 0 g 1 7
g 4 0 5 11
2 5 -5 0 -2
g g g 6 0
NIL 1 1 2 1
NIL NIL NIL 2 2
NIL 3 NIL 2 2
4 1 4 NIL 1
NIL NIL NIL 5 NIL
D(0) =
D(1) =
D(2) =
(0) =
(1) =
(2) =
Valores iniciales
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 20/46
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.
Tij(k) Tij
(k-1) si dij(k-1) e dik
(k-1)+ dkj(k-1)
Tkj(k-1)
si dij(k-1)
> dik(k-1)
+ dkj(k-1)
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 21/46
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}.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 22/46
¿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=g Otra manera es utilizando los operadores
lógicos y en vez de los operadores min y +en FLOYD-WARSHALL.
± tij(0)
= 0 si ij y (i,j) E.= 1 si i=j o (i,j) E.
± Para ku1: tij(k) = tij
(k-1) (tik(k-1) tkj
(k-1)).5(n3).
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 23/46
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.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 24/46
Reasignación de Pesos
Sea Z el nuevo peso asignado. Z debe
cumplir con:
1.
(u,v) E,H(u,v) con w:EpR estambién H(u,v) con Z :EpR.
2. (u,v) E, Z(u,v)u0.
Z se determina en O(VE).
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 25/46
Reasignación de Pesos
Lema:
La reasignación de pesos no cambia los
caminos más cortos.
Sea G=(V,F) con w:EpR y h:VpR cualquier
función que mapea VpR. Luego (u,v)E:
Z(u,v) = w(u,v) + h(u) ± h(v).
Sea p = <v0, v1, « vk> un camino de v0 a vk.w(p)=H(v0,vk) Z(p)=H(v0,vk)
G tiene ciclo negativo G´ tiene ciclo negativo
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 26/46
Reasignación de Pesos
Prueba:
Z(p) = w(p) + h(v0) ± h(vk)
Se tiene
Z(p) = 7(i=1, k, Z(vi-1, vi))
= 7(i=1, k, w(vi-1, vi) + h(vi-1) - h(vi))
= 7(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 Z. EntoncesZ(p¶)< Z(p).
w(p¶) + h(v0) ± h(vk) = Z(p¶)
< w(p)
= w(p)+h(v0)+h(v
k)
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, Z(c)=w(c) + h(v0) ± h(vk)
=w(c) si hay ciclo negativo en Z(c) tambien lo hay en w(c).
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 27/46
Algoritmo
JHONSON
1 compute G¶, V[G¶]=V[G] U {s}, E[G¶]=E[G]U{(s,v) : v V[G]}
2 if BELLM AN-FORD(G¶,w,s) = false
3 then print ³there is a negative weight cycle´
4 else for each vertex v V[G]
5 do set h(v) to the value computed by the BELLM AN-FORD algorithm.
6 for each edge (u,v) E[G¶]
7 do Z(u,v)nw(u,v) + h(u) ± h(v)
8 for each vertex u V[G]
9 do run Dijkstra(G,Z
, u) to computeH¶(u,v)
u V[G]10 for each vertex v V[G]
11 do duvn H¶(u,v) + h(v) ± h(u)
12 return D
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 28/46
Ejemplo
-1
0 -5
-4 0
4
-5
6
8
2
17
3
-4
0
0
0
0
0
0
-1
0 -5
-4 0
0
0
2
13
2
010
4
0
0
0
4
0
0
5
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 29/46
Ejemplo
2/1
0/0 2/-3
0/-4 2/2
0
0
2
13
2
010
4
0
0/0
2/3 0/-4
2/-1 0/1
0
0
2
13
2
010
4
0
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 30/46
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 lared 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.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 31/46
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. 7f i = 7f o (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?
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 32/46
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)u0. Si (u,v)E,
c(u,v)=0.
± Se distinguen 2 vertices, el fuente ³s´ y el
destino ³t´. Cada vertice vV esta en algun
s~>v~>t. ± El grafo es conexo |E|u|V|-1
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 33/46
Flujo
El flujo está dado por una función con imagen
en los reales. f:VxVpR que satisface:
± Restricción de capacidad: u,v V, f(u,v)ec(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
vV 7f(u,v) = 0
Sea f(u,v) el flujo desde u hasta v, el valor de ese
flujo se define como |f|= 7f(s,v) vV
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 34/46
Relación entre 2 nodos
v1
v2
5 / 1 0
4
v1
v2
10 4
v1
v2
8 / 1 0
4
v1
v2
8 / 1 0
3 / 4
v1
v2
10 2 / 4
8 de v1 a v2 3 de v2 a v1 cancelación 7 más de v2 a v1
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 35/46
Redes de múltiples entradas y
múltiples salidas
S¶
s1
s2
s3
s4
s5
t2
t1
T¶
gg
g
g
g
g
g
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 36/46
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.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 37/46
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 at
. Este proceso se repite hasta que no hayamás posibilidad de aumentar.
FORD-FULKERSON-METHOD(G,s,t)
1 initialize flow f to 0
2 while there exists an augmenting path p.3 do augment flow f along p
4 return f.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 38/46
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,vV. La cantidad de flujo adicional que se puede verter
sobre u,v es lacapa
cidad r
esidu
al.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}
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 39/46
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 r esidual de p, y está dado por:
cf (p) = min {cf (u,v): (u,v) p}
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 40/46
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 sS y tT.
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).
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 41/46
Teorema max-flow min-cut
Teor ema: 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 uncorte 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 puedeser menor que el valor actual del flujo.
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 42/46
Algoritmo de Ford-Fulkerson
FORD-FULKERSON(G,s,t)
1 for each edge (u,v) E[G]
2 do f[u,v]n0
3 f[v,u]n04 while there exists a path p from s to t in the
residual network Gf
5 do cf (p)=min {cf (u,v) : (u,v) p}
6 for each edge (u,v) in p7 do f[u,v] n f[u,v] + cf (p)
8 f[v,u] n -f[u,v]
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 43/46
Ejemplo
0
1
3
2
5
4
2
2
3
1 1
3
1
3
0
1
3
2
5
4
2
2
1
1 1
3
1
3
Cmin = 2
2
Cmin = 1
0
1
3
2
5
4
2
2
1
1 1
2
1
2
2
1
1
Cmin = 1
s
t t t
s s
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 44/46
Ejemplo
0
1
3
2
5
4
2
2
1 1
1
1
1
1
2
2
2
1 2
FlujoMáximo
D i r e c c i ó n d e l F
l u j o
S
Tt
s
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 45/46
Análisis
El algoritmo está acotado por O(|f*|) donde
f* es el flujo máximo.
s
u
v
t1s
u
v
t11
1
s
u
v
t11
1
5/13/2018 grafosIII - slidepdf.com
http://slidepdf.com/reader/full/grafosiii 46/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).