Professional Documents
Culture Documents
1 / 74
2 / 74
3 / 74
Sum ario
4 / 74
Introdu c ao
Cen ario
Um motorista deseja encontrar o caminho mais curto da cidade de Florian opolis/SC a Marilha/SP. Dado um mapa das rodovias brasileiras, no qual pares de cidades adjacentes s ao marcados, como podemos determinar a rota mais curta?
5 / 74
Introdu c ao
Cen ario
Um motorista deseja encontrar o caminho mais curto da cidade de Florian opolis/SC a Marilha/SP. Dado um mapa das rodovias brasileiras, no qual pares de cidades adjacentes s ao marcados, como podemos determinar a rota mais curta?
Uma possibilidade consiste em enumerarmos todos os poss veis caminhos de Florian opolis a Marilha. Adicionar as dist ancias em cada rota. Selecionar a rota mais curta.
6 / 74
Introdu c ao
Quest ao
O m etodo e satisfat orio?
7 / 74
Introdu c ao
Desenvolvimentos
Veremos como resolver problemas deste tipo de forma ecaz. Em problemas de caminhos m nimos, nos e dado um grafo direcionado G = (V , E ) cujas arestas t em pesos. Os pesos s ao induzidos por uma fun c ao w : E R. O peso de um caminho p = (v0 , v1 , . . . , vk ) e a soma dos pesos das arestas:
k 1
w (p ) =
i =0
w (vi , vi +1 )
8 / 74
Introdu c ao
Deni c ao
Denimos o peso (comprimento) do caminho de menor peso (mais curto) de um v ertice u para v como: (u , v ) = min{w (p ) : p e caminho de u + se n ao existir caminho v}
9 / 74
Introdu c ao
os v ertices representam as cidades as arestas representam as rodovias, estradas, etc. os pesos das arestas representam as dist ancias entre duas cidades
10 / 74
Introdu c ao
Variantes
nimos com um destino 1. Caminhos m
Encontre o caminho mais curto para um v ertice t a partir de cada v ertice u V . Encontre o caminho mais curto de u para v Encontre o caminho m nimo entre cada par u , v V
11 / 74
Pesos negativos
Em algumas inst ancias do problema de caminhos m nimos com fonte u nica, podem existir arestas com pesos negativos. Se o grafo G = (V , E ) n ao tiver ciclo com peso negativo alcan c avel a partir da fonte s , ent ao (s , v ) permanece bem denido para todo v V , mesmo se o grafo contiver algum ciclo negativo.
12 / 74
Pesos negativos
10 1 4 1 1 2 1 3
13 / 74
Pesos negativos
Alguns algoritmos, como o algoritmo de Dijkstra, assumem que todos os pesos s ao n ao-negativos. Algoritmos como Bellman-Ford e Floyd-Warshall, entretanto, podem operar com arestas de peso negativo, desde que n ao existam ciclos de peso negativo. Tipicamente, estes algoritmos detectam a presen ca de ciclo negativo.
14 / 74
Representa c ao
Estamos interessados n ao apenas na dist ancia do caminho mais curto, mas tamb em no caminho em si. A representa c ao do caminho mais curto e similar ` aquela usada na busca em largura (breadth-rst search) Dado um grafo G = (V , E ), mantemos para cada v ertice v V o seu predecessor [v ] que e outro v ertice ou nil. Os algoritmos de caminhos m nimos denem os atributos de maneira que a cadeia de predecessores originada em v , de tr as pra frente, nos d a o caminho mais curto de s para v .
15 / 74
Representa c ao
O grafo predecessor G = (V , E ) induzido por , ap os o t ermino do algoritmo, produz a arvore de caminhos m nimos. G e denido como segue: V = {v V : [v ] = nil } {s } E = {( [v ], v ) : v V {s }}
16 / 74
Relaxa c oes
Algoritmos de caminhos m nimos usam a t ecnica de relaxa c ao, que decresce um limite superior (upper bound) para a dist ancia m nima para cada v ertice. At e que o limite superior se torne a pr opria dist ancia: 1 (u ) 2 (u ) ... k (u ) = (s , u )
Os algoritmos tamb em exploram a propriedade de que o caminho mais curto entre dois v ertices tamb em e formado de caminhos mais curtos.
17 / 74
Relaxa c oes
Lema
Dado um grafo direcionado com peso nas arestas, G = (V , E ), e a fun c ao peso nas arestas w : E R. Seja p = (v1 , v2 , . . . , vk ) um caminho mais curto de v1 para vk em G . Para quaisquer 1 i < j k , seja pij = (vi , vi +1 , . . . , vj ) o subcaminho de p de vi para vj . Ent ao, pij e um caminho m nimo de vi para vj .
18 / 74
Relaxa c oes
Lema
Seja dado um grafo direcionado com peso nas arestas, G = (V , E ), e a fun c ao peso nas arestas w : E R. Seja s um v ertice correspondente ` a fonte. Ent ao, para toda aresta (u , v ) E , (s , v ) (s , u ) + w (u , v )
19 / 74
Relaxa c oes
V arios algoritmos s ao baseados na t ecnica de relaxa c ao. Para cada v ertice v V , mantemos um atributo d [v ], que e um limite superior (upper bound) no comprimento do caminho mais curto de s para v : d [v ] (s , v )
20 / 74
Relaxa c oes
Initialize-Single-Source(G , s ) 1) for each v V [G ] 2) do d [v ] 3) [v ] nil 4) d [s ] = 0 Ap os a inicializa c ao, [v ] = nil para todo v V , d [s ] = 0, d [v ] = para todo v V {s }.
21 / 74
Relaxa c oes
O prop osito de relaxar uma aresta (u , v ) consiste de testar se podemos melhorar a estimativa do caminho mais curto para v encontrado at e ent ao, por meio do caminho at e u.
22 / 74
Relaxa c oes
u 2 5
v 9 Relax(u , v ) 5
u 2
v 6 Relax(u , v )
23 / 74
Propriedades
A corretude de algoritmos de caminhos m nimos e baseada em propriedades de caminhos m nimos e das relaxa c oes.
24 / 74
Desigualdade triangular
Lema
Para cada aresta (u , v ) E , temos (s , v ) (s , u ) + w (u , v )
25 / 74
Limite superior
Lema
Sempre temos d [v ] (s , v ) para todo v ertice v V , e uma vez que d [v ] = (s , v ), a estimativa d [v ] n ao muda.
26 / 74
Lema
Se n ao existe caminho de s para v , ent ao sempre temos d [v ] = (s , v ) = +
27 / 74
Converg encia
Lema
Se s uv e um caminho em G para certos v ertices u, v V , e se d [u ] = (s , u ) em qualquer momento antes de relaxarmos a aresta (u , v ), ent ao ap os a relaxa c ao da aresta (u , v ) temos d [v ] = (s , v ) da pra frente.
28 / 74
Seja p = (v0 , v1 , . . . , vk ) um caminho mais curto de s = v0 para vk e as arestas de p s ao relaxadas na ordem (v0 , v1 ), (v1 , v2 ), . . . , (vk 1 , vk ). Ent ao d [ vk ] = ( s , v k )
Esta propriedade e garantida independentemente de quaisquer passos de relaxa c ao ocorridos, at e mesmo se eles s ao intermedi arios aos passos de relaxa c ao das arestas em p .
29 / 74
Subgrafo predecessor
Lema
Uma vez que d [v ] = (s , v ) para todo v V , o grafo predecessor G e uma arvore de caminhos m nimos com raiz em s .
30 / 74
Sum ario
31 / 74
Algoritmo Bellman-Ford
O algoritmo de Bellman-Ford resolve o problema de caminhos m nimos com uma fonte no caso geral, onde as arestas podem possuir peso negativo. O algoritmo retorna um valor Booleano indicando se foi ou n ao encontrado um ciclo de comprimento negativo alcan c avel a partir de s . Se n ao h a ciclo negativo alcan c avel a partir de s , o algoritmo produz a arvore de caminhos m nimos com raiz em s e os seus respectivos comprimentos (pesos).
32 / 74
Algoritmo Bellman-Ford
Bellman-Ford(G , w , s ) 1) Initialize-Single-Source(G , s ) 2) for i 1 to |V [G ]| 1 3) do for each (u , v ) E [G ] 4) do Relax(u , v ) 5) for each (u , v ) E [G ] 6) do if d [v ] > d [u ] + w (u , v ) 7) then return FALSE 8) return TRUE
33 / 74
Grafo
t 6 s 2 8 5 x 2 4 3 7
7 z y 9
34 / 74
Bellman-Ford: inicializa c ao
t 6 s 0 7 2 5 2 8 4 3 7 x
y 9
35 / 74
Bellman-Ford: itera c ao 1
t 6 s 0 7 2 6 5 2 8 4 3 7 x
7 y 9
36 / 74
Bellman-Ford: itera c ao 2
t 6 s 0 7 2 6 5 2 8 4 4 3 7 x
7 y 9
37 / 74
Bellman-Ford: itera c ao 3
t 6 s 0 7 2 2 5 2 8 4 4 3 7 x
7 y 9
38 / 74
Bellman-Ford: itera c ao 4
t 6 s 0 7 2 2 5 2 8 4 4 3 7 x
7 y 9
2 z
39 / 74
Passo 1: O (n) Passo 2: (n) Passo 3-4: (1) Logo, o la co 2-4 leva (nm) La co 5-7 leva O (m) Portanto, Bellman-Ford executa em tempo (nm). Para um grafo denso, m = (n2 ), o tempo de execu c ao do algoritmo e (n3 ).
Conclus oes:
40 / 74
Bellman-Ford: corretude
Lema
Seja G = (V , E ) um grafo direcionado com peso nas arestas Seja s V a fonte Seja w : E R a fun c ao peso Assuma que G n ao cont em ciclos de peso negativo alcan c aveis a partir de s Ent ao, ap os |V | 1 passos do la co 2-4 do algoritmo Bellman-Ford, teremos d [v ] = (s , v ) para todo v ertice v alcan c avel a partir de s .
41 / 74
Bellman-Ford: corretude
Corol ario
Seja G = (V , E ) um grafo direcionado com peso nas arestas Seja s V a fonte Seja w : E R a fun c ao peso Assuma que G n ao cont em ciclos de peso negativo alcan c aveis a partir de s Ent ao, ent ao para cada v V , existe um caminho de s para v se e somente se Bellman-Ford termina com d [v ] < quando ele e aplicado sobre G .
42 / 74
Bellman-Ford: corretude
Teorema
Suponha que o algoritmo de Bellman-Ford executa sobre um grafo direcionado, G = (V , E ), com fun c ao peso das arestas w : E R e tendo s como fonte. Se G n ao cont em ciclos negativos, alcan c aveis a partir de s , ent ao:
o algoritmo retorna TRUE; d [v ] = (s , v ) para todo v V ; e o subgrafo predecessor G e uma arvore de caminhos m nimos com raiz em s .
Se G cont em um ciclo negativo (alcan c avel a partir de s ), ent ao o algoritmo retorna FALSE.
43 / 74
Sum ario
44 / 74
Algoritmo de Dijkstra
Princ pios
O algoritmo de Dijkstra resolve o problema de caminhos m nimos com uma fonte em um grafo direcionado G = (V , E ), cujas arestas apresentam pesos n ao-negativos. O algoritmo mant em um conjunto S de v ertices para os quais a dist ancia do caminho mais curto a partir de s j a foi computada. Ou seja, para todo v S , temos d [v ] = (s , v ). O algoritmo iterativamente seleciona um v ertice u V S que possua a menor estimativa de dist ancia, d [u ] = min{d [v ] : v V S }, e insere u em S . Ao mesmo tempo que relaxa as arestas que emanam de u .
45 / 74
Algoritmo de Dijkstra
S v1 V S u1 u2 u3 v3 u4
v2
46 / 74
Algoritmo de Dijkstra
47 / 74
Algoritmo de Dijkstra
Uma vez que o algoritmo de Dijkstra sempre escolhe o v ertice de V S mais pr oximo do conjunto S , dizemos que o algoritmo faz uso de uma t ecnica gulosa. Algoritmos gulosos tipicamente produzem solu c oes sub otimas. No caso do problema de caminhos m nimos com uma fonte, o algoritmo guloso obt em a solu c ao otima. A chave para mostrar que o algoritmo produz uma solu c ao otima e o fato que quando u e inserido em S , d [u ] = (s , u ).
48 / 74
49 / 74
Teorema
Se executarmos o algoritmo de Dijkstra em um grafo direcionado G = (V , E ), onde w : E R+ , Ent ao, quando o algoritmo termina, d [v ] = (s , v ) para todo v V.
50 / 74
Vamos mostrar que para cada u V , temos d [u ] = (s , u ) no momento em que u e inserido em S , e esta igualdade permanece. Com o prop osito de contradi c ao, suponha que u e o primeiro v ertice tal que d [u ] = (s , u ). Seja p = (p1 , [u ], u ) o caminho produzido pelo algoritmo. Seja p = ( p2 , x , y , p 3 ) um caminho mais curto de s at e u. y e o primeiro v ertice em p que n ao pertence a S . Temos que w ( p ) < w (p ).
51 / 74
Demonstra c ao
Sabemos que d [x ] = (s , x ). Caso contr ario, u n ao seria o primeiro v ertice com dist ancia incorreta. Uma vez que y pertence a um caminho mais curto, temos que d [y ] = (s , y ) no momento em que x foi inserido em s .
A aresta (x , y ) foi relaxada no momento em que x foi inserido em S , fazendo com que d [y ] se tornasse (s , y ).
52 / 74
Contudo, temos que: (s , u ) < d [u ] (s , y ) + w ( p3 ) < d [ u ] d [y ] + w ( p3 ) < d [u ] [pois (s , y ) = d [y ]] d [y ] < d [u ] w ( p3 ) d [y ] < d [u ] [pois w ( p3 ) 0]
Mas isto e uma contradi c ao. O algoritmo teria escolhido y como o pr oximo v ertice a ser inserido em S , n ao teria escolhido u .
53 / 74
Neste caso, extract-min leva tempo O (n) e h a n opera c oes extract-min, com n = |V | e m = |E |. Uma vez que cada aresta e examinada no m aximo uma vez, a opera c ao relax e executada no m aximo uma vez, levando tempo O (1). Podemos concluir que o algoritmo leva tempo O (n2 + m) = O (n2 ).
54 / 74
Quando o grafo e esparso, entretanto, e mais pr atico utilizarmos uma la de prioridades implementada com heap bin ario. Neste caso, extract-min leva tempo O (lgn) e h a n opera c oes extract-min, com n = |V | e m = |E |. Cada aresta (u , v ) e examinada uma vez, for cando uma opera c ao relax(u,v,w) que custa no m aximo O (lgn), quando a dist ancia d [v ] for reduzida. Portanto o algoritmo executa em tempo O (nlgn + mlgn) = O (mlgn) assumindo que m n.
55 / 74
Neste caso, extract-min leva tempo O (lgn) e h a n opera c oes extract-min, com n = |V | e m = |E |. Cada aresta (u , v ) e examinada uma vez, for cando uma opera c ao relax(u,v,w) que custa no m aximo O (1) (tempo amortizado), quando a dist ancia d [v ] for reduzida. Portanto o algoritmo executa em tempo amortizado O (nlgn + m). Quando o grafo e denso, temos m = n2 e o algoritmo executa 2 em tempo O (n ). Quando o grafo e esparso, temos O (nlgn) j a que m = (n).
56 / 74
Dijkstra: grafo
u 1 v
10 s 2 3 9 4 7 5 x 2 y 6
57 / 74
Dijkstra: itera c ao 1
u 10 s 0 2 3 9 4 7 5 x 2 y 6 1 v
58 / 74
Dijkstra: itera c ao 2
u 10 10 s 0 2 3 9 4 7 5 5 x 2 y 6 1 v
59 / 74
Dijkstra: itera c ao 3
u 8 10 s 0 2 3 9 4 7 5 5 x 2 7 y 6 1 v 14
60 / 74
Dijkstra: itera c ao 4
u 8 10 s 0 2 3 9 4 7 5 5 x 2 7 y 6 1 v 13
61 / 74
Dijkstra: itera c ao 5
u 8 10 s 0 2 3 9 4 7 5 5 x 2 7 y 6 1 v 9
62 / 74
Dijkstra: itera c ao 6
u 8 10 s 0 2 3 9 4 7 5 5 x 2 7 y 6 1 v 9
63 / 74
Sum ario
64 / 74
Grafos Ac clicos
Relaxando as arestas segundo a ordem topol ogica de um grafo direcionado ac clico G = (V , E ), leva ao c omputo da arvore de caminhos m nimos em tempo (|V | + |E |). Caminhos m nimos s ao sempre denidos em grafos ac clicos, pois mesmo na presen ca de arestas com pesos negativos, n ao existe ciclo de comprimento negativo.
65 / 74
Algoritmo
Dag-Shortest-Paths(G , w , s ) 1) topologically sort the vertices of G 2) Initialize-Single-Source(G , s ) 3) for each u taken in topologically sorted order 4) do for each vertex v Adj [u ] 5) do Relax(u , v , w )
66 / 74
Tempo de Execu c ao
Ordena c ao topol ogica pode ser realizada em tempo (|V | + |E |) utilizando o algoritmo de busca em profundidade. Cada v ertice e examinado exatamente uma vez, quando sua lista de adjac encia e examinada e a opera c ao Relax e executada. Logo, o la co 3-5 executa em tempo (|V | + |E |). O tempo total de execu c ao e, portanto, (|V | + |E |).
67 / 74
Exemplo
6 r s t 2 u 7 v 1
1 x 2
68 / 74
V ertice r
6 r s t 2 u 7 v 1
1 x 2
69 / 74
V ertice s
6 r s t 2 2 7 u 6 4 3 1 v
1 x 2
70 / 74
V ertice t
6 r s t 2 2 7 u 6 4 3 1 v 6 2
1 x 2 4
71 / 74
V ertice u
6 r s t 2 2 7 u 6 4 3 1 v 5 2
1 x 2 4
72 / 74
V ertice v
6 r s t 2 2 7 u 6 4 3 1 v 5 2
1 x 2 3
73 / 74
V ertice x
6 r s t 2 2 7 u 6 4 3 1 v 5 2
1 x 2 3
74 / 74
Conclus oes