Caminho mais curto e o algoritmo de Dijkstra
Márcia R. Cerioli
Departamento de Ciência da Computação - IM e PESC - COPPE
UFRJ
Algoritmos e Grafos Dezembro de 2015
Problema a ser resolvido a cada consulta do tipo:
Qual o caminho mais curto do DCC ao Pão de Açúcar?
O Problema
Qual o caminhomais curto do DCC ao Pão de Açúcar?
Objetivo: Caminho com o menor:
I custo
I distância
I trânsito
I tempo
Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto
Modelagem em grafos
Mundo real Modelagem Matemática
pontos importantes vértices V(G) esquinas
ruas arestas E(G)
Modelagem em grafos
Mundo real Modelagem Matemática
pontos importantes vértices V(G) esquinas
ruas arestas E(G)
custo custo da aresta c :E(G)→Q+
Modelagem em grafos
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
Vérticea é a origem do caminho
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
e queremos encontrar o menor caminho de aatéf.
Propriedades dos caminhos
v0-vk-caminho:
Sequência de vérticesP =v0v1. . .vk, tal quevi−1vi ∈E(G) CustodeP:
Custo(P) =
k
X
i=1
c(vi−1vi) Distânciaentre u e v:
dist(u,v)=min{Custo(P) :P é u-v-caminho}
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
Custo(P) =2+3+1=6
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
Custo(Q) =2+1+1+1=5 dist(a,f) = 5
Q é caminho mínimo deaatéf
Propriedade dos caminhos mínimos
a• v
• •f
SeP é um a-f-caminho mínimo ev ∈P,
entãoP0, a parte de P que vai de a atév, é uma-v-caminho mínimo.
Caminhos mínimos tem a Prop. da Subestrutura Ótima
a• v
• •f
Se P é um a-f -caminho mínimo e v ∈P,
então a parte de P que vai de a até v é um a-v -caminho mínimo.
Pois caso contrário, existiriaQ um a-v-caminho mínimo, e Q concatenado comP00, a parte de P que vai de v atéf, seria um a-f-caminho menor queP (que é mínimo)... um absurdo!
E.W. Dijkstra
Edsger Wybe Dijkstra, em 1956 Holanda
(1930 – 2002)
A motivação de Dijkstra – 1956
Trabalhando como programador
no Centro de Matemática da Holanda – atual CWI
Tarefa de divulgação ao público leigo sobre a capacidade do novo computador - ARMAC
Caminho mais curto e o algoritmo de Dijkstra A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho deAmsterdãa uma cidade escolhida pelo público.
e os algoritmos até então existentes não funcionavam no ARMAC...
Calcular e Manter
d(v) =tamanho do menor caminho até então encontrado dea atév
Conjunto S dos vérticesresolvidos
Caminho mais curto e o algoritmo de Dijkstra A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho deAmsterdãa uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar tal caminho...
Calcular e Manter
d(v) =tamanho do menor caminho até então encontrado dea atév
Conjunto S dos vérticesresolvidos
Caminho mais curto e o algoritmo de Dijkstra A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho deAmsterdãa uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar tal caminho...
e os algoritmos até então existentes não funcionavam no ARMAC...
Conjunto S dos vérticesresolvidos
A ideia de Dijkstra – 1956
Menor caminho deAmsterdãa uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar tal caminho...
e os algoritmos até então existentes não funcionavam no ARMAC...
Calcular e Manter
d(v) =tamanho do menor caminho até então encontrado dea atév
Conjunto S dos vérticesresolvidos
Caminho mais curto e o algoritmo de Dijkstra A solução de Dijkstra
O algoritmo
Entrada: GrafoG = (V,E),c :E →Q+ e a∈V
Saída: d :V →Q+, onded é a distância dea atév,∀v ∈V
1. d(a)←0;π(a)←a
2. Para cada v ∈V \ {a},d(v)← ∞
3. Q ←V Q é dos ainda a resolver
4. S ← ∅ S é o dos resolvidos
O algoritmo
Entrada: GrafoG = (V,E),c :E →Q+ e a∈V
Saída: d :V →Q+, onded é a distância dea atév,∀v ∈V
1. d(a)←0;π(a)←a
2. Para cada v ∈V \ {a},d(v)← ∞
3. Q ←V Q é dos ainda a resolver
4. S ← ∅ S é o dos resolvidos
Q é uma fila de prioridades.
O algoritmo
5. Enquanto Q6=∅
6. u ←Extraimin(Q,d) 7. Para cada v ∈Adj(u)∩Q, 8. Sed(u) +c(uv)<d(v),
8. então d(v)←d(u) +c(uv)
8. π(v)←u
9. S ←S∪ {u}
O algoritmo
5. Enquanto Q6=∅
6. u ←Extraimin(Q,d) 7. Para cada v ∈Adj(u)∩Q, 8. Sed(u) +c(uv)<d(v),
8. então d(v)←d(u) +c(uv)
8. π(v)←u
9. S ←S∪ {u}
Caminho mais curto e o algoritmo de Dijkstra A solução de Dijkstra
Um exemplo
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
Um exemplo
a 2
4 b
1
4
3
c 1
d 2
e 3
1 f
Execute o algoritmo de Dijkstra, com o mesmo estilo de tabela que usamos para a execução do algoritmo de Prim.
Prêmio Turing
Edsger W. Dijkstra, em 2002 Prêmio Turing, em 1972
O algoritmo de Dijkstra é amplamento usado
I Roteamento de msg em rede de computadores
I Na determinação de caminhos em aplicativos
I e em muitas outras aplicações, de forma indiretas
Estima-se que seja o algoritmo que mais vezes é executado por minuto, no mundo.