grafos iii

46

Click here to load reader

Upload: eduardo-dvj

Post on 30-Jun-2015

1.272 views

Category:

Technology


0 download

DESCRIPTION

Grafos,Eduardo Chuji

TRANSCRIPT

Page 1: Grafos Iii

Analisis y Diseño de AlgoritmosTema: Grafos

3ra Parte

Andrés Arcia

Universidad de Los AndesFacultad de Ingeniería

Postgrado en Computación

Page 2: Grafos Iii

Caminos Cortos en Todos los Pares de Arcos

• Dado un grafo dirigido G=(V,E) con una función de peso w:ER. Se desea encontrar todos los caminos más cortos (de menor peso) entre todos los pares (u,v) V.

Page 3: Grafos Iii

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

Page 4: Grafos Iii

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=jpeso de (i,j) si i≠j y (i,j) E si i≠j y (i,j) E

Page 5: Grafos Iii

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={ jV : ij ≠ NULL } U { i }

E,i={(ij,j) : j V,i y ij≠NULL

Page 6: Grafos Iii

Impresión del Camino

PRINT-ALL-PAIRS-SP(,i,j) 1 if i=j2 then print i

3 else if (ij=NULL)4 then print “no path from” i “to” j5 else

6 PRINT-ALL-PAIRS-SP(,i,ij)7 print j

Page 7: Grafos Iii

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: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 abajo

hacia arriba.

Page 8: Grafos Iii

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 p0

si i≠j pi ~p’> kj tiene m-1 nodos

(i,j) = (i,k) + w(k,j)

Page 9: Grafos Iii

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 m1 dij(m) = min (1kn, dik

(m-1) + wkj)

• ¿Cuál es el límite de m?(i,j) = dij

(n-1)=dij(n)=dij

(n+1)=…

Page 10: Grafos Iii

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.

Page 11: Grafos Iii

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 n4 do for j 1 to n5 do d’ij 6 for k 1 to n7 do d’ij = min(d’ij, dik + wkj)8 return D’Este algoritmo es O(n3). Observe los tres for anidados.

Page 12: Grafos Iii

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(1kn, dik

(m-1) + wkj)

d(m-1)awbd(m)cmin++ .

Page 13: Grafos Iii

AlgoritmoSea AB un producto matricial retornado por EXTEND-SHORTEST-PATHS(A,B)

D(1) = D(0).W = WD(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) W3 for m 2 to n-14 do D(m) EXTEND-SHORTEST-PATHS(D(m-1),w)5 return D(n-1) O(n4)

Page 14: Grafos Iii

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-1Así, podemos computar D(n-1) en solo lg(n-1), haciendoD(1) = WD(2) = W2 = W.WD(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”.

Page 15: Grafos Iii

Algoritmo

FASTER-ALL-PAIRS-SHORTEST-PATHS(W)1 nrows[w]2 D(1)W3 m 14 while n-1 > m5 do D(2m)EXTEND-SHORTEST-PATH(D(m), D(m))6 m 2m7 return D(m)

• n-12m2n-2• O(n3lgn)

Page 16: Grafos Iii

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

Page 17: Grafos Iii

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=0min(dij

(k-1) , dik(k-1) + dkj

(k-1) ) si k1

Page 18: Grafos Iii

Computo de Abajo hacia Arriba

FLOYD-WARSHALL(W)1 nrows[n]2 D(0) w3 for k 1 to n4 do for i 1 to n5 do for j 1 to n

6 dij(k) min(dij

(k-1), dik(k-1)+ dkj

(k-1))7 return D(n)

(n3)

Page 19: Grafos Iii

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

0 1 7

4 0

2 5 -5 0 -2

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

0 1 7

4 0

2 -5 0

6 0

0 3 8 4 -4

0 1 7

4 0 5 11

2 5 -5 0 -2

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

Page 20: Grafos Iii

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

Page 21: Grafos Iii

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

Page 22: Grafos Iii

¿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 k1: tij(k) = tij

(k-1) (tik(k-1) tkj

(k-1)).(n3).

Page 23: Grafos Iii

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.

Page 24: Grafos Iii

Reasignación de Pesos

Sea el nuevo peso asignado. debe cumplir con:

1. (u,v) E, (u,v) con w:ER es también (u,v) con :ER.

2. (u,v) E, (u,v)0.

se determina en O(VE).

Page 25: Grafos Iii

Reasignación de Pesos

Lema:

La reasignación de pesos no cambia los caminos más cortos.

Sea G=(V,F) con w:ER y h:VR cualquier función que mapea VR. 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

Page 26: Grafos Iii

Reasignación de PesosPrueba:(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).

Page 27: Grafos Iii

AlgoritmoJHONSON1 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) = false3 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 BELLMAN-

FORD algorithm.6 for each edge (u,v) E[G’]7 do (u,v)w(u,v) + h(u) – h(v)8 for each vertex u V[G]9 do run Dijkstra(G, , u) to compute ’(u,v) u V[G]10 for each vertex v V[G]11 do duv ’(u,v) + h(v) – h(u)12 return D

Page 28: Grafos Iii

Ejemplo

-1

0 -5

-4 0

4

-5

6

8

2

173

-4

0

0

0

0

0

0

-1

0 -5

-4 0

0

0

2

13

2

0104

0

0

0

4

0

0

5

Page 29: Grafos Iii

Ejemplo

2/1

0/0 2/-3

0/-4 2/2

0

0

2

13

2

0104

0

0/0

2/3 0/-4

2/-1 0/1

0

0

2

13

2

0104

0

Page 30: Grafos Iii

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.

Page 31: Grafos Iii

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?

Page 32: Grafos Iii

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 vV esta en algun s~>v~>t.

– El grafo es conexo |E||V|-1

Page 33: Grafos Iii

Flujo

• El flujo está dado por una función con imagen en los reales. f:VxVR 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

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

Page 34: Grafos Iii

Relación entre 2 nodos

v1

v2

5/10

4

v1

v2

10 4

v1

v2

8/10

4

v1

v28/

10

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

Page 35: Grafos Iii

Redes de múltiples entradas y múltiples salidas

S’

s1

s2

s3

s4

s5

t2

t1

T’

Page 36: Grafos Iii

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.

Page 37: Grafos Iii

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 02 while there exists an augmenting path p. 3 do augment flow f along p4 return f.

Page 38: Grafos Iii

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)=20c(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}

Page 39: Grafos Iii

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}

Page 40: Grafos Iii

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

Page 41: Grafos Iii

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.

Page 42: Grafos Iii

Algoritmo de Ford-Fulkerson

FORD-FULKERSON(G,s,t)1 for each edge (u,v) E[G] 2 do f[u,v]03 f[v,u]04 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] f[u,v] + cf(p)8 f[v,u] -f[u,v]

Page 43: Grafos Iii

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

Page 44: Grafos Iii

Ejemplo

0

1

3

2

5

4

2

2

1 1

1

1

1

1

2

2

2

1 2

Flujo Máximo

Dire

cció

n de

l Flu

jo

S

Tt

s

Page 45: Grafos Iii

Análisis

• El algoritmo está acotado por O(|f*|) donde f* es el flujo máximo.

s

u

v

t

1.000.000

1.000.000

1.000.000

1.000.000

1s

u

v

t

999.999

999.999

1.000.000

1.000.000

111

s

u

v

t

999.999

999.999

999.999

999.999

111

Page 46: Grafos Iii

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