12
1 Análise e Síntese de Algoritmos Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25 2006/2007 Análise e Síntese de Algoritmos 2 Contexto Algoritmos Elementares em Grafos (CLR, Cap. 22) BFS & DFS Ordenação Topológica & SCCs Árvores Abrangentes de Menor Custo (CLR, Cap. 23) Algoritmos de Borůvka, Kruskal e Prim Caminhos mais curtos com fonte única (CLR, Cap. 24) Algoritmos de Dijkstra e Bellman-Ford Caminhos mais curtos entre todos os pares (CLR, Cap. 25) Solução Recursiva, Algoritmos de Floyd-Warshall e Johnson

Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

Embed Size (px)

Citation preview

Page 1: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

1

Análise e Síntese de Algoritmos

Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25

2006/2007 Análise e Síntese de Algoritmos 2

Contexto

• Algoritmos Elementares em Grafos (CLR, Cap. 22)– BFS & DFS– Ordenação Topológica & SCCs

• Árvores Abrangentes de Menor Custo (CLR, Cap. 23)– Algoritmos de Borůvka, Kruskal e Prim

• Caminhos mais curtos com fonte única (CLR, Cap. 24)– Algoritmos de Dijkstra e Bellman-Ford

• Caminhos mais curtos entre todos os pares (CLR, Cap. 25)– Solução Recursiva, Algoritmos de Floyd-Warshall e Johnson

Page 2: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

2

2006/2007 Análise e Síntese de Algoritmos 3

Resumo

• Caminhos Mais Curtos entre Todos os Pares (APSPs)– Definições– Soluções recursivas

• Algoritmo de Floyd-Warshall– Fecho Transitivo– Algoritmo de Johnson

2006/2007 Análise e Síntese de Algoritmos 4

Caminhos Mais Curtos entre Todosos Pares (APSPs) — Observações• Encontrar caminhos mais curtos entre todos os pares

de vértices• Se pesos não negativos

– Utilizar algoritmo de Dijkstra, assumindo cada vértice comofonte: O(V E lg V) (que é O(V3 lg V) se grafo é denso)

• Se pesos negativos– Utilizar algoritmo de Bellman-Ford, assumindo cada vértice

como fonte: O(V2E) (que é O(V4) se grafo é denso)

• Objectivo: Encontrar algoritmos mais eficientes

Page 3: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

3

2006/2007 Análise e Síntese de Algoritmos 5

APSPs — Definições

• Representação: utilização de matriz de adjacências• Pesos dos arcos: matriz (n x n) W = (wij)

• Representação dos caminhos mais curtos: matriz (n xn) D = (dij)– dij é o peso do caminho mais curto entre os vértices i e j

• dij = δ(vi,vj)

( )

( )!"

!#

$

%&'

(&

=

=

Ej,i e ji se

Ej,i e ji sej)(i, arco do peso

ji se0

wij

2006/2007 Análise e Síntese de Algoritmos 6

APSPs — Definições

• Representação de caminhos mais curtos– Matriz de predecessores ∏ = (πij)– πij:

• NIL: se i = j ou não existe caminho de i para j• Caso contrário: predecessor de j num caminho mais

curto de i para j– Sub-grafo de predecessores de G para i, Gπ, i = (Vπ, i, Eπ, i)

• Sub-grafo induzido pela linha i de ∏– Exemplo

{ } {}iNIL:VjV iji, !"#$=#

( ){ }{i}Vj:j,E i,iji, !"#= ##

Page 4: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

4

2006/2007 Análise e Síntese de Algoritmos 7

APSPs — Solução Recursiva

• Sub-caminhos de caminhos mais curtos sãotambém caminhos mais curtos

• Peso mínimo em caminho de vértice i para vértice jque contém não mais do que m arcos:– Com m = 0, existe caminho de i para j se e só se i = j

– Para m ≥ 1,

)m(ijd

( ) ( ) ( ){ }{ } ( ){ }kj1mik

nk1kj

1mik

nk1

1mij

mij wdminwdmin,dmind +=+= !

""

!

""

!

( )

!"#

$%

==

ji se

ji se0d 0

ij

wjj = 0

2006/2007 Análise e Síntese de Algoritmos 8

APSPs — Solução Recursiva

• Calcular sequência de matrizes D(1), …, D(n-1), onde– D(n-1) contém os pesos dos caminhos mais curtos– D(1) = W

• Complexidade: Θ(n3) p/ cada matriz; Total: Θ(n4)

Extend-Shortest-Paths(D,W)n = rows[W]D’: matriz (n x n)for i = 1 to n

for j = 1 to n

for k = 1 to n

return D’( )kjik'ij

'ij wd,dmind +=

!='ijd

Page 5: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

5

2006/2007 Análise e Síntese de Algoritmos 9

APSPs — Solução Recursiva

• Genericamente: calcular D(i) em função de D(i-1) (e de W)• Complexidade para cálculo de D(n): Θ(n4)

• OBS: é possível melhorar complexidade reduzindonúmero de matrizes calculadas: Θ(n3lg n)– A cada iteração, calcular D(2i) em função de D(i) e de D(i)

2006/2007 Análise e Síntese de Algoritmos 10

APSPs — Algoritmo de Floyd-Warshall

• Caracterização de um caminho mais curto– Vértices intermédios de caminho p = 〈v1,v2,…,vk〉, {v2,…,vk-1}

• Considerar todos os caminhos entre i e j comvértices intermédios retirados do conjunto {1,…,k} eseja p um caminho mais curto (p é simples)– Se k não é vértice intermédio de p, então todos os vértices

intermédios de p estão em {1,…,k-1}– Se k é vértice intermédio de p, então existem caminhos p1 e

p2, respectivamente de i para k e de k para j com vérticesintermédios em {1,…,k}

• k não é vértice intermédio de p1 e de p2

• p1 e p2 com vértices intermédios em {1,…,k-1}

Page 6: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

6

2006/2007 Análise e Síntese de Algoritmos 11

APSPs — Algoritmo de Floyd-Warshall

• Formulação

( )( ) ( ) ( )( )!

"#

$+

== %%% 1k sedd,dmin

0k sewd 1k

kj1k

ik1k

ij

ijkij

i j

kp1

p2

Vértices entre1 e k-1

Vértices entre1 e k

2006/2007 Análise e Síntese de Algoritmos 12

APSPs — Algoritmo de Floyd-Warshall

• Complexidade: Θ(n3)• Exemplo

Floyd-Warshall(W)n = rows[W]D(0) = Wfor k = 1 to n

for i = 1 to nfor j = 1 to n

return D(n)

( ) ( ) ( ) ( )( )1kkj

1kik

1kij

kij dd,dmind !!! +=

Page 7: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

7

2006/2007 Análise e Síntese de Algoritmos 13

Fecho Transitivo de um Grafo Dirigido

• Dado um grafo G = (V, E) dirigido, o fecho transitivoé definido por G* = (V, E*) tal que,

E*={(i, j): existe caminho de i para j em G}

• Algoritmo:– Atribuir a cada arco peso 1 e utilizar algoritmo de Floyd-

Warshall• Se dij ≠ ∞, então (i, j) ∈ E*• Complexidade: Θ(n3)

2006/2007 Análise e Síntese de Algoritmos 14

Fecho Transitivo de um Grafo Dirigido

• Outro algoritmo:– Substituir operações min e + por ∨ e ∧, respectivamente– Se existe caminho de i para j com todos os vértices

intermédios em {1,2,…,k},– Caso contrário,– Formulação:

– Complexidade: Θ(n3) (mas constantes menores)– Exemplo

( ) 1t kij =( ) 0t kij =

( ) ( ) ( ) ( )( ) 1k setttt 1kkj

1kik

1kij

kij !"#= $$$( ) ( )

( )!"#

$=

%&=

Ej,i ou ji se1

Ej,i e ji se0t 0

ij

Page 8: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

8

2006/2007 Análise e Síntese de Algoritmos 15

Fecho Transitivo de um Grafo Dirigido

Transitive-Closure(G)n = |V[G]|for i = 1 to n

for j = 1 to nif i = j or (i, j) ∈ E

else

for k = 1 to nfor i = 1 to n

for j = 1 to n

return T(n)

( ) ( ) ( ) ( )( )1kkj

1kik

1kij

kij tttt !!! "#=

( ) 1t 0ij =

( ) 0t 0ij =

2006/2007 Análise e Síntese de Algoritmos 16

APSPs — Algoritmo de Johnson

• Utiliza algoritmos de Dijkstra e de Bellman-Ford• Baseado em re-pesagem dos arcos

– Se arcos com pesos não negativos, utilizar Dijkstra paracada vértice

– Caso contrário, calcular novo conjunto de pesos nãonegativos w’, tal que

• Um caminho mais curto de u para v com função w étambém caminho mais curto com função w’

• Para cada arco (u, v) o peso w’(u, v) é não negativo

Page 9: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

9

2006/2007 Análise e Síntese de Algoritmos 17

APSPs — Algoritmo de Johnson

• Dado G = (V, E), com função de pesos w e de re-pesagem h: V → R, seja w’(u, v) = w(u, v) + h(u) - h(v)

• Seja p = 〈v0,v1,…,vk〉. Então w(p) = δ(v0, vk) se e só sew’(p) = δ’(v0, vk) = δ(v0, vk) + h(v0) - h(vk)– Existe ciclo negativo com w se e só se existe ciclo negativo

com w’

( ) ( ) ( ) ( )k0 vhvhpwp'w !+=

( ) ( )

( ) ( ) ( )( )

( ) ( ) ( ) ( ) ( ) ( )k0k0

k

1ii1i

k

1ii1ii1i

k

1ii1i

vhvhpwvhvhv,vw

vhvhv,vw

v,v'wp'w

!+=!+=

!+=

=

"

"

"

=!

=!!

=!

2006/2007 Análise e Síntese de Algoritmos 18

APSPs — Algoritmo de Johnson

( ) ( ) ( ) ( )k0k0 v,v'p'wv,vpw !="!=

( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )k0zk0z vhvhpwp'wp'wvhvhpw !+=<=!+

Hipótese: existe pz, caminho mais curto de v0 para vk com w’Então: ( ) ( )p'wp'w z <

( ) ( )pwpwz<O que implica

Mas p é caminho mais curto com w; contradição !

OBS: Para quaisquer caminhos p1, p2 entre v0 e vk, verifica-sew(p1) < w(p2) ⇔ w’(p1) < w’(p2)

Page 10: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

10

2006/2007 Análise e Síntese de Algoritmos 19

APSPs — Algoritmo de Johnson

( ) ( ) ( ) ( )k0k0 v,v'p'wv,vpw !="!=

Semelhante:Admitir pz como caminho mais curto de v0 para vk com w(ou considerar observação anterior)

Existe ciclo negativo com w se e só se existe com w’

( ) ( ) ( ) ( ) ( )cwvhvhcwc'wk0=!+=

( ) 0cw;vv;v,,v,vc k0k10 <=!"= K

∴Caminhos mais curtos e ciclos negativos inalteráveis com mudanças na função de pesos w’(u, v) = w(u, v) + h(u) - h(v)

2006/2007 Análise e Síntese de Algoritmos 20

APSPs — Algoritmo de Johnson

• Dado G = (V, E), criar G’ = (V’,E’):– V’ = V ∪ { s }– E’ = E ∪ { (s, v) : v ∈ V } (∀ v ∈ V, atingível a partir de s)– w(s, v) = 0

• Com ciclos negativos:– Detectados com algoritmo de Bellman-Ford aplicado a G’ !

• Sem ciclos negativos:– Definir: h(v) = δ(s, v)– Dado que: h(v) ≤ h(u) + w(u, v)– Verifica-se: w’(u, v) = w(u, v) + h(u) - h(v) ≥ 0 !

24.10

Page 11: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

11

2006/2007 Análise e Síntese de Algoritmos 21

APSPs — Algoritmo de Johnson

• Executar Dijkstra para todo o u ∈ V– Cálculo de δ’(u,v), para u ∈ V– Mas também,

• δ’(u,v) = δ(u, v) + h(u) - h(v)• δ(u,v) = δ’(u, v) + h(v) - h(u)

2006/2007 Análise e Síntese de Algoritmos 22

APSPs — Algoritmo de Johnson

Johnson(G)Representar G’if Bellman-Ford(G’,w,s) = FALSE

print “Indicar ciclo negativo”else

atribuir h(v) = δ(s, v), calculado com Bellman-Fordcalcular w’(u,v) = w(u,v) + h(u) - h(v) para cada arco (u,v)foreach v ∈ V[G]

executar Dijkstra(G,w’,v); calcular δ’(u, v)duv = δ’(u, v) + h(v) - h(u)

return D

Page 12: Análise e Síntese de Algoritmos - Autenticação · k-1} •Considerar todos os caminhos entre i e j com vértices intermédios retirados do conjunto {1,…,k} e seja p um caminho

12

2006/2007 Análise e Síntese de Algoritmos 23

APSPs — Algoritmo de Johnson

• Complexidade:– Bellman-Ford: O(V E)– Executar Dijkstra para cada vértice: O(V (V + E) lg V)

• Assumindo amontoado (heap) binário

– Total: O(V (V + E) lg V)• Útil para grafos esparsos

• Exemplo

2006/2007 Análise e Síntese de Algoritmos 24

Revisão

• Caminhos Mais Curtos entre Todos os Pares (APSPs)– Definições– Solução recursiva– Algoritmo de Floyd-Warshall– Fecho Transitivo– Algoritmo de Johnson

• A seguir:– Fluxos máximos em grafos (CLR, Cap. 26)