Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto...
Transcript of Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto...
Caminho mais curto e o algoritmo de Dijkstra
Caminho mais curto eo algoritmo de Dijkstra
Márcia R. Cerioli
Departamento de Ciência da Computação - IMe PESC - COPPE
UFRJ
Algoritmos e Grafos
Dezembro de 2015
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
Problema a ser resolvido a cada consulta do tipo:
Qual o caminho mais curto do DCC ao Pão de Açúcar?
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
O Problema
Qual o caminho mais curto do DCC ao Pão de Açúcar?
Objetivo: Caminho com o menor:I custoI distânciaI trânsitoI 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 )
custo custo da aresta c : E (G )→ Q+
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 )
custo custo da aresta c : E (G )→ Q+
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
Modelagem em grafos
a
2
4
b
1
4
3
c 1
d
2
e
3
1
f
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
a
2
4
b
1
4
3
c 1
d
2
e
3
1
f
Vértice a é a origem do caminho
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
a
2
4
b
1
4
3
c 1
d
2
e
3
1
f
e queremos encontrar o menor caminho de a até f .
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
Propriedades dos caminhosv0-vk-caminho:Sequência de vértices P = v0v1 . . . vk , tal que vi−1vi ∈ E (G )
Custo de P :
Custo(P) =k∑
i=1
c(vi−1vi )
Distância entre u e v :
dist(u, v) = min{Custo(P) : P é u-v -caminho}
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
a
2
4
b
1
4
3
c 1
d
2
e
3
1
f
Custo(P) = 2+ 3+ 1 = 6
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
a
2
4
b
1
4
3
c 1
d
2
e
3
1
f
Custo(Q) = 2+ 1+ 1+ 1 = 5dist(a,f) = 5
Q é caminho mínimo de a até f
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
Propriedade dos caminhos mínimos
a • v• f•
Se P é um a-f -caminho mínimo e v ∈ P ,então P ′, a parte de P que vai de a até v , é um a-v -caminhomínimo.
Caminho mais curto e o algoritmo de Dijkstra
Problema do Caminho mais Curto
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, existiria Q um a-v -caminho mínimo, e Qconcatenado com P ′′, a parte de P que vai de v até f , seria uma-f -caminho menor que P (que é mínimo)... um absurdo!
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
E.W. Dijkstra
Edsger Wybe Dijkstra, em 1956
Holanda
(1930 – 2002)
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
A motivação de Dijkstra – 1956
Trabalhando como programadorno Centro de Matemática da Holanda – atual CWITarefa de divulgação ao público leigo sobre a capacidade do novocomputador - ARMAC
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho de Amsterdã a uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar talcaminho...
e os algoritmos até então existentes não funcionavam no ARMAC...
Calcular e Manterd(v) = tamanho do menor caminho até então encontrado
de a até v
Conjunto S dos vértices resolvidos
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho de Amsterdã a uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar talcaminho...
e os algoritmos até então existentes não funcionavam no ARMAC...
Calcular e Manterd(v) = tamanho do menor caminho até então encontrado
de a até v
Conjunto S dos vértices resolvidos
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho de Amsterdã a uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar talcaminho...
e os algoritmos até então existentes não funcionavam no ARMAC...
Calcular e Manterd(v) = tamanho do menor caminho até então encontrado
de a até v
Conjunto S dos vértices resolvidos
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
A ideia de Dijkstra – 1956
Menor caminho de Amsterdã a uma cidade escolhida pelo público.
Mas... era necessário ter um programa para determinar talcaminho...
e os algoritmos até então existentes não funcionavam no ARMAC...
Calcular e Manterd(v) = tamanho do menor caminho até então encontrado
de a até v
Conjunto S dos vértices resolvidos
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
O algoritmo
Entrada: Grafo G = (V ,E ), c : E → Q+ e a ∈ VSaída: d : V → Q+, onde d é a distância de a até v , ∀v ∈ V
1. d(a)← 0; π(a)← a2. Para cada v ∈ V \ {a}, d(v)←∞3. Q ← V Q é dos ainda a resolver4. S ← ∅ S é o dos resolvidos
Q é uma fila de prioridades.
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
O algoritmo
Entrada: Grafo G = (V ,E ), c : E → Q+ e a ∈ VSaída: d : V → Q+, onde d é a distância de a até v , ∀v ∈ V
1. d(a)← 0; π(a)← a2. Para cada v ∈ V \ {a}, d(v)←∞3. Q ← V Q é dos ainda a resolver4. S ← ∅ S é o dos resolvidos
Q é uma fila de prioridades.
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
O algoritmo
5. Enquanto Q 6= ∅6. u ← Extraimin(Q, d)7. Para cada v ∈ Adj(u) ∩ Q,8. Se d(u) + c(uv) < d(v),8. então d(v)← d(u) + c(uv)8. π(v)← u9. S ← S ∪ {u}
Caminho mais curto e o algoritmo de Dijkstra
A solução de Dijkstra
O algoritmo
5. Enquanto Q 6= ∅6. u ← Extraimin(Q, d)7. Para cada v ∈ Adj(u) ∩ Q,8. Se d(u) + c(uv) < d(v),8. então d(v)← d(u) + c(uv)8. π(v)← u9. 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
Execute o algoritmo de Dijkstra, com o mesmo estilo de tabela queusamos para a execução do algoritmo de Prim.
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
Execute o algoritmo de Dijkstra, com o mesmo estilo de tabela queusamos para a execução do algoritmo de Prim.
Caminho mais curto e o algoritmo de Dijkstra
E.W. Dijkstra
Prêmio Turing
Edsger W. Dijkstra, em 2002Prêmio Turing, em 1972
Caminho mais curto e o algoritmo de Dijkstra
Outros problemas
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 porminuto, no mundo.