Professional Documents
Culture Documents
O algoritmo de Dijkstra
O algoritmo de Dijkstra, concebido
pelo cientista da computao holands Edsger
Dijkstra em 1956 e publicado em 1959,
soluciona o problema do caminho mais
curto num grafo dirigido ou no dirigido com
arestas de peso no negativo, em tempo
computacional O([m+n]log n) onde m o
nmero de arestas e n o nmero de
vrtices.
2
O Problema
Um exemplo prtico do problema que pode
ser resolvido pelo algoritmo de Dijkstra :
algum precisa se deslocar de uma cidade para
outra. Para isso, ela dispe de vrias estradas,
que passam por diversas cidades. Qual delas
oferece uma trajetria de menor caminho?
3
PROBLEMAS
1 Problema:
Construir a rvore de menor comprimento
total entre todos os ns de um grafo.
2 Problema:
Encontrar o caminho de menor comprimento
total entre dois determinados ns de um
grafo.
4
O algoritmo de Dijkstra
Escolhido um vrtice como raiz da busca, este
algoritmo calcula o custo mnimo deste vrtice
para todos os demais vrtices do grafo. O
algoritmo
pode
ser
usado
sobre
grafos
O algoritmo de Dijkstra
Esta restrio (pesos no negativos )
perfeitamente possvel no contexto de redes de
transportes,
onde
as
arestas
representam
casos
corretamente.
algoritmo
no
funcionar
6
D
6
4
1
2
2
10
C
O Algoritmo
Seja G(V,A) um grafo orientado e s um vrtice de G:
Atribua valor zero estimativa do custo mnimo do vrtice s (a raiz
da busca) e infinito s demais estimativas;
Atribua um valor qualquer aos precedentes (o precedente de um
vrtice t o vrtice que precede t no caminho de custo mnimo
de s para t);
Enquanto houver vrtice aberto:
seja k um vrtice ainda aberto cuja estimativa seja a menor dentre
todos os vrtices abertos;
feche o vrtice k
Para todo vrtice j ainda aberto que seja sucessor de k faa:
some a estimativa do vrtice k com o custo do arco que une k a j;
caso esta soma seja melhor que a estimativa anterior para o vrtice j,
substitua-a e anote k como precedente de j.
Soluo
5
B
N inicial
D
6
4
1
2
2
10
C
O Algoritmo
Vrtice
A
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
B
C
D
E
F
10
O Algoritmo
Vrtice
A
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
B
C
D
E
F
11
O Algoritmo
Vrtice
Passo 1
0, A
4, A
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
C
D
E
F
Distncia de B a A = 4
12
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
2, A
Distncia de B a A = 4
Distncia de C a A = 2
Ns no adjacentes a A -> D, E, F =
13
Soluo
5
B
N inicial
D
6
4
1
2
2
10
C
14
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
2, A
Distncia de B a A = 4
Distncia de C a A = 2
Ns no adjacentes a A -> D, E, F =
N no mais visitado *
15
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
2, A
2, A
16
Soluo
5
B
D
6
4
1
2
2
10
C
N
corrente
17
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
2, A
2, A
18
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
2, A
2, A
10, C
12, C
19
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
2, A
2, A
10, C
12, C
20
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
12, C
21
Soluo
5
B
D
6
4
1
2
2
10
C
N
corrente
22
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
12, C
23
Soluo
N
corrente
5
B
D
6
4
1
2
2
10
C
24
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
12, C
12, C
25
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
12, C
12, C
26
Soluo
N
corrente
5
B
D
6
4
1
2
2
10
C
27
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
8, B
12, C
12, C
28
Soluo
N
corrente
5
B
D
6
4
1
2
2
10
C
29
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
8, B
12, C
12, C
10, D
14, D
30
Soluo
N
corrente
5
B
D
6
4
1
2
2
10
C
31
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
8, B
12, C
12, C
10, D
10, D
14, D
32
Soluo
N
corrente
5
B
D
6
4
1
2
2
10
C
33
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
8, B
12, C
12, C
10, D
10, D
14, D
12, E
34
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
8, B
12, C
12, C
10, D
10, D
14, D
12, E
12, E
35
Soluo
N
corrente
5
B
D
6
4
1
2
2
10
C
36
O Algoritmo
Vrtice
Passo 1
Passo 2
Passo 3
Passo 4
Passo 5
Passo 6
0, A
4, A
3, C
3, C
2, A
2, A
10, C
8, B
8, B
12, C
12, C
10, D
10, D
14, D
12, E
12, E
37
10
2
2
2
C
7
38
Exerccios
Execute o algoritmo de Dijkstra com o grafo da
figura a, comeando com o vrtice 1.
Execute o algoritmo de Dijkstra com o grafo da
figura a, mas comeando com o vrtice 4. A
resposta a mesma?
Para o grafo ilustrado na figura b, mostre cada
passo da execuo do algoritmo de Dijkstra.
Comeando com o vrtice 1.
39
Grafos
40
Fim
41