Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
MC558 — Analise de Algoritmos II
Cid C. de Souza Candida N. da Silva Orlando Lee
4 de maio de 2020
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Antes de mais nada. . .
Uma versao anterior deste conjunto de slides foi preparada porCid Carvalho de Souza e Candida Nunes da Silva para umainstancia anterior desta disciplina.
O que voces tem em maos e uma versao modificada preparadapara atender a meus gostos.
Nunca e demais enfatizar que o material e apenas um guia enao deve ser usado como unica fonte de estudo. Para issoconsultem a bibliografia (em especial o CLR ou CLRS).
Orlando Lee
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Agradecimentos (Cid e Candida)
Varias pessoas contribuıram direta ou indiretamente com apreparacao deste material.
Algumas destas pessoas cederam gentilmente seus arquivosdigitais enquanto outras cederam gentilmente o seu tempofazendo correcoes e dando sugestoes.
Uma lista destes “colaboradores” (em ordem alfabetica) edada abaixo:
Celia Picinin de MelloJose Coelho de PinaOrlando LeePaulo FeofiloffPedro RezendeRicardo DahabZanoni Dias
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Terminologia do CLRS
Um caminho em um grafo G = (V ,E ) e uma sequencia:
P := (v0, v1, . . . , vk)
em que vi ∈ V para i = 0, 1, 2, . . . , k e (vi−1, vi ) ∈ E parai = 1, 2, . . . , k .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Terminologia do CLRS
Um caminho em um grafo G = (V ,E ) e uma sequencia:
P := (v0, v1, . . . , vk)
em que vi ∈ V para i = 0, 1, 2, . . . , k e (vi−1, vi ) ∈ E parai = 1, 2, . . . , k .
Um caminho e simples se todos os vertices sao distintos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Terminologia do CLRS
Um caminho em um grafo G = (V ,E ) e uma sequencia:
P := (v0, v1, . . . , vk)
em que vi ∈ V para i = 0, 1, 2, . . . , k e (vi−1, vi ) ∈ E parai = 1, 2, . . . , k .
Um caminho e simples se todos os vertices sao distintos.
Observacao: em muitos textos, o usual e chamar de passeio o queCLRS chama de caminho e chamar de caminho o que CLRS chamade caminho simples.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Terminologia do CLRS
Um ciclo em um grafo G = (V ,E ) e uma sequencia:
C := (v0, v1, . . . , vk)
em que v0 = vk , vi ∈ V para i = 0, 1, 2, . . . , k e (vi−1, vi ) ∈ E
para i = 1, 2, . . . , k .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Terminologia do CLRS
Um ciclo em um grafo G = (V ,E ) e uma sequencia:
C := (v0, v1, . . . , vk)
em que v0 = vk , vi ∈ V para i = 0, 1, 2, . . . , k e (vi−1, vi ) ∈ E
para i = 1, 2, . . . , k .
Um ciclo e simples se v1, v2, . . . , vk sao todos distintos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Terminologia do CLRS
Um ciclo em um grafo G = (V ,E ) e uma sequencia:
C := (v0, v1, . . . , vk)
em que v0 = vk , vi ∈ V para i = 0, 1, 2, . . . , k e (vi−1, vi ) ∈ E
para i = 1, 2, . . . , k .
Um ciclo e simples se v1, v2, . . . , vk sao todos distintos.
Observacao: em muitos textos, o usual e chamar de passeiofechado o que CLRS chama de ciclo e chamar de ciclo o que CLRSchama de ciclo simples.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Problema do(s) Caminho(s) Mınimo(s)
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Problema do(s) Caminho(s) Mınimo(s)
Seja G um grafo orientado e suponha que para cada aresta (u, v)associamos um peso (custo) ω(u, v). Usaremos a notacao (G , ω).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Problema do(s) Caminho(s) Mınimo(s)
Seja G um grafo orientado e suponha que para cada aresta (u, v)associamos um peso (custo) ω(u, v). Usaremos a notacao (G , ω).
Problema do Caminho Mınimo entre Dois Vertices:Dados dois vertices s e t em (G , ω), encontrar um caminho(de peso) mınimo de s a t.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Problema do(s) Caminho(s) Mınimo(s)
Seja G um grafo orientado e suponha que para cada aresta (u, v)associamos um peso (custo) ω(u, v). Usaremos a notacao (G , ω).
Problema do Caminho Mınimo entre Dois Vertices:Dados dois vertices s e t em (G , ω), encontrar um caminho(de peso) mınimo de s a t.
Aparentemente, este problema nao e mais facil do que o
Problema dos Caminhos Mınimos com Mesma Origem:Dados (G , ω) e s ∈ V [G ], encontrar para cada vertice v de G ,um caminho mınimo de s a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos
Um ciclo C e negativo se ω(C ) :=∑
e∈E(C) ω(e) < 0.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos
Um ciclo C e negativo se ω(C ) :=∑
e∈E(C) ω(e) < 0.
Se (G , ω) contem ciclos negativos podem existir caminhos des a t de peso arbitrariamente pequeno.
1−4
1
1s u v t
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos
Um ciclo C e negativo se ω(C ) :=∑
e∈E(C) ω(e) < 0.
Se (G , ω) contem ciclos negativos podem existir caminhos des a t de peso arbitrariamente pequeno.
1−4
1
1s u v t
Se existe um caminho mınimo de s a t, entao existe umcaminho mınimo de s a t que e simples.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos
Um ciclo C e negativo se ω(C ) :=∑
e∈E(C) ω(e) < 0.
Se (G , ω) contem ciclos negativos podem existir caminhos des a t de peso arbitrariamente pequeno.
1−4
1
1s u v t
Se existe um caminho mınimo de s a t, entao existe umcaminho mınimo de s a t que e simples.
Os algoritmos que veremos trabalham com instancias semciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Distancia
Seja (G , ω) um grafo orientado ponderado e sejam s, t ∈ V [G ]. Adistancia de s a v e o peso de um caminho de peso mınimo de s at, se ele existir.Se nao existe caminho de s a t em G , entao dist(s, t) = ∞.Se existem caminhos de s a t de peso arbitrariamente pequeno,entao dist(s, t) = −∞.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Distancia
Seja (G , ω) um grafo orientado ponderado e sejam s, t ∈ V [G ]. Adistancia de s a v e o peso de um caminho de peso mınimo de s at, se ele existir.Se nao existe caminho de s a t em G , entao dist(s, t) = ∞.Se existem caminhos de s a t de peso arbitrariamente pequeno,entao dist(s, t) = −∞.
O Problema dos Caminhos Mınimos com Mesma Origem consisteem determinar dist(s, v) para todo v ∈ V (e achar os caminhosmınimos tambem).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo: grafo orientado acıclico
2 6 5 3
6
2 7 −1 −20
3 42
5
4
∞
r s t x y z
v s r t x y z
dist(s, v) 0 ∞ 2 6 5 3
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo: grafo orientado sem arestas negativas
8
11
29
7
10
5
7
2 3
1
9
2
5
4 6
5
0
r
s t
x y
w
v s r x y w t
dist(s, v) 0 8 5 7 9 11
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo: grafo orientado com arestas negativas
0 7
5
−2
−3
−42
7
9
6
8
7
4
−2
2
s
t
z
x
y
v s t x y z
dist(s, v) 0 2 4 7 −2
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideias comuns a todos os algoritmos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideias comuns a todos os algoritmos
Usamos uma ideia similar a usada em Busca em Largura nosalgoritmos de caminhos mınimos que veremos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideias comuns a todos os algoritmos
Usamos uma ideia similar a usada em Busca em Largura nosalgoritmos de caminhos mınimos que veremos.
Para cada vertice v ∈ V [G ] associamos um predecessor π[v ].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideias comuns a todos os algoritmos
Usamos uma ideia similar a usada em Busca em Largura nosalgoritmos de caminhos mınimos que veremos.
Para cada vertice v ∈ V [G ] associamos um predecessor π[v ].
Ao final do algoritmo obtemos uma Arvore de CaminhosMınimos com raiz s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideias comuns a todos os algoritmos
Usamos uma ideia similar a usada em Busca em Largura nosalgoritmos de caminhos mınimos que veremos.
Para cada vertice v ∈ V [G ] associamos um predecessor π[v ].
Ao final do algoritmo obtemos uma Arvore de CaminhosMınimos com raiz s.
Um caminho de s a v nesta arvore e um caminho mınimo de s
a v em (G , ω).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Subestrutura otima de caminhos mınimos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Subestrutura otima de caminhos mınimos
Lema 24.1, CLRS Seja (G , ω) um grafo orientado e seja
P = (v1, v2, . . . , vk)
um caminho mınimo de v1 a vk .
Entao para quaisquer i , j com 1 ≤ i ≤ j ≤ k
Pij = (vi , vi+1, . . . , vj)
e um caminho mınimo de vi a vj .
v1 v2 vi vj vk
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Subestrutura otima de caminhos mınimos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Subestrutura otima de caminhos mınimos
Prova. Suponha por contradicao que Pij = (vi , vi+1, . . . , vj) naoseja um caminho mınimo de vi a vj . Assim, existe um caminho Q
de vi a vj tal que ω(Q) < ω(Pij).
v1 v2 vi vj vk
Mas entao o caminho (v0, . . . , vi )Q(vj , . . . , vk) tem peso menorque o peso de P , uma contradicao.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Se d [v ] < ∞, entao o algoritmo encontrou ate aquelemomento um caminho de s a v com peso d [v ].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Se d [v ] < ∞, entao o algoritmo encontrou ate aquelemomento um caminho de s a v com peso d [v ].
O caminho de s a v pode ser recuperado por meio dospredecessores π[ ], se nao houver ciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Relaxacao
Tenta melhorar a estimativa d [v ] examinando (u, v).
5
5 5
59
6
62
2
2
27
u
uu
u
vv
vv
Relax(u, v , ω)Relax(u, v , ω)
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v) entao2 d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Relaxacao dos vizinhos
Em cada iteracao o algoritmo seleciona um vertice u e para cadavizinho v de u aplica Relax(u, v , ω).
5
2
14
25
20
7
5
9
2
14
20
uu
∞
v1 v1
v2 v2
v3 v3
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v) entao2 d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos Mınimos
Veremos tres algoritmos baseados em relaxacao para tipos deinstancias diferentes de Problemas de Caminhos Mınimos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos Mınimos
Veremos tres algoritmos baseados em relaxacao para tipos deinstancias diferentes de Problemas de Caminhos Mınimos.
G e acıclico: aplicacao de ordenacao topologica
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos Mınimos
Veremos tres algoritmos baseados em relaxacao para tipos deinstancias diferentes de Problemas de Caminhos Mınimos.
G e acıclico: aplicacao de ordenacao topologica
(G , ω) nao tem arestas de peso negativo: algoritmo deDijkstra
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos Mınimos
Veremos tres algoritmos baseados em relaxacao para tipos deinstancias diferentes de Problemas de Caminhos Mınimos.
G e acıclico: aplicacao de ordenacao topologica
(G , ω) nao tem arestas de peso negativo: algoritmo deDijkstra
(G , ω) tem arestas de peso negativo, mas nao contem ciclos
negativos: algoritmo de Bellman-Ford.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos em grafos acıclicos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos em grafos acıclicos
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos em grafos acıclicos
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Entrada: grafo orientado acıclico (G , ω) e origem s ∈ V [G ].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos em grafos acıclicos
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Entrada: grafo orientado acıclico (G , ω) e origem s ∈ V [G ].
Saıda: um vetor d [ ] tal que d [v ] = dist(s, v) para v ∈ V [G ]e um vetor π[ ] tal que Gπ e uma Arvore de Caminhos Mınimoscom raiz s de (G , ω).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos em grafos acıclicos
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Entrada: grafo orientado acıclico (G , ω) e origem s ∈ V [G ].
Saıda: um vetor d [ ] tal que d [v ] = dist(s, v) para v ∈ V [G ]e um vetor π[ ] tal que Gπ e uma Arvore de Caminhos Mınimoscom raiz s de (G , ω).
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
6
2 7 −1 −20
3 42
5
4
∞∞∞∞∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
6
2 7 −1 −20
3 42
5
4
∞∞∞∞∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 6
6
2 7 −1 −20
3 42
5
4
∞∞∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
42
5
46
2 7 −1 −20
3
46 62∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
56 5 4
6
2 7 −1 −20
3 42
4
2∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 6 5 3
6
2 7 −1 −20
3 42
5
4
∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 6 5 3
6
2 7 −1 −20
3 42
5
4
∞
r s x y zt
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Linha(s) Tempo total1 O(V + E )2 O(V )3-5 O(V + E )
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Linha(s) Tempo total1 O(V + E )2 O(V )3-5 O(V + E )
Complexidade de Dag-Shortest-Paths: O(V + E )
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Corretude Dag-Shortest-Paths
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Corretude Dag-Shortest-Paths
A corretude de Dag-Shortest-Paths pode ser demonstrada devarias formas.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Corretude Dag-Shortest-Paths
A corretude de Dag-Shortest-Paths pode ser demonstrada devarias formas.
Vamos mostrar alguns lemas/observacoes que serao uteis naanalise de corretude deste e dos outros algoritmos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Desigualdade triangular
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Desigualdade triangular
Lema 24.10, CLRS Para toda aresta (u, v) temos que
dist(s, v) ≤ dist(s, u) + ω(u, v).
Prova. Suponha que existe um caminho mınimo P de s a u. Logo
P + (u, v) e um caminho de s a t de peso
ω(P) + ω(u, v) = dist(s, u) + ω(u, v).
Portanto, dist(s, v) ≤ dist(s, u) + ω(u, v).
u vsdist(s, u)
dist(s, v)
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Desigualdade triangular
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Desigualdade triangular
Se nao existe caminho de s a u em G (i.e., dist(s, u) = ∞), entaoclaramente dist(s, v) ≤ dist(s, u) + ω(u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Desigualdade triangular
Se nao existe caminho de s a u em G (i.e., dist(s, u) = ∞), entaoclaramente dist(s, v) ≤ dist(s, u) + ω(u, v).
Finalmente, se existem caminhos de peso arbitrariamente pequenode s a u (i.e., dist(s, u) = −∞), entao dist(s, v) = −∞.
u vs
−∞
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Um valor d [v ] (e π[v ]) so pode ser modificado atraves de umachamada de Relax(u, v , ω) para alguma aresta (u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Um valor d [v ] (e π[v ]) so pode ser modificado atraves de umachamada de Relax(u, v , ω) para alguma aresta (u, v).
Observacao: o “algoritmo” pode executar outras instrucoes, masestamos interessados apenas nos valores de d [ ] e π[ ]. Assim,analisamos apenas o que acontece apos chamadas aInitialize-Single-Source ou Relax.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Um valor d [v ] (e π[v ]) so pode ser modificado atraves de umachamada de Relax(u, v , ω) para alguma aresta (u, v).
Observacao: o “algoritmo” pode executar outras instrucoes, masestamos interessados apenas nos valores de d [ ] e π[ ]. Assim,analisamos apenas o que acontece apos chamadas aInitialize-Single-Source ou Relax.
A seguir apresentamos propriedades que valem durante a execucaodo “algoritmo”.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v) entao2 d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.11, CLRS Em qualquer iteracao, d [v ] ≥ dist(s, v) parav ∈ V [G ] e d [v ] nunca aumenta.Alem disso, se d [v ] torna-se igual a dist(s, v), entao seu valornunca mais muda.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.11, CLRS Em qualquer iteracao, d [v ] ≥ dist(s, v) parav ∈ V [G ] e d [v ] nunca aumenta.Alem disso, se d [v ] torna-se igual a dist(s, v), entao seu valornunca mais muda.
Prova. Mostraremos que d [v ] ≥ dist(s, v) por inducao no numerode relaxacoes (chamadas a Relax).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.11, CLRS Em qualquer iteracao, d [v ] ≥ dist(s, v) parav ∈ V [G ] e d [v ] nunca aumenta.Alem disso, se d [v ] torna-se igual a dist(s, v), entao seu valornunca mais muda.
Prova. Mostraremos que d [v ] ≥ dist(s, v) por inducao no numerode relaxacoes (chamadas a Relax).
Base: apos a inicializacao, claramente d [v ] ≥ dist(s, v) poisd [v ] = ∞ para v ∈ V − {s} e d [s] = ∞ ≥ dist(s, s) ∈ {0,−∞}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Hipotese de inducao: suponha que d [v ] ≥ dist(s, v) para todov ∈ V apos um certo numero de chamadas a Relax.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Hipotese de inducao: suponha que d [v ] ≥ dist(s, v) para todov ∈ V apos um certo numero de chamadas a Relax.
Vejamos o que acontece apos uma proxima chamada aRelax(u, v). Note que apenas o valor de d [v ] pode mudar.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Hipotese de inducao: suponha que d [v ] ≥ dist(s, v) para todov ∈ V apos um certo numero de chamadas a Relax.
Vejamos o que acontece apos uma proxima chamada aRelax(u, v). Note que apenas o valor de d [v ] pode mudar.
Se d [v ] nao e modificado, entao a propriedade se mantem. Se d [v ]e modificado, entao
d [v ] = d [u] + ω(u, v)
≥ dist(s, u) + ω(u, v) (HI)
≥ dist(s, v) (desigualdade triangular)
e o resultado segue.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Hipotese de inducao: suponha que d [v ] ≥ dist(s, v) para todov ∈ V apos um certo numero de chamadas a Relax.
Vejamos o que acontece apos uma proxima chamada aRelax(u, v). Note que apenas o valor de d [v ] pode mudar.
Se d [v ] nao e modificado, entao a propriedade se mantem. Se d [v ]e modificado, entao
d [v ] = d [u] + ω(u, v)
≥ dist(s, u) + ω(u, v) (HI)
≥ dist(s, v) (desigualdade triangular)
e o resultado segue.
Finalmente, suponha que d [v ] = dist(s, v). Entao o valor d [v ] naopode mais diminuir pois mostramos que d [v ] ≥ dist(s, v) durantea execucao do algoritmo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Corolario 24.12, CLRS Se nao existe caminho de s a v , entaod [v ] = dist(s, v) = ∞ em qualquer iteracao.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Corolario 24.12, CLRS Se nao existe caminho de s a v , entaod [v ] = dist(s, v) = ∞ em qualquer iteracao.
Prova. Pelo Lema 24.11, em qualquer iteracaod [v ] ≥ dist(s, v) = ∞. Como d [v ] = ∞ apos a inicializacao, oresultado segue.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v) entao2 d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Lema 24.13 Imediatamente apos uma chamada Relax(u, v),temos que d [v ] ≤ d [u] + ω(u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.14, CLRS Seja P um caminho mınimo de s a v cujaultima aresta e (u, v) e suponha que d [u] = dist(s, u) e que umasequencia de relaxacoes que inclui Relax(u, v) e executada.Entao imediatamente apos isto, temos que d [v ] = dist(s, v) e d [v ]nunca mais muda.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.14, CLRS Seja P um caminho mınimo de s a v cujaultima aresta e (u, v) e suponha que d [u] = dist(s, u) e que umasequencia de relaxacoes que inclui Relax(u, v) e executada.Entao imediatamente apos isto, temos que d [v ] = dist(s, v) e d [v ]nunca mais muda.
Prova. Note que ω(P) = dist(s, v) = dist(s, u) + ω(u, v) peloLema 24.1. Entao apos a chamada Relax(u, v), temosd [v ] ≤ d [u] + ω(u, v) = dist(s, u) + ω(u, v) = dist(s, v). PeloLema 24.11, segue que d [v ] = dist(s, v) e d [v ] nunca maismuda.
s u v
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.15, CLRS Seja P = (v0 = s, v1, . . . , vk) um caminhomınimo de s = v0 a vk e suponha que as arestas (v0, v1),. . . ,(vk−1, vk) sao relaxadas nesta ordem.Entao apos as relaxacoes, temos d [vk ] = dist(s, vk) e d [vk ] nuncamais muda.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Lema 24.15, CLRS Seja P = (v0 = s, v1, . . . , vk) um caminhomınimo de s = v0 a vk e suponha que as arestas (v0, v1),. . . ,(vk−1, vk) sao relaxadas nesta ordem.Entao apos as relaxacoes, temos d [vk ] = dist(s, vk) e d [vk ] nuncamais muda.
Provaremos por inducao em i que apos a relaxacao da aresta(vi−1, vi ), temos d [vi ] = dist(s, vi ).
Base: i = 0 (antes de relaxar qualquer aresta de P). Claramente,d [s] = 0 = dist(s, s).
s = v0 v1 vi−1 vi vk
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Hipotese de inducao: suponha que d [vi−1] = dist(s, vi−1).Como (v0, . . . , vi ) e um caminho mınimo de s a vi (Lema 24.1),segue do Lema 24.14 que apos Relax(vi−1, vi ) temos qued [vi ] = dist(s, vi ) e este valor nunca mais muda peloLema 24.11.
s = v0 v1 vi−1 vi vk
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Propriedades de um algoritmo baseado em relaxacao
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Lema 24.16, CLRS Suponha que (G , ω) nao contem ciclosnegativos atingıveis por s. Entao em qualquer iteracao apos achamada Initialize-Single-Source, o subgrafo Gπ e umaarvore de raiz s.
Lema 24.17, CLRS Suponha que (G , ω) nao contem ciclosnegativos atingıveis por s. Suponha que sejam feitas uma chamadaa Initialize-Single-Source e uma sequencia de chamadas aRelax que resulta em d [v ] = dist(s, v) para todo v ∈ V . EntaoGπ e uma Arvore de Caminhos Mınimos.
Omitimos as provas aqui.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Como os vertices estao em ordem topologica, as arestas dequalquer caminho mınimo P = (v0 = s, v1, . . . , vk) sao relaxadasna ordem (v0, v1),. . . ,(vk−1, vk).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Como os vertices estao em ordem topologica, as arestas dequalquer caminho mınimo P = (v0 = s, v1, . . . , vk) sao relaxadasna ordem (v0, v1),. . . ,(vk−1, vk).
Logo, pelo Lema 24.15 no final do algoritmo d [v ] = dist(s, v) paratodo v ∈ V .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Como os vertices estao em ordem topologica, as arestas dequalquer caminho mınimo P = (v0 = s, v1, . . . , vk) sao relaxadasna ordem (v0, v1),. . . ,(vk−1, vk).
Logo, pelo Lema 24.15 no final do algoritmo d [v ] = dist(s, v) paratodo v ∈ V .
Pelo Lema 24.17, o vetor π[ ] define uma Arvore de CaminhosMınimos com raiz s. Isto mostra que Dag-Shortest-Paths
funciona corretamente.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths (alternativa)
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths (alternativa)
Outra forma de mostrar a correcao de Dag-Shortest-Paths eobservar que vale a seguinte recorrencia para dist(s, v):
u vs
dist(s, v) =
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths (alternativa)
Outra forma de mostrar a correcao de Dag-Shortest-Paths eobservar que vale a seguinte recorrencia para dist(s, v):
u vs
dist(s, v) = minu:v∈Adj[u]
dist(s, u) + ω(u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths (alternativa)
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao de Dag-Shortest-Paths (alternativa)
Dag-Shortest-Paths(G , ω, s)1 Ordene topologicamente os vertices de G
2 Initialize-Single-Source(G , s)3 para cada vertice u na ordem topologica faca
4 para cada v ∈ Adj[u] faca5 Relax(u, v , ω)6 devolva d , π
A correcao de Dag-Shortest-Paths segue por inducao e daformula de recorrencia
dist(s, v) = minu:v∈Adj[u]
dist(s, u) + ω(u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Perguntas
Pergunta 1. Como se resolve o problema de encontrar um caminhode peso maximo de s a t em um grafo orientado acıclico (G , ω)?
Pergunta 2. Como se resolve o Problema do Caminho Mınimo de s
a t em tempo linear para um grafo orientado em que todas asarestas tem o mesmo peso C > 0?
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Veremos agora um algoritmo para caminhos mınimos em grafosque podem conter ciclos, mas sem arestas de peso negativo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Veremos agora um algoritmo para caminhos mınimos em grafosque podem conter ciclos, mas sem arestas de peso negativo.
O algoritmo foi proposto por E.W. Dijkstra e e bastante similar aoalgoritmo de Prim para o problema da Arvore Geradora Mınima.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
O algoritmo de Dijkstra recebe um grafo orientado (G , ω) (semarestas de peso negativo) e um vertice s de G
e devolve
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
O algoritmo de Dijkstra recebe um grafo orientado (G , ω) (semarestas de peso negativo) e um vertice s de G
e devolve
para cada v ∈ V [G ], o valor d [v ] = dist(s, v)
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
O algoritmo de Dijkstra recebe um grafo orientado (G , ω) (semarestas de peso negativo) e um vertice s de G
e devolve
para cada v ∈ V [G ], o valor d [v ] = dist(s, v)(ou seja, o peso de um caminho mınimo de s a v) e
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
O algoritmo de Dijkstra recebe um grafo orientado (G , ω) (semarestas de peso negativo) e um vertice s de G
e devolve
para cada v ∈ V [G ], o valor d [v ] = dist(s, v)(ou seja, o peso de um caminho mınimo de s a v) e
uma Arvore de Caminhos Mınimos com raiz s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
O algoritmo de Dijkstra recebe um grafo orientado (G , ω) (semarestas de peso negativo) e um vertice s de G
e devolve
para cada v ∈ V [G ], o valor d [v ] = dist(s, v)(ou seja, o peso de um caminho mınimo de s a v) e
uma Arvore de Caminhos Mınimos com raiz s.
Um caminho de s a v nesta arvore tem peso d [v ],
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
O algoritmo de Dijkstra recebe um grafo orientado (G , ω) (semarestas de peso negativo) e um vertice s de G
e devolve
para cada v ∈ V [G ], o valor d [v ] = dist(s, v)(ou seja, o peso de um caminho mınimo de s a v) e
uma Arvore de Caminhos Mınimos com raiz s.
Um caminho de s a v nesta arvore tem peso d [v ],ou seja, e um caminho mınimo de s a v em (G , ω).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Se d [v ] < ∞, entao o algoritmo encontrou ate aquelemomento um caminho de s a v com peso d [v ].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Se d [v ] < ∞, entao o algoritmo encontrou ate aquelemomento um caminho de s a v com peso d [v ].
O caminho de s a v pode ser recuperado por meio dospredecessores π[ ], se nao houver ciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: relaxacao
Tenta melhorar a estimativa d [v ] examinando (u, v).
5
5 5
59
6
62
2
2
27
u
uu
u
vv
vv
Relax(u, v , ω)Relax(u, v , ω)
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v)2 entao d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: relaxacao dos vizinhos
Em cada iteracao o algoritmo seleciona um vertice u e para cadavizinho v de u aplica Relax(u, v , ω).
5
2
14
25
20
7
5
9
2
14
20
uu
∞
v1 v1
v2 v2
v3 v3
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v) faca2 d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Um valor d [v ] (e π[v ]) so pode ser modificado atraves de umachamada de Relax(u, v , ω) para alguma aresta (u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Lema 24.10, CLRS Para toda aresta (u, v) temos que
dist(s, v) ≤ dist(s, u) + ω(u, v).
u vsdist(s, u)
dist(s, v)
Lema 24.15, CLRS Seja P = (v0 = s, v1, . . . , vk) um caminhomınimo de s = v0 a vk e suponha que as arestas (v0, v1),. . . ,(vk−1, vk) sao relaxadas nesta ordem.Entao apos as relaxacoes, temos d [vk ] = dist(s, vk) e d [vk ] nuncamais muda.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Lema 24.16, CLRS Suponha que (G , ω) nao contem ciclosnegativos atingıveis por s. Entao em qualquer iteracao apos achamada Initialize-Single-Source, o subgrafo Gπ e umaarvore de raiz s.
Lema 24.17, CLRS Suponha que (G , ω) nao contem ciclosnegativos atingıveis por s. Suponha que sejam feitas uma chamadaa Initialize-Single-Source e uma sequencia de chamadas aRelax que resulta em d [v ] = dist(s, v) para todo v ∈ V . EntaoGπ e uma Arvore de Caminhos Mınimos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Dijkstra
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Dijkstra
Suponha que encontramos ate o momento um conjunto S
formado pelos vertices mais proximos de s.(Na primeira iteracao S = {s}).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Dijkstra
Suponha que encontramos ate o momento um conjunto S
formado pelos vertices mais proximos de s.(Na primeira iteracao S = {s}).
O algoritmo mantem tambem uma Arvore de CaminhosMınimos formada apenas por vertices de S .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Dijkstra
Suponha que encontramos ate o momento um conjunto S
formado pelos vertices mais proximos de s.(Na primeira iteracao S = {s}).
O algoritmo mantem tambem uma Arvore de CaminhosMınimos formada apenas por vertices de S .
A ideia e estender o conjunto S (i.e., a arvore) acrescentandoo vertice u em V − S que esteja mais proximo de s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Dijkstra
Suponha que encontramos ate o momento um conjunto S
formado pelos vertices mais proximos de s.(Na primeira iteracao S = {s}).
O algoritmo mantem tambem uma Arvore de CaminhosMınimos formada apenas por vertices de S .
A ideia e estender o conjunto S (i.e., a arvore) acrescentandoo vertice u em V − S que esteja mais proximo de s.
Um detalhe importante e como encontrar tal vertice.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Dijkstra(G , ω, s)1 Initialize-Single-Source(G , s)2 S ← ∅3 Q ← V [G ]4 enquanto Q 6= ∅ faca
5 u ← Extract-Min(Q)6 S ← S ∪ {u}7 para cada vertice v ∈ Adj[u] faca8 Relax(u, v , ω)9 devolva d , π
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Dijkstra(G , ω, s)1 Initialize-Single-Source(G , s)2 S ← ∅3 Q ← V [G ]4 enquanto Q 6= ∅ faca
5 u ← Extract-Min(Q)6 S ← S ∪ {u}7 para cada vertice v ∈ Adj[u] faca8 Relax(u, v , ω)9 devolva d , π
O conjunto Q e implementado como uma fila de prioridade comchave d .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Dijkstra(G , ω, s)1 Initialize-Single-Source(G , s)2 S ← ∅3 Q ← V [G ]4 enquanto Q 6= ∅ faca
5 u ← Extract-Min(Q)6 S ← S ∪ {u}7 para cada vertice v ∈ Adj[u] faca8 Relax(u, v , ω)9 devolva d , π
O conjunto Q e implementado como uma fila de prioridade comchave d .
O conjunto S nao e realmente necessario, mas simplifica a analisedo algoritmo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Dijkstra(G , ω, s)1 Initialize-Single-Source(G , s)2 S ← ∅3 Q ← V [G ]4 enquanto Q 6= ∅ faca
5 u ← Extract-Min(Q)6 S ← S ∪ {u}7 para cada vertice v ∈ Adj[u] faca8 Relax(u, v , ω)9 devolva d , π
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Dijkstra
Dijkstra(G , ω, s)1 Initialize-Single-Source(G , s)2 S ← ∅3 Q ← V [G ]4 enquanto Q 6= ∅ faca
5 u ← Extract-Min(Q)6 S ← S ∪ {u}7 para cada vertice v ∈ Adj[u] faca8 Relax(u, v , ω)9 devolva d , π
Mostraremos que em cada iteracao da linha 5, o vertice u comd [u] mınimo e realmente o vertice de V [G ]− S que esta maisproximo de s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
0
10
5
7
2 3
1
9
2
3
5
4 6 ∞
∞
∞
∞
∞
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
10
5
0
10
5
7
2 3
1
9
2
3
5
4 6 ∞
∞
∞
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
8
5
14
7
0
10
5
7
2 3
1
9
2
3
5
4 6 ∞
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
8
6
5
4
7
12
10
5
7
2 3
1
9
2
3
5
13
0
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
82
6
9
7
12
10
5
7
2 3
1
9
2
5
4
5
0
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
82
5
4 6
7
10
5
7
2 3
1
9
25
9
0 11
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS modificado)
8
11
29
7
10
5
7
2 3
1
9
2
5
4 6
5
0
r
s t
u v
w
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo
Precisamos provar que quando o algoritmo para, temos que
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo
Precisamos provar que quando o algoritmo para, temos que
d [v ] = dist(s, v) para todo v ∈ V [G ] e
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo
Precisamos provar que quando o algoritmo para, temos que
d [v ] = dist(s, v) para todo v ∈ V [G ] e
o grafo Gπ e uma Arvore de Caminhos Mınimos com raiz s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Invariante principal
O seguinte invariante vale no inıcio de cada iteracao da linha 4 noalgoritmo Dijkstra.
Invariante: d [x ] = dist(s, x) para cada x ∈ S .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Invariante principal
O seguinte invariante vale no inıcio de cada iteracao da linha 4 noalgoritmo Dijkstra.
Invariante: d [x ] = dist(s, x) para cada x ∈ S .
Claramente o invariante vale na primeira iteracao pois S = ∅.Tambem vale no inıcio da segunda iteracao pois S = {s} ed [s] = 0.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Invariante principal
O seguinte invariante vale no inıcio de cada iteracao da linha 4 noalgoritmo Dijkstra.
Invariante: d [x ] = dist(s, x) para cada x ∈ S .
Claramente o invariante vale na primeira iteracao pois S = ∅.Tambem vale no inıcio da segunda iteracao pois S = {s} ed [s] = 0.
No final do algoritmo, S e o conjunto dos vertices atingıveispor s. Portanto, se o invariante vale, para cada v ∈ V [G ], ovalor d [v ] e exatamente a distancia de s a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao do invariante
O algoritmo de Dijkstra escolhe um vertice u com menord [u] em Q e atualiza S ← S ∪ {u}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao do invariante
O algoritmo de Dijkstra escolhe um vertice u com menord [u] em Q e atualiza S ← S ∪ {u}.
Basta verificar entao que neste momento d [u] = dist(s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao do invariante
O algoritmo de Dijkstra escolhe um vertice u com menord [u] em Q e atualiza S ← S ∪ {u}.
Basta verificar entao que neste momento d [u] = dist(s, u).
Suponha por contradicao que em alguma iteracao o algoritmoescolhe u tal que d [u] > dist(s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao do invariante
O algoritmo de Dijkstra escolhe um vertice u com menord [u] em Q e atualiza S ← S ∪ {u}.
Basta verificar entao que neste momento d [u] = dist(s, u).
Suponha por contradicao que em alguma iteracao o algoritmoescolhe u tal que d [u] > dist(s, u).
Podemos supor que u e o primeiro vertice para o qual isto ocorre.Note que u 6= s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
Seja P um caminho mınimo de s a u (ou seja, com pesodist(s, u)). Seja y o primeiro vertice de P que nao pertence a S .Seja x o vertice em P que precede y .
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Primeiro, mostraremos que d [y ] = dist(s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Primeiro, mostraremos que d [y ] = dist(s, y).
Por hipotese, quando x foi colocado em S , d [x ] = dist(s, x).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Primeiro, mostraremos que d [y ] = dist(s, y).
Por hipotese, quando x foi colocado em S , d [x ] = dist(s, x).Neste instante, (x , y) foi relaxada e portanto, pelo Lema 24.11temos d [y ] = dist(s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Entaod [y ] = dist(s, y)
= ω(P1) + ω(x , y)≤ ω(P1) + ω(x , y) + ω(P2)= dist(s, u) < d [u].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
s
u
x
y
P1
P2S
d [u] > dist(s, u)?
Entaod [y ] = dist(s, y)
= ω(P1) + ω(x , y)≤ ω(P1) + ω(x , y) + ω(P2)= dist(s, u) < d [u].
Mas entao d [y ] < d [u] o que contraria a escolha de u.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Demonstracao
Isto mostra que ao final do algoritmo de Dijkstra, temosd [v ] = dist(s, v) para todo v ∈ V [G ]. Do Lema 24.17 segue queGπ e uma Arvore de Caminhos Mınimos com raiz s de (G , ω).
A prova acima implica que os vertices u sao colocados em S emordem nao-decrescente dos valores dist(s, u).
Na demonstracao foi importante o fato de nao haver arestasnegativas no grafo. De fato, nao se pode garantir que o algoritmode Dijkstra funciona se o grafo de entrada nao satisfaz estarestricao.
Exercıcio. Encontre um grafo orientado ponderado com 4 verticespara o qual o algoritmo de Dijkstra nao funciona. Ha pelo menosum exemplo com apenas uma unica aresta negativa e sem ciclos depeso negativo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade de tempo
Dijkstra(G , ω, s)1 Initialize-Single-Source(G , s)2 S ← ∅3 Q ← V [G ]4 enquanto Q 6= ∅ faca
5 u ← Extract-Min(Q)6 S ← S ∪ {u}7 para cada vertice v ∈ Adj[u] faca8 Relax(u, v , ω)9 devolva d , π
Depende de como a fila de prioridade Q e implementada.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
As linhas 1–3 correspondem a |V | chamadas a Insert.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
As linhas 1–3 correspondem a |V | chamadas a Insert.
O laco da linha 4 e executado O(V ) vezes.Total: O(V ) chamadas a Extract-Min.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
As linhas 1–3 correspondem a |V | chamadas a Insert.
O laco da linha 4 e executado O(V ) vezes.Total: O(V ) chamadas a Extract-Min.
O laco das linhas 7–8 e executado O(E ) vezes no total.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
As linhas 1–3 correspondem a |V | chamadas a Insert.
O laco da linha 4 e executado O(V ) vezes.Total: O(V ) chamadas a Extract-Min.
O laco das linhas 7–8 e executado O(E ) vezes no total.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
As linhas 1–3 correspondem a |V | chamadas a Insert.
O laco da linha 4 e executado O(V ) vezes.Total: O(V ) chamadas a Extract-Min.
O laco das linhas 7–8 e executado O(E ) vezes no total.Ao atualizar uma chave na linha 8 e feita uma chamada
implıcita a Decrease-Key.Total: O(E ) chamadas a Decrease-Key.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
As linhas 1–3 correspondem a |V | chamadas a Insert.
O laco da linha 4 e executado O(V ) vezes.Total: O(V ) chamadas a Extract-Min.
O laco das linhas 7–8 e executado O(E ) vezes no total.Ao atualizar uma chave na linha 8 e feita uma chamada
implıcita a Decrease-Key.Total: O(E ) chamadas a Decrease-Key.
Tempo total:O(V ) Insert+ O(V ) Extract-Min+O(E ) Decrease-Key
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
Tempo total
O(V ) Insert+ O(V ) Extract-Min+O(E ) Decrease-Key
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
Tempo total
O(V ) Insert+ O(V ) Extract-Min+O(E ) Decrease-Key
Implementando Q como um vetor (coloque d [v ] na posicao v
do vetor), Insert e Decrease-Key gastam tempo Θ(1) eExtract-Min gasta tempo O(V ), resultando em um totalde O(V 2 + E ) = O(V 2).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
Tempo total
O(V ) Insert+ O(V ) Extract-Min+O(E ) Decrease-Key
Implementando Q como um vetor (coloque d [v ] na posicao v
do vetor), Insert e Decrease-Key gastam tempo Θ(1) eExtract-Min gasta tempo O(V ), resultando em um totalde O(V 2 + E ) = O(V 2).
Implementando a fila de prioridade Q como um min-heap,Insert, Extract-Min e Decrease-Key gastam tempoO(lgV ), resultando em um total de O((V + E ) lgV ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Complexidade do algoritmo de Dijkstra
Tempo total
O(V ) Insert+ O(V ) Extract-Min+O(E ) Decrease-Key
Implementando Q como um vetor (coloque d [v ] na posicao v
do vetor), Insert e Decrease-Key gastam tempo Θ(1) eExtract-Min gasta tempo O(V ), resultando em um totalde O(V 2 + E ) = O(V 2).
Implementando a fila de prioridade Q como um min-heap,Insert, Extract-Min e Decrease-Key gastam tempoO(lgV ), resultando em um total de O((V + E ) lgV ).
Usando heaps de Fibonacci (Extract-Min e O(lgV ) eInsert e Decrease-Key sao O(1)) a complexidade caipara O(V lgV + E ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Arestas/ciclos de peso negativo
O algoritmo de Dijkstra resolve o Problema dos CaminhosMınimos quando (G , ω) nao possui arestas de peso negativo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Arestas/ciclos de peso negativo
O algoritmo de Dijkstra resolve o Problema dos CaminhosMınimos quando (G , ω) nao possui arestas de peso negativo.
Quando (G , ω) possui arestas de peso negativo, o algoritmode Dijkstra nao funciona.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Arestas/ciclos de peso negativo
O algoritmo de Dijkstra resolve o Problema dos CaminhosMınimos quando (G , ω) nao possui arestas de peso negativo.
Quando (G , ω) possui arestas de peso negativo, o algoritmode Dijkstra nao funciona.
Uma das dificuldades com arestas de peso negativo e apossıvel existencia de ciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos — uma dificuldade
Pode-se mostrar que o Problema dos Caminhos Mınimos parainstancias com ciclos negativos e NP-difıcil.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos — uma dificuldade
Pode-se mostrar que o Problema dos Caminhos Mınimos parainstancias com ciclos negativos e NP-difıcil.
Informalmente, se um problema pertence a classe dosproblemas NP-difıceis entao acredita-se que nao existealgoritmo eficiente para resolve-lo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ciclos negativos — uma dificuldade
Pode-se mostrar que o Problema dos Caminhos Mınimos parainstancias com ciclos negativos e NP-difıcil.
Informalmente, se um problema pertence a classe dosproblemas NP-difıceis entao acredita-se que nao existealgoritmo eficiente para resolve-lo.
Este e o principal motivo do porque nos restringimos aoProblema de Caminhos Mınimos sem ciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Se d [v ] < ∞, entao algoritmo encontrou ate aquele momentoum caminho de s a v com peso d [v ].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: inicializacao
Initialize-Single-Source(G , s)1 para cada vertice v ∈ V [G ] faca2 d [v ] ← ∞3 π[v ] ← nil
4 d [s] ← 0
O valor d [v ] e uma estimativa superior de dist(s, v), o pesode um caminho mınimo de s a v .
Se d [v ] < ∞, entao algoritmo encontrou ate aquele momentoum caminho de s a v com peso d [v ].
O caminho de s a v pode ser recuperado por meio dospredecessores π[ ], se nao houver ciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: relaxacao
Tenta melhorar a estimativa d [v ] examinando (u, v).
5
5 5
59
6
62
2
2
27
u
uu
u
vv
vv
Relax(u, v , ω)Relax(u, v , ω)
Relax(u, v , ω)1 se d [v ] > d [u] + ω(u, v)2 entao d [v ] ← d [u] + ω(u, v)3 π[v ] ← u
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
As propriedades que veremos valem para qualquer “algoritmo” quesatisfaz as restricoes abaixo.
A inicializacao e feita por Initialize-Single-Source(G , s).
Um valor d [v ] (e π[v ]) so pode ser modificado atraves de umachamada de Relax(u, v , ω) para alguma aresta (u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Lema 24.10, CLRS Para toda aresta (u, v) temos que
dist(s, v) ≤ dist(s, u) + ω(u, v).
u vsdist(s, u)
dist(s, v)
Lema 24.15, CLRS Seja P = (v0 = s, v1, . . . , vk) um caminhomınimo de s = v0 a vk e suponha que as arestas (v0, v1),. . . ,(vk−1, vk) sao relaxadas nesta ordem.Entao apos as relaxacoes, temos d [vk ] = dist(s, vk) e d [vk ] nuncamais muda.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Revisao: algoritmos baseados em relaxacao
Seja Gπ com conjunto de vertices Vπ = {s}∪{v ∈ V : π[v ] 6= nil}e conjunto de arestas Eπ = {(π[v ], v) : v ∈ V , π[v ] 6= nil}.
Lema 24.16, CLRS Suponha que (G , ω) nao contem ciclosnegativos atingıveis por s. Entao em qualquer iteracao apos achamada Initialize-Single-Source, o subgrafo Gπ e umaarvore de raiz s.
Lema 24.17, CLRS Suponha que (G , ω) nao contem ciclosnegativos atingıveis por s. Suponha que sejam feitas uma chamadaa Initialize-Single-Source e uma sequencia de chamadas aRelax que resulta em d [v ] = dist(s, v) para todo v ∈ V . EntaoGπ e uma Arvore de Caminhos Mınimos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Bellman-Ford
Descreveremos a seguir o algoritmo de Bellman-Ford queresolver o Problema dos Caminhos Mınimos em grafo (G , ω)que podem ter arestas de peso negativo, mas nao contemciclos negativos.
Na verdade, o algoritmo consegue resolver problema mesmoque tenham ciclos negativos, mas nao sejam atingıveis pelaorigem s.
Ele tambem consegue detectar se existe um ciclo negativoatingıvel por s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Bellman-Ford
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Bellman-Ford
Na iteracao i = 1 executamos Relax para todas as arestas.Isto garante que a primeira aresta de qualquer caminhomınimo sera relaxada.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Bellman-Ford
Na iteracao i = 1 executamos Relax para todas as arestas.Isto garante que a primeira aresta de qualquer caminhomınimo sera relaxada.
Repetimos este passo para as iteracoes i = 2, 3, . . . , |V | − 1.Por que |V | − 1?
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Bellman-Ford
Na iteracao i = 1 executamos Relax para todas as arestas.Isto garante que a primeira aresta de qualquer caminhomınimo sera relaxada.
Repetimos este passo para as iteracoes i = 2, 3, . . . , |V | − 1.Por que |V | − 1?Porque um caminho (simples) tem no maximo |V | − 1 arestas.Assim, apos essas |V | − 1 iteracoes, garantidamente, todas asarestas de um caminho mınimo foram relaxadas na ordemdesejada.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Ideia do algoritmo de Bellman-Ford
Na iteracao i = 1 executamos Relax para todas as arestas.Isto garante que a primeira aresta de qualquer caminhomınimo sera relaxada.
Repetimos este passo para as iteracoes i = 2, 3, . . . , |V | − 1.Por que |V | − 1?Porque um caminho (simples) tem no maximo |V | − 1 arestas.Assim, apos essas |V | − 1 iteracoes, garantidamente, todas asarestas de um caminho mınimo foram relaxadas na ordemdesejada.
E preciso fazer mais uma iteracao de relaxar todas as arestaspara verificar se o grafo contem ciclos negativos.Se houver, nao ha garantia de que os valores obtidos nas|V | − 1 primeiras iteracoes estao corretas.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Bellman-Ford
O algoritmo de Bellman-Ford recebe um grafo orientado (G , ω)(possivelmente com arestas de peso negativo) e um vertice origems de G .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Bellman-Ford
O algoritmo de Bellman-Ford recebe um grafo orientado (G , ω)(possivelmente com arestas de peso negativo) e um vertice origems de G .
Ele devolve um valor booleano
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Bellman-Ford
O algoritmo de Bellman-Ford recebe um grafo orientado (G , ω)(possivelmente com arestas de peso negativo) e um vertice origems de G .
Ele devolve um valor booleano
FALSE se existe um ciclo negativo atingıvel a partir de s, ou
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Bellman-Ford
O algoritmo de Bellman-Ford recebe um grafo orientado (G , ω)(possivelmente com arestas de peso negativo) e um vertice origems de G .
Ele devolve um valor booleano
FALSE se existe um ciclo negativo atingıvel a partir de s, ou
TRUE e neste caso devolve tambem uma Arvore de CaminhosMınimos com raiz s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Bellman-Ford
Bellman-Ford(G , ω, s)1 Initialize-Single-Source(G , s)2 para i ← 1 ate |V [G ]| − 1 faca
3 para cada aresta (u, v) ∈ E [G ] faca4 Relax(u, v , ω)5 para cada aresta (u, v) ∈ E [G ] faca6 se d [v ] > d [u] + ω(u, v)7 entao devolva FALSE8 devolva TRUE, d , π
Complexidade de tempo: O(VE )
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS)
0 7
5
−2
−3
−42
7
9
6
8
∞∞
∞∞
s
t
z
x
y
Ordem:(t, x), (t, y), (t, z), (x , t), (y , x), (y , z), (z , x), (z , s), (s, t), (s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS)
0 7
5
−2
−3
−42
7
9
6
8
6
7
∞
∞
s
t
z
x
y
Ordem:(t, x), (t, y), (t, z), (x , t), (y , x), (y , z), (z , x), (z , s), (s, t), (s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS)
0 7
5
−2
−3
−42
7
9
6
8
6
7
4
2
s
t
z
x
y
Ordem:(t, x), (t, y), (t, z), (x , t), (y , x), (y , z), (z , x), (z , s), (s, t), (s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS)
0 7
5
−2
−3
−42
7
9
6
8
7
4
2
2
s
t
z
x
y
Ordem:(t, x), (t, y), (t, z), (x , t), (y , x), (y , z), (z , x), (z , s), (s, t), (s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo (CLRS)
0 7
5
−2
−3
−42
7
9
6
8
7
4
−2
2
s
t
z
x
y
Ordem:(t, x), (t, y), (t, z), (x , t), (y , x), (y , z), (z , x), (z , s), (s, t), (s, y).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo com ciclo negativo
Inicializacao.
1 1 1
−10
s u v t
0 ∞ ∞ ∞
Ordem: (t, u), (v , t), (u, v), (s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo com ciclo negativo
Final da iteracao 1.
1 1 1
−10
s u v t
0 1 ∞ ∞
Ordem: (t, u), (v , t), (u, v), (s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo com ciclo negativo
Final da iteracao 2.
1 1 1
−10
s u v t
0 1 2 ∞
Ordem: (t, u), (v , t), (u, v), (s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo com ciclo negativo
Final da iteracao 3.
1 1 1
−10
s u v t
0 1 2 3
Ordem: (t, u), (v , t), (u, v), (s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo com ciclo negativo
Iteracao 4: 1 = d [u] > d [t] + ω(t, u) = 3− 10 = −7
1 1 1
−10
s u v t
0 1 2 3
Ordem: (t, u), (v , t), (u, v), (s, u).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Teorema 24.4 (CLRS).Se (G , ω) nao contem ciclos negativos atingıveis por s, entao nofinal
o algoritmo devolve TRUE,
d [v ] = dist(s, v) para v ∈ V e
π[ ] define uma Arvore de Caminhos Mınimos.
Se (G , ω) contem ciclos negativos atingıveis por s, entao no final oalgoritmo devolve FALSE.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Primeiramente, vamos supor que o grafo nao possui ciclosnegativos atingıveis por s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Primeiramente, vamos supor que o grafo nao possui ciclosnegativos atingıveis por s.
Relembrando. . .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Primeiramente, vamos supor que o grafo nao possui ciclosnegativos atingıveis por s.
Relembrando. . .
Lema 24.15, CLRS Seja P = (v0 = s, v1, . . . , vk) um caminhomınimo de s = v0 a vk e suponha que as arestas (v0, v1),. . . ,(vk−1, vk) sao relaxadas nesta ordem.Entao apos as relaxacoes, temos d [vk ] = dist(s, vk) e d [vk ] nuncamais muda.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Seja v um vertice atingıvel por s e seja
P = (v0 = s, v1, . . . , vk = v)
um caminho mınimo de s a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Seja v um vertice atingıvel por s e seja
P = (v0 = s, v1, . . . , vk = v)
um caminho mınimo de s a v .
Note que P tem no maximo |V | − 1 arestas. Cada uma das|V | − 1 iteracoes do laco das linhas 2–4 relaxa todas as |E | arestas.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Seja v um vertice atingıvel por s e seja
P = (v0 = s, v1, . . . , vk = v)
um caminho mınimo de s a v .
Note que P tem no maximo |V | − 1 arestas. Cada uma das|V | − 1 iteracoes do laco das linhas 2–4 relaxa todas as |E | arestas.
Na iteracao i a aresta (vi−1, vi ) e relaxada.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Seja v um vertice atingıvel por s e seja
P = (v0 = s, v1, . . . , vk = v)
um caminho mınimo de s a v .
Note que P tem no maximo |V | − 1 arestas. Cada uma das|V | − 1 iteracoes do laco das linhas 2–4 relaxa todas as |E | arestas.
Na iteracao i a aresta (vi−1, vi ) e relaxada.
Logo, pelo Lema 24.16, d [v ] = d [vk ] = dist(s, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Se v e um vertice nao atingıvel por s entao d [v ] = ∞, pois d [v ]foi inicializado com este valor e ao longo do algoritmo vale qued [v ] ≥ dist(s, v) = ∞.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Se v e um vertice nao atingıvel por s entao d [v ] = ∞, pois d [v ]foi inicializado com este valor e ao longo do algoritmo vale qued [v ] ≥ dist(s, v) = ∞.
Assim, no final do algoritmo d [v ] = dist(s, v) para v ∈ V .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Se v e um vertice nao atingıvel por s entao d [v ] = ∞, pois d [v ]foi inicializado com este valor e ao longo do algoritmo vale qued [v ] ≥ dist(s, v) = ∞.
Assim, no final do algoritmo d [v ] = dist(s, v) para v ∈ V .
Pelo Lema 24.17, Gπ e uma Arvore de Caminhos Mınimos com raizs de (G , ω).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Agora falta mostrar que Bellman-Ford devolve TRUE.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Agora falta mostrar que Bellman-Ford devolve TRUE.
Seja (u, v) uma aresta de G . Entao
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Agora falta mostrar que Bellman-Ford devolve TRUE.
Seja (u, v) uma aresta de G . Entao
d [v ] = dist(s, v)
≤ dist(s, u) + ω(u, v) (Lema 24.10)
= d [u] + ω(u, v).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Agora falta mostrar que Bellman-Ford devolve TRUE.
Seja (u, v) uma aresta de G . Entao
d [v ] = dist(s, v)
≤ dist(s, u) + ω(u, v) (Lema 24.10)
= d [u] + ω(u, v).
Assim, nenhum dos testes da linha 6 faz com que o algoritmodevolva FALSE. Logo, ele devolve TRUE.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Suponha que (G , ω) contem um ciclo negativo atingıvel por s.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Suponha que (G , ω) contem um ciclo negativo atingıvel por s.
Seja C = (v0, v1, . . . , vk = v0) um tal ciclo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Suponha que (G , ω) contem um ciclo negativo atingıvel por s.
Seja C = (v0, v1, . . . , vk = v0) um tal ciclo.
Entao∑k
i=1 ω(vi−1, vi ) < 0.
v0 = vk v1
v2
v3v4
vk−1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Suponha por contradicao que o algoritmo devolve TRUE.Entao d [vi ] ≤ d [vi−1] + ω(vi−1, vi ) para i = 1, 2 . . . , k .
v0 = vk v1
v2
v3v4
vk−1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Somando as desigualdades ao longo do ciclo temos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Somando as desigualdades ao longo do ciclo temos
k∑
i=1
d [vi ] ≤k
∑
i=1
(d [vi−1] + ω(vi−1, vi ))
=k
∑
i=1
d [vi−1] +k
∑
i=1
ω(vi−1, vi ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Somando as desigualdades ao longo do ciclo temos
k∑
i=1
d [vi ] ≤k
∑
i=1
(d [vi−1] + ω(vi−1, vi ))
=k
∑
i=1
d [vi−1] +k
∑
i=1
ω(vi−1, vi ).
Como v0 = vk , temos que∑k
i=1 d [vi ] =∑k
i=1 d [vi−1].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Correcao do algoritmo Bellman-Ford
Somando as desigualdades ao longo do ciclo temos
k∑
i=1
d [vi ] ≤k
∑
i=1
(d [vi−1] + ω(vi−1, vi ))
=k
∑
i=1
d [vi−1] +k
∑
i=1
ω(vi−1, vi ).
Como v0 = vk , temos que∑k
i=1 d [vi ] =∑k
i=1 d [vi−1].
Mas entao∑k
i=1 ω(vi−1, vi ) ≥ 0 o que contraria o fato do ciclo sernegativo.Isto conclui a prova de correcao.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
As vezes e possıvel transformar uma instancia (G , ω) comarestas de peso negativo (mas sem ciclos negativos) em umainstancia equivalente (G , ω′) sem arestas de peso negativo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
As vezes e possıvel transformar uma instancia (G , ω) comarestas de peso negativo (mas sem ciclos negativos) em umainstancia equivalente (G , ω′) sem arestas de peso negativo.
Suponha que voce conhece um valor p[v ] para todo v ∈ V
que satisfaz a seguinte propriedade:
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
As vezes e possıvel transformar uma instancia (G , ω) comarestas de peso negativo (mas sem ciclos negativos) em umainstancia equivalente (G , ω′) sem arestas de peso negativo.
Suponha que voce conhece um valor p[v ] para todo v ∈ V
que satisfaz a seguinte propriedade:
p[v ] ≤ p[u] + ω(u, v) para toda aresta (u, v) ∈ E .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
As vezes e possıvel transformar uma instancia (G , ω) comarestas de peso negativo (mas sem ciclos negativos) em umainstancia equivalente (G , ω′) sem arestas de peso negativo.
Suponha que voce conhece um valor p[v ] para todo v ∈ V
que satisfaz a seguinte propriedade:
p[v ] ≤ p[u] + ω(u, v) para toda aresta (u, v) ∈ E .
Por exemplo, a funcao p[v ] := dist(s, v) satisfaz estapropriedade!
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
As vezes e possıvel transformar uma instancia (G , ω) comarestas de peso negativo (mas sem ciclos negativos) em umainstancia equivalente (G , ω′) sem arestas de peso negativo.
Suponha que voce conhece um valor p[v ] para todo v ∈ V
que satisfaz a seguinte propriedade:
p[v ] ≤ p[u] + ω(u, v) para toda aresta (u, v) ∈ E .
Por exemplo, a funcao p[v ] := dist(s, v) satisfaz estapropriedade!Mas suporemos que nao e este o caso, pois o que queremosdeterminar e exatamente dist(s, v) para v ∈ V .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Considere a instancia (G , ω′) onde
ω′(u, v) = ω(u, v)+p[u]−p[v ] para toda aresta (u, v) ∈ E .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Considere a instancia (G , ω′) onde
ω′(u, v) = ω(u, v)+p[u]−p[v ] para toda aresta (u, v) ∈ E .
Note que ω′(u, v) ≥ 0 para toda aresta (u, v) ∈ E .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Considere a instancia (G , ω′) onde
ω′(u, v) = ω(u, v)+p[u]−p[v ] para toda aresta (u, v) ∈ E .
Note que ω′(u, v) ≥ 0 para toda aresta (u, v) ∈ E .Seja P = (s = v0, v1, . . . , vk−1, vk = t) um caminho de s a t
em G . Entao
ω′(P) =
k∑
i=1
ω′(vi−1, vi )
=
k∑
i=1
(
ω(vi−1, vi ) + p[vi−1]− p[vi ])
=k
∑
i=1
ω(vi−1, vi ) +k
∑
i=1
(p[vi−1]− p[vi ])
= ω(P) + p[v0]− p[vk ] = ω(P) + p[s]− p[t].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Considere a instancia (G , ω′) onde
ω′(u, v) = ω(u, v)+p[u]−p[v ] para toda aresta (u, v) ∈ E .
Seja P = (s = v0, v1, . . . , vk−1, vk = t) um caminho de s a t
em G .
Entao ω′(P) = ω(P) + p[s]− p[t].
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Considere a instancia (G , ω′) onde
ω′(u, v) = ω(u, v)+p[u]−p[v ] para toda aresta (u, v) ∈ E .
Seja P = (s = v0, v1, . . . , vk−1, vk = t) um caminho de s a t
em G .
Entao ω′(P) = ω(P) + p[s]− p[t].
Como p esta fixo, encontrar um caminho mınimo de s a t em(G , ω) e equivalente a encontrar um caminho mınimo de s a t
em (G , ω′).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
O unico problema com esta ideia e que para encontrar uma talfuncao p, aparentemente e preciso resolver um PCM comarestas de peso negativo, o que invalida a ideia de modogeral.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
O unico problema com esta ideia e que para encontrar uma talfuncao p, aparentemente e preciso resolver um PCM comarestas de peso negativo, o que invalida a ideia de modogeral.
Entretanto, ha situacoes em que tal funcao p e conhecida eneste caso pode-se usar o algoritmo de Dijkstra que e maiseficiente que o o algoritmo de Bellman-Ford que resolve oPCM com arestas de peso negativo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Reducao para PCM sem pesos negativos
O unico problema com esta ideia e que para encontrar uma talfuncao p, aparentemente e preciso resolver um PCM comarestas de peso negativo, o que invalida a ideia de modogeral.
Entretanto, ha situacoes em que tal funcao p e conhecida eneste caso pode-se usar o algoritmo de Dijkstra que e maiseficiente que o o algoritmo de Bellman-Ford que resolve oPCM com arestas de peso negativo.
Uma funcao p como descrita e chamada potencial em algunscontextos. Depois veremos como usar o algoritmo deBellman-Ford para encontrar uma funcao potencial.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Aplicacao: Sistemas de restricoes de diferencas
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Aplicacao: Sistemas de restricoes de diferencas
Considere o seguinte sistema de desigualdades lineares:
x1 − x2 ≤ 0x1 − x5 ≤ −1x2 − x5 ≤ 1x3 − x1 ≤ 5x4 − x1 ≤ 4x4 − x3 ≤ −1x5 − x3 ≤ −3x5 − x4 ≤ −3
Queremos encontrar valores x1, x2, . . . , xn que satisfazem estasrestricoes de diferenca.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Aplicacao: Sistemas de restricoes de diferencas
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Aplicacao: Sistemas de restricoes de diferencas
Considere o seguinte sistema de desigualdades lineares:
x1 − x2 ≤ 0x1 − x5 ≤ −1x2 − x5 ≤ 1x3 − x1 ≤ 5x4 − x1 ≤ 4x4 − x3 ≤ −1x5 − x3 ≤ −3x5 − x4 ≤ −3
Podemos modelar o problema de encontrar uma funcao potencialusando um sistema deste tipo. Uma funcao potencial de (G , ω)satisfaz p(v)− p(u) ≤ ω(u, v) para cada aresta (u, v) de G ..Assim, temos uma desigualdade xv − xu ≤ bk := ω(u, v) para cadaaresta (u, v) de G .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Sistemas de restricoes de diferenca tem varias aplicacoes.
x1 − x2 ≤ 0x1 − x5 ≤ −1x2 − x5 ≤ 1x3 − x1 ≤ 5x4 − x1 ≤ 4x4 − x3 ≤ −1x5 − x3 ≤ −3x5 − x4 ≤ −3
Por exemplo, a incognita xi pode representar o instante do tempoque um evento i deve ocorrer. Uma restricao xj − xi ≤ bk diz queuma certa quantidade de tempo bk deve passar entre os eventos ie j . Um evento poderia ser a execucao de uma certa tarefa durantea fabricacao de um produto.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Aplicacao: Sistemas de restricoes de diferencas
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Aplicacao: Sistemas de restricoes de diferencas
Considere o seguinte sistema de desigualdades lineares:
x1 − x2 ≤ 0x1 − x5 ≤ −1x2 − x5 ≤ 1x3 − x1 ≤ 5x4 − x1 ≤ 4x4 − x3 ≤ −1x5 − x3 ≤ −3x5 − x4 ≤ −3
Podemos resolver um sistema deste tipo para encontrar umafuncao potencial p de um grafo (G , ω). Uma funcao potencial de(G , ω) deve satisfazer p(v)− p(u) ≤ ω(u, v) para cada aresta(u, v) de G . Assim, temos uma desigualdade xv − xu ≤ ω(u, v)para cada aresta (u, v) de G .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Podemos reescrever as restricoes matricialmente:
1 −1 0 0 01 0 0 0 −10 1 0 0 −1
−1 0 1 0 0−1 0 0 1 00 0 −1 1 00 0 −1 0 10 0 0 −1 1
x1x2x3x4x5
≤
0−1154
−1−3−3
Um sistema de restricoes de diferenca e um sistema da formaAx ≤ b onde A e uma matriz com entradas {−1, 0, 1} em quecada linha ha exatamente um 1 e um −1.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Podemos reescrever as restricoes matricialmente:
1 −1 0 0 01 0 0 0 −10 1 0 0 −1
−1 0 1 0 0−1 0 0 1 00 0 −1 1 00 0 −1 0 10 0 0 −1 1
x1x2x3x4x5
≤
0−1154
−1−3−3
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Podemos reescrever as restricoes matricialmente:
1 −1 0 0 01 0 0 0 −10 1 0 0 −1
−1 0 1 0 0−1 0 0 1 00 0 −1 1 00 0 −1 0 10 0 0 −1 1
x1x2x3x4x5
≤
0−1154
−1−3−3
Uma solucao e x = (−5,−3, 0,−1,−4).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Podemos reescrever as restricoes matricialmente:
1 −1 0 0 01 0 0 0 −10 1 0 0 −1
−1 0 1 0 0−1 0 0 1 00 0 −1 1 00 0 −1 0 10 0 0 −1 1
x1x2x3x4x5
≤
0−1154
−1−3−3
Uma solucao e x = (−5,−3, 0,−1,−4).Outra solucao e x ′ = (0, 2, 5, 4, 1).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Lema 24.8 (CLRS) Seja x = (x1, . . . , xn) uma solucao de umsistema Ax ≤ b de restricoes de diferenca. Seja d uma constante.Entao
x + d = (x1 + d , . . . , xn + d)
tambem e uma solucao de Ax ≤ b.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Sistemas de restricoes de diferencas
Lema 24.8 (CLRS) Seja x = (x1, . . . , xn) uma solucao de umsistema Ax ≤ b de restricoes de diferenca. Seja d uma constante.Entao
x + d = (x1 + d , . . . , xn + d)
tambem e uma solucao de Ax ≤ b.
Mostraremos a seguir como encontrar uma solucao de um sistemaAx ≤ b de restricoes de diferenca resolvendo um problema decaminhos mınimos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes
A matriz A de dimensoes m × n pode ser vista como a transpostade uma matriz de incidencia de um grafo orientado (veja a lista deexercıcios) com n vertices e m arestas.
Cada vertice vi corresponde a uma variavel xi .
Cada aresta (vi , vj) corresponde a uma restricao xj − xi ≤ bk .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes
A matriz A de dimensoes m × n pode ser vista como a transpostade uma matriz de incidencia de um grafo orientado (veja a lista deexercıcios) com n vertices e m arestas.
Cada vertice vi corresponde a uma variavel xi .
Cada aresta (vi , vj) corresponde a uma restricao xj − xi ≤ bk .
A este grafo acrescentamos um vertice origem v0.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes
Formalmente, dado o sistema Ax ≤ b de restricoes de diferenca,construımos o grafo G = (V ,E ) tal que
V = {v0, v1, . . . , vn}
eE = {(vi , vj) : xj − xi ≤ bk e uma restricao}
∪ {(v0, v1), (v0, v2), . . . , (v0, vn)}.
Para cada restricao xj − xi ≤ bk temos uma aresta (vi , vj) compeso ω(vi , vj) = bk . O peso da aresta (v0, vi ) e igual a zero paratodo vi .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes
−1
0
0
0
−1
0
1
−3
54
−1
00
−3
−1 0
0−4
−5
v0
v1
v2
v3v4
v5
Uma restricao xi − xj ≤ bk corresponde a uma aresta (vj , vi ) compeso bk . Note que todo vertice e atingıvel a partir de v0.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes
−1
0
0
0
−1
0
1
−3
54
−1
00
−3
−1 0
0−4
−5
v0
v1
v2
v3v4
v5
Uma solucao viavel e x = (−5,−3,−0,−1,−4).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes e sistemas de diferencas
Teorema 24.9 (CLRS) Seja Ax ≤ b um sistema de restricoes dediferenca e seja G = (V ,E ) o grafo de restricoes associado.Se G nao contem ciclos negativos, entao
x = (dist(v0, v1), dist(v0, v2), . . . , dist(v0, vn))
e uma solucao viavel do sistema.Se G contem ciclos negativos, entao o sistema nao possui solucaoviavel.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes e sistemas de diferencas
Suponha que (G , ω) nao contem ciclos negativos. Para ver quexi = dist(v0, vi ) para i = 1, 2, . . . , n e uma solucao do sistemas dediferenca lembre-se que dist(v0, vi ) ≤ dist(v0, vj) + ω(vj , vi ) paratoda aresta (vj , vi ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes e sistemas de diferencas
Suponha que (G , ω) nao contem ciclos negativos. Para ver quexi = dist(v0, vi ) para i = 1, 2, . . . , n e uma solucao do sistemas dediferenca lembre-se que dist(v0, vi ) ≤ dist(v0, vj) + ω(vj , vi ) paratoda aresta (vj , vi ).
Assim,
xi − xj = dist(v0, vi )− dist(v0, vj) ≤ ω(vj , vi ) = bk
e x e uma solucao do sistema de diferencas.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes e sistemas de diferencas
Suponha agora que (G , ω) contem um ciclo negativo C . Como aorigem v0 e uma fonte, ela nao pertence a nenhum ciclo. Podemossupor sem perda de generalidade que:
C = (v1, v2, . . . , vk = v1).
v1 = vk v2
v3
v4v5
vk−1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Grafo de restricoes e sistemas de diferencas
Podemos supor sem perda de generalidade que:
C = (v1, v2, . . . , vk = v1).
Suponha por contradicao que existe uma solucao viavel x dosistema de diferencas. Entao
x2 − x1 ≤ ω(v1, v2)
x3 − x2 ≤ ω(v2, v3)
...
xk−1 − xk−2 ≤ ω(vk−2, vk−1)
xk − xk−1 ≤ ω(vk−1, vk).
Somando todas as desigualdades, obtemos 0 ≤ ω(C ), o que e umacontradicao. Logo, se (G , ω) contem um ciclo negativo, entao osistema nao tem solucao viavel.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Resolvendo um sistema de restricoes de diferenca
O Teorema 24.9 nos diz que podemos usar o algoritmo deBellman-Ford (com origem v0) para resolver um sistema derestricoes de diferenca!
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Resolvendo um sistema de restricoes de diferenca
O Teorema 24.9 nos diz que podemos usar o algoritmo deBellman-Ford (com origem v0) para resolver um sistema derestricoes de diferenca!
Como todo vertice e atingıvel a partir de v0, se existir um ciclonegativo, este sera detectado pelo algoritmo.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Resolvendo um sistema de restricoes de diferenca
O Teorema 24.9 nos diz que podemos usar o algoritmo deBellman-Ford (com origem v0) para resolver um sistema derestricoes de diferenca!
Como todo vertice e atingıvel a partir de v0, se existir um ciclonegativo, este sera detectado pelo algoritmo.
Se nao existir ciclo negativo, entao as distancias computadas peloalgoritmo formam uma solucao viavel do sistema.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Resolvendo um sistema de restricoes de diferenca
O Teorema 24.9 nos diz que podemos usar o algoritmo deBellman-Ford (com origem v0) para resolver um sistema derestricoes de diferenca!
Como todo vertice e atingıvel a partir de v0, se existir um ciclonegativo, este sera detectado pelo algoritmo.
Se nao existir ciclo negativo, entao as distancias computadas peloalgoritmo formam uma solucao viavel do sistema.
Se A e uma matriz m × n, entao o grafo de restricoes G possuin + 1 vertices e n +m arestas. Assim, usando o algoritmo deBellman-Ford podemos encontrar uma solucao em tempoO((n + 1)(n +m)) = O(n2 + nm).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Obviamente podemos executar |V | vezes um algoritmo deCaminhos Mınimos com Mesma Origem.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Obviamente podemos executar |V | vezes um algoritmo deCaminhos Mınimos com Mesma Origem.
Se (G , ω) nao possui arestas negativas, entao podemos usar oalgoritmo de Dijkstra implementando a fila de prioridade como
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Obviamente podemos executar |V | vezes um algoritmo deCaminhos Mınimos com Mesma Origem.
Se (G , ω) nao possui arestas negativas, entao podemos usar oalgoritmo de Dijkstra implementando a fila de prioridade como
um vetor: |V |.O(V 2) = O(V 3) ou
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Obviamente podemos executar |V | vezes um algoritmo deCaminhos Mınimos com Mesma Origem.
Se (G , ω) nao possui arestas negativas, entao podemos usar oalgoritmo de Dijkstra implementando a fila de prioridade como
um vetor: |V |.O(V 2) = O(V 3) oumin-heap binario: |V |.O(E lgV ) = O(VE lgV ) ou
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Obviamente podemos executar |V | vezes um algoritmo deCaminhos Mınimos com Mesma Origem.
Se (G , ω) nao possui arestas negativas, entao podemos usar oalgoritmo de Dijkstra implementando a fila de prioridade como
um vetor: |V |.O(V 2) = O(V 3) oumin-heap binario: |V |.O(E lgV ) = O(VE lgV ) ouheap de Fibonacci: |V |.O(V lgV + E ) = O(V 2 lgV + VE ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Caminhos mınimos entre todos os pares
O problema agora e dado um grafo (G , ω) encontrar para todo paru, v de vertices um caminho mınimo de u a v .
Obviamente podemos executar |V | vezes um algoritmo deCaminhos Mınimos com Mesma Origem.
Se (G , ω) nao possui arestas negativas, entao podemos usar oalgoritmo de Dijkstra implementando a fila de prioridade como
um vetor: |V |.O(V 2) = O(V 3) oumin-heap binario: |V |.O(E lgV ) = O(VE lgV ) ouheap de Fibonacci: |V |.O(V lgV + E ) = O(V 2 lgV + VE ).
Se (G , ω) possui arestas negativas podemos usar o algoritmode Bellman-Ford: |V |.O(VE ) = O(V 2E ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Floyd-Warshall
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Floyd-Warshall
Veremos agora um metodo direto para resolver o problema que eassintoticamente melhor se G e denso.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Floyd-Warshall
Veremos agora um metodo direto para resolver o problema que eassintoticamente melhor se G e denso.
O algoritmo de Floyd-Warshall baseia-se em programacao dinamicae resolve o problema em tempo O(V 3).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Floyd-Warshall
Veremos agora um metodo direto para resolver o problema que eassintoticamente melhor se G e denso.
O algoritmo de Floyd-Warshall baseia-se em programacao dinamicae resolve o problema em tempo O(V 3).
O grafo (G , ω) pode ter arestas negativas, mas suporemos que naocontem ciclos negativos.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
O algoritmo de Floyd-Warshall
Veremos agora um metodo direto para resolver o problema que eassintoticamente melhor se G e denso.
O algoritmo de Floyd-Warshall baseia-se em programacao dinamicae resolve o problema em tempo O(V 3).
O grafo (G , ω) pode ter arestas negativas, mas suporemos que naocontem ciclos negativos.
Adotaremos a convencao de que se (i , j) nao e uma aresta de G
entao ω(i , j) = ∞.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Seja P = (v1, v2, . . . , vℓ) um caminho.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Seja P = (v1, v2, . . . , vℓ) um caminho.
Um vertice interno de P e qualquer vertice de P distinto de v1 evl , ou seja, em {v2, . . . , vℓ−1}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Seja P = (v1, v2, . . . , vℓ) um caminho.
Um vertice interno de P e qualquer vertice de P distinto de v1 evl , ou seja, em {v2, . . . , vℓ−1}.
Para simplificar, suponha que V = {1, 2, . . . , n}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Sejam i e j dois vertices de G . Considere todos os caminhos de i aj cujos vertices internos pertencem a {1, . . . , k}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Sejam i e j dois vertices de G . Considere todos os caminhos de i aj cujos vertices internos pertencem a {1, . . . , k}.
Exemplo: i = 5, j = 9 e k = 7.
5 2 6 3 4 9
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Sejam i e j dois vertices de G . Considere todos os caminhos de i aj cujos vertices internos pertencem a {1, . . . , k}.
Exemplo: i = 5, j = 9 e k = 7.
5 2 6 3 4 9
Seja P um caminho mınimo de i a j com esta forma.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
O algoritmo de Floyd-Warshall explora a relacao entre P e certoscaminhos mınimos com vertices internos em {1, . . . , k − 1}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
O algoritmo de Floyd-Warshall explora a relacao entre P e certoscaminhos mınimos com vertices internos em {1, . . . , k − 1}.
Caso 1: Se k nao e um vertice interno de P entao P e umcaminho mınimo de i a j com vertices internos em {1, . . . , k − 1}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
O algoritmo de Floyd-Warshall explora a relacao entre P e certoscaminhos mınimos com vertices internos em {1, . . . , k − 1}.
Caso 1: Se k nao e um vertice interno de P entao P e umcaminho mınimo de i a j com vertices internos em {1, . . . , k − 1}.
Exemplo: i = 5, j = 9 e k = 7.
5 2 6 3 4 9
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Caso 2: Se k e um vertice interno de P entao P pode ser divididoem dois caminhos P1 (com inıcio em i e fim em k) e P2 (cominıcio em k e fim em j).
replacements
i j
kP1
P2
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Caso 2: Se k e um vertice interno de P entao P pode ser divididoem dois caminhos P1 (com inıcio em i e fim em k) e P2 (cominıcio em k e fim em j).
replacements
i j
kP1
P2
P1 e um caminho mınimo de i a k com vertices internos em{1, . . . , k − 1}
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Estrutura de um caminho mınimo
Caso 2: Se k e um vertice interno de P entao P pode ser divididoem dois caminhos P1 (com inıcio em i e fim em k) e P2 (cominıcio em k e fim em j).
replacements
i j
kP1
P2
P1 e um caminho mınimo de i a k com vertices internos em{1, . . . , k − 1}
P2 e um caminho mınimo de k a j com vertices internos em{1, . . . , k − 1}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Recorrencia para caminhos mınimos
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Recorrencia para caminhos mınimos
Seja d(k)i j o peso de um caminho mınimo de i a j com vertices
internos em {1, 2, . . . , k}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Recorrencia para caminhos mınimos
Seja d(k)i j o peso de um caminho mınimo de i a j com vertices
internos em {1, 2, . . . , k}.
Quando k = 0 entao d(0)i j = ω(i , j).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Recorrencia para caminhos mınimos
Seja d(k)i j o peso de um caminho mınimo de i a j com vertices
internos em {1, 2, . . . , k}.
Quando k = 0 entao d(0)i j = ω(i , j).
Temos a seguinte recorrencia:
d(k)i j =
{
ω(i , j) se k = 0,
min(d(k−1)i j , d
(k−1)ik + d
(k−1)kj ) se k ≥ 1.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Recorrencia para caminhos mınimos
Seja d(k)i j o peso de um caminho mınimo de i a j com vertices
internos em {1, 2, . . . , k}.
Quando k = 0 entao d(0)i j = ω(i , j).
Temos a seguinte recorrencia:
d(k)i j =
{
ω(i , j) se k = 0,
min(d(k−1)i j , d
(k−1)ik + d
(k−1)kj ) se k ≥ 1.
Note que d(n)i j = dist(i , j).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Recorrencia para caminhos mınimos
Seja d(k)i j o peso de um caminho mınimo de i a j com vertices
internos em {1, 2, . . . , k}.
Quando k = 0 entao d(0)i j = ω(i , j).
Temos a seguinte recorrencia:
d(k)i j =
{
ω(i , j) se k = 0,
min(d(k−1)i j , d
(k−1)ik + d
(k−1)kj ) se k ≥ 1.
Note que d(n)i j = dist(i , j).
Podemos calcular as matrizes D(k) = (d(k)i j ) para k = 1, 2 . . . , n.
A resposta do problema e D(n).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Floyd-Warshall
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Floyd-Warshall
A entrada do algoritmo e a matriz W = (ω(i , j)) com n = |V |linhas e colunas.
A saıda e a matriz D(n).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Floyd-Warshall
A entrada do algoritmo e a matriz W = (ω(i , j)) com n = |V |linhas e colunas.
A saıda e a matriz D(n).
Floyd-Warshall(W , n)1 D(0) ← W
2 para k ← 1 ate n faca
3 para i ← 1 ate n faca
4 para j ← 1 ate n faca
5 d(k)i j ← min(d
(k−1)ij , d
(k−1)ik + d
(k−1)kj )
6 devolva D(n)
Complexidade: O(V 3)
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
O algoritmo devolve tambem uma matriz Π = (πij) tal que(a) πi j = nil se i = j ou se nao existe caminho de i a j , ou(b) πi j e o predecessor de j em algum caminho mınimo a de i a j ,caso contrario.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
O algoritmo devolve tambem uma matriz Π = (πij) tal que(a) πi j = nil se i = j ou se nao existe caminho de i a j , ou(b) πi j e o predecessor de j em algum caminho mınimo a de i a j ,caso contrario.
Podemos computar os predecessores ao mesmo tempo que oalgoritmo calcula as matrizes D(k). Determinamos uma sequencia
de matrizes Π(0),Π(1), . . . ,Π(n) e π(k)i j e o predecessor de j em um
caminho mınimo de i a j com vertices internos em {1, 2, . . . , k}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
O algoritmo devolve tambem uma matriz Π = (πij) tal que(a) πi j = nil se i = j ou se nao existe caminho de i a j , ou(b) πi j e o predecessor de j em algum caminho mınimo a de i a j ,caso contrario.
Podemos computar os predecessores ao mesmo tempo que oalgoritmo calcula as matrizes D(k). Determinamos uma sequencia
de matrizes Π(0),Π(1), . . . ,Π(n) e π(k)i j e o predecessor de j em um
caminho mınimo de i a j com vertices internos em {1, 2, . . . , k}.
Quando k = 0 temos
π(0)i j =
{
nil se i = j ou ω(i , j) = ∞,i se i 6= j e ω(i , j) < ∞.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Para k ≥ 1 procedemos da seguinte forma. Considere um caminhomınimo P de i a j com vertices internos em {1, 2, . . . , k}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Para k ≥ 1 procedemos da seguinte forma. Considere um caminhomınimo P de i a j com vertices internos em {1, 2, . . . , k}.
Se k nao aparece em P entao tomamos como π(k)i j o predecessor
de j em um caminho mınimo de i a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)i j .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Para k ≥ 1 procedemos da seguinte forma. Considere um caminhomınimo P de i a j com vertices internos em {1, 2, . . . , k}.
Se k nao aparece em P entao tomamos como π(k)i j o predecessor
de j em um caminho mınimo de i a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)i j .
Caso contrario, tomamos como π(k)i j o predecessor de j em um
caminho mınimo de k a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)kj .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Para k ≥ 1 procedemos da seguinte forma. Considere um caminhomınimo P de i a j com vertices internos em {1, 2, . . . , k}.
Se k nao aparece em P entao tomamos como π(k)i j o predecessor
de j em um caminho mınimo de i a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)i j .
Caso contrario, tomamos como π(k)i j o predecessor de j em um
caminho mınimo de k a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)kj .
Formalmente,
π(k)i j =
{
π(k−1)i j se d
(k−1)i j ≤ d
(k−1)ik + d
(k−1)kj ,
π(k−1)kj se d
(k−1)i j > d
(k−1)ik + d
(k−1)kj .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Como encontrar os caminhos?
Para k ≥ 1 procedemos da seguinte forma. Considere um caminhomınimo P de i a j com vertices internos em {1, 2, . . . , k}.
Se k nao aparece em P entao tomamos como π(k)i j o predecessor
de j em um caminho mınimo de i a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)i j .
Caso contrario, tomamos como π(k)i j o predecessor de j em um
caminho mınimo de k a j com vertices internos em
{1, 2, . . . , k − 1}, ou seja, π(k−1)kj .
Formalmente,
π(k)i j =
{
π(k−1)i j se d
(k−1)i j ≤ d
(k−1)ik + d
(k−1)kj ,
π(k−1)kj se d
(k−1)i j > d
(k−1)ik + d
(k−1)kj .
Exercıcio. Incorpore esta parte no algoritmo!
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(0) =
0 3 8 ∞ −4∞ 0 ∞ 1 7∞ 4 0 ∞ ∞2 ∞ −5 0 ∞
∞ ∞ ∞ 6 0
Π(0) =
N 1 1 N 1N N N 2 2N 3 N N N
4 N 4 N N
N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(0) =
0 3 8 ∞ −4∞ 0 ∞ 1 7∞ 4 0 ∞ ∞2 ∞ −5 0 ∞
∞ ∞ ∞ 6 0
Π(0) =
N 1 1 N 1N N N 2 2N 3 N N N
4 N 4 N N
N N N 5 N
D(1) =
0 3 8 ∞ −4∞ 0 ∞ 1 7∞ 4 0 ∞ ∞2 5 −5 0 −2
∞ ∞ ∞ 6 0
Π(1) =
N 1 1 N 1N N N 2 2N 3 N N N
4 1 4 N 1N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(1) =
0 3 8 ∞ −4∞ 0 ∞ 1 7∞ 4 0 ∞ ∞2 5 −5 0 −2
∞ ∞ ∞ 6 0
Π(1) =
N 1 1 N 1N N N 2 2N 3 N N N
4 1 4 N 1N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(1) =
0 3 8 ∞ −4∞ 0 ∞ 1 7∞ 4 0 ∞ ∞2 5 −5 0 −2
∞ ∞ ∞ 6 0
Π(1) =
N 1 1 N 1N N N 2 2N 3 N N N
4 1 4 N 1N N N 5 N
D(2) =
0 3 8 4 −4∞ 0 ∞ 1 7∞ 4 0 5 112 5 −5 0 −2∞ ∞ ∞ 6 0
Π(2) =
N 1 1 2 1N N N 2 2N 3 N 2 24 1 4 N 1N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(2) =
0 3 8 4 −4∞ 0 ∞ 1 7∞ 4 0 5 112 5 −5 0 −2∞ ∞ ∞ 6 0
Π(2) =
N 1 1 2 1N N N 2 2N 3 N 2 24 1 4 N 1N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(2) =
0 3 8 4 −4∞ 0 ∞ 1 7∞ 4 0 5 112 5 −5 0 −2∞ ∞ ∞ 6 0
Π(2) =
N 1 1 2 1N N N 2 2N 3 N 2 24 1 4 N 1N N N 5 N
D(3) =
0 3 8 4 −4∞ 0 ∞ 1 7∞ 4 0 5 112 −1 −5 0 −2
∞ ∞ ∞ 6 0
Π(3) =
N 1 1 2 1N N N 2 2N 3 N 2 24 3 4 N 1N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(3) =
0 3 8 4 −4∞ 0 ∞ 1 7∞ 4 0 5 112 −1 −5 0 −2
∞ ∞ ∞ 6 0
Π(3) =
N 1 1 2 1N N N 2 2N 3 N 2 24 3 4 N 1N N N 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(3) =
0 3 8 4 −4∞ 0 ∞ 1 7∞ 4 0 5 112 −1 −5 0 −2
∞ ∞ ∞ 6 0
Π(3) =
N 1 1 2 1N N N 2 2N 3 N 2 24 3 4 N 1N N N 5 N
D(4) =
0 3 −1 4 −43 0 −4 1 −17 4 0 5 32 −1 −5 0 −28 5 1 6 0
Π(4) =
N 1 4 2 14 N 4 2 14 3 N 2 14 3 4 N 14 3 4 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(4) =
0 3 −1 4 −43 0 −4 1 −17 4 0 5 32 −1 −5 0 −28 5 1 6 0
Π(4) =
N 1 4 2 14 N 4 2 14 3 N 2 14 3 4 N 14 3 4 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
1
3 4
8
2
−4 −5
6
7
5 4
3
2
1 d(k)i j = min(d
(k−1)i j , d
(k−1)ik + d
(k−1)kj )
D(4) =
0 3 −1 4 −43 0 −4 1 −17 4 0 5 32 −1 −5 0 −28 5 1 6 0
Π(4) =
N 1 4 2 14 N 4 2 14 3 N 2 14 3 4 N 14 3 4 5 N
D(5) =
0 1 −3 2 −43 0 −4 1 −17 4 0 5 32 −1 −5 0 −28 5 1 6 0
Π(5) =
N 3 4 5 14 N 4 2 14 3 N 2 14 3 4 N 14 3 4 5 N
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Seja G = (V ,E ) um grafo orientado com V = {1, 2, . . . , n}.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Seja G = (V ,E ) um grafo orientado com V = {1, 2, . . . , n}.
Suponha que para cada par i , j ∈ V , queremos determinar se existeum caminho de i a j em G .
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Seja G = (V ,E ) um grafo orientado com V = {1, 2, . . . , n}.
Suponha que para cada par i , j ∈ V , queremos determinar se existeum caminho de i a j em G .
O fecho transitivo de G = (V ,E ) e o grafo G ∗ = (V ,E ∗) onde
E ∗ = {(i , j) : existe um caminho de i a j em G}.
2 1
4 3
21
4 3
G G ∗
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Um modo de determinar o fecho transitivo de um grafoG = (V ,E ) em tempo Θ(V 3) = Θ(n3) e atribuir peso 1 a cadaaresta de E e executar Floyd-Warshall. Se di j < n entaoexiste um caminho de i a j . Caso contrario, nao existe tal caminho.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Um modo de determinar o fecho transitivo de um grafoG = (V ,E ) em tempo Θ(V 3) = Θ(n3) e atribuir peso 1 a cadaaresta de E e executar Floyd-Warshall. Se di j < n entaoexiste um caminho de i a j . Caso contrario, nao existe tal caminho.
Ha outra forma de fazer isto com mesma complexidade assintotica,mas que pode economizar tempo e espaco na pratica.
A ideia e adaptar o algoritmo de Floyd-Warshall substituindo asoperacoes aritmeticas min e + pelas operacoes logicas ∨ (ORlogico) e ∧ (AND logico).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Para i , j , k em {1, 2, . . . , n}, seja t(k)i ,j o valor logico da expressao
“existe um caminho de i a j em G com vertices internos em{1, 2, . . . , k}”.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Para i , j , k em {1, 2, . . . , n}, seja t(k)i ,j o valor logico da expressao
“existe um caminho de i a j em G com vertices internos em{1, 2, . . . , k}”.
Assim, t(k)i ,j = 1 se:
1 existe um caminho de i a j em G com vertices internos em
{1, 2, . . . , k − 1}, ou seja, t(k−1)i ,j = 1, ou
2 existem um caminho de i a k em G com vertices internos em{1, 2, . . . , k − 1} e um caminho de k a j em G com vertices
internos em {1, 2, . . . , k − 1}, ou seja, t(k−1)ik ∧ t
(k−1)kj = 1.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Para i , j , k em {1, 2, . . . , n}, seja t(k)i ,j o valor logico da expressao
“existe um caminho de i a j em G com vertices internos em{1, 2, . . . , k}”.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Para i , j , k em {1, 2, . . . , n}, seja t(k)i ,j o valor logico da expressao
“existe um caminho de i a j em G com vertices internos em{1, 2, . . . , k}”.
Portanto,
t(0)i j =
{
0 se i 6= j e (i , j) 6∈ E ,1 se i = j ou (i , j) ∈ E .
e para k ≥ 1,
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
Assim, (i , j) e uma aresta do fecho transitivo G ∗ se e somente se
t(n)i ,j = 1.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Fecho transitivo de grafos orientados
Para i , j , k em {1, 2, . . . , n}, seja t(k)i ,j o valor logico da expressao
“existe um caminho de i a j em G com vertices internos em{1, 2, . . . , k}”.
Portanto,
t(0)i j =
{
0 se i 6= j e (i , j) 6∈ E ,1 se i = j ou (i , j) ∈ E .
e para k ≥ 1,
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
Assim, (i , j) e uma aresta do fecho transitivo G ∗ se e somente se
t(n)i ,j = 1.
Como no Floyd-Warshall, calculamos as matrizes T (k) = (t(k)i j ).
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Fecho Transitivo
A entrada do algoritmo e uma matriz de adjacencia A com n = |V |linhas e colunas.
A saıda e a matriz T (n).
Transitive-Closure(A, n)1 T (0) ← A+ In2 para k ← 1 ate n faca
3 para i ← 1 ate n faca
4 para j ← 1 ate n faca
5 t(k)i j ← t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
6 devolva T (n)
Complexidade: O(V 3)
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (0) =
1 0 0 00 1 1 10 1 1 01 0 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (0) =
1 0 0 00 1 1 10 1 1 01 0 1 1
T (1) =
1 0 0 00 1 1 10 1 1 01 0 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (1) =
1 0 0 00 1 1 10 1 1 01 0 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (1) =
1 0 0 00 1 1 10 1 1 01 0 1 1
T (2) =
1 0 0 00 1 1 10 1 1 11 0 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (2) =
1 0 0 00 1 1 10 1 1 11 0 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (2) =
1 0 0 00 1 1 10 1 1 11 0 1 1
T (3) =
1 0 0 00 1 1 10 1 1 11 1 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (3) =
1 0 0 00 1 1 10 1 1 11 1 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Exemplo
2 1
4 3
21
4 3
G G ∗
t(k)i j = t
(k−1)i j ∨
(
t(k−1)ik ∧ t
(k−1)kj
)
.
T (3) =
1 0 0 00 1 1 10 1 1 11 1 1 1
T (4) =
1 0 0 01 1 1 11 1 1 11 1 1 1
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II
Algoritmo de Transitive-Closure
Note que poderıamos usar um bit para cada posicao das matrizesT (k) e as operacoes logicas ∨ e ∧ podem ser implementadas comoperadores de bits.
Isto reduz consideravelmente o espaco do ponto de vista pratico epode acelerar o algoritmo se a implementacao de operacoes logicasfor eficiente. Note que isto nao afeta a analise assintotica.
Cid C. de Souza, Candida N. da Silva, Orlando Lee MC558 — Projeto e Analise de Algoritmos II