Você está na página 1de 41

Dijkstra

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
orientados (dgrafos), ou no, e admite que
todas as arestas possuem pesos no negativos
(nulo possvel).
5
O algoritmo de Dijkstra
Esta restrio (pesos no negativos )
perfeitamente possvel no contexto de redes de
transportes, onde as arestas representam
normalmente distncias ou tempos mdios de
percurso; podero existir, no entanto, aplicaes
onde as arestas apresentam pesos negativos,
nestes casos o algoritmo no funcionar
corretamente. 6
O Problema: achar o menor
caminho entre A e F
5
B D

4 6

1 8 2 F
A

2
2
10
C E

7
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.

8
Soluo

5
B D
N inicial
4 6

1 8 2 F
A

2
2
10
C E

9
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A
B
C
D
E
F

10
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A
B
C
D
E
F

11
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A
B 4, A
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
A 0, A * * * * *
B 4, A
C 2, A
D
E
F

Distncia de B a A = 4
Distncia de C a A = 2
Ns no adjacentes a A -> D, E, F =

13
Soluo

5
B D
N inicial
4 6

1 8 2 F
A

2
2
10
C E

14
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A
C 2, A
D
E
F

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
A 0, A * * * * *
B 4, A
C 2, A 2, A
D
E
F

Caminho de menor custo A, C = 2

16
Soluo

5
B D

4 6

1 8 2 F
A

2
2
10
C E

N
corrente

17
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C
C 2, A 2, A * * * *
D
E
F

A distncia de B at A, com referncia a C (A, C) + (C, B) = 2 + 1 = 3

18
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C
C 2, A 2, A * * * *
D 10, C
E 12, C
F

A distncia de D at A, com referncia a C (A, C) + (C, D) = 2 + 8 = 10


A distncia de E at A, com referncia a C (A, C) + (C, E) = 2 + 8 = 12
Ns no adjacentes (A, F) =

19
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C
C 2, A 2, A * * * *
D 10, C
E 12, C
F

Caminho de menor custo A, C = 3

20
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C
C 2, A 2, A * * * *
D 10, C
E 12, C
F

21
Soluo

5
B D

4 6

1 8 2 F
A

2
2
10
C E

N
corrente

22
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C
E 12, C
F

23
Soluo
N
corrente
5
B D

4 6

1 8 2 F
A

2
2
10
C E

24
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B
E 12, C 12, C
F

A distncia de D at A, com referncia a B (A, C) + (C, B) + (B, D) = 2 + 1 + 5 = 8


A distncia de E at A, com referncia a C (A, C) + (C, E) = 2 + 10 = 12

25
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B
E 12, C 12, C
F

Caminho de menor custo (A, D) passando por B e C = 8

26
Soluo
N
corrente
5
B D

4 6

1 8 2 F
A

2
2
10
C E

27
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B 8, B
E 12, C 12, C
F

Caminho de menor custo (A, D) passando por B e C = 8

28
Soluo
N
corrente
5
B D

4 6

1 8 2 F
A

2
2
10
C E

29
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B 8, B * *
E 12, C 12, C 10, D
F 14, D

Caminho de menor custo (A, E) passando por B, C e D = 10

30
Soluo
N
5 corrente
B D

4 6

1 8 2 F
A

2
2
10
C E

31
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B 8, B * *
E 12, C 12, C 10, D 10, D
F 14, D

Caminho de menor custo (A, E) passando por B, C e D = 10

32
Soluo
N
5 corrente
B D

4 6

1 8 2 F
A

2
2
10
C E

33
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B 8, B * *
E 12, C 12, C 10, D 10, D *
F 14, D 12, E

Caminho de menor custo (A, F) passando por B, C, D e E= 12

34
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B 8, B * *
E 12, C 12, C 10, D 10, D *
F 14, D 12, E 12, E

Caminho de menor custo (A, F) passando por B, C, D e E= 12

35
Soluo
N
5 corrente
B D

4 6

1 8 2 F
A

2
2
10
C E

36
O Algoritmo
Vrtice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6
A 0, A * * * * *
B 4, A 3, C 3, C * * *
C 2, A 2, A * * * *
D 10, C 8, B 8, B * *
E 12, C 12, C 10, D 10, D *
F 14, D 12, E 12, E

Caminho de menor custo (A, F) passando por B, C, D e E= 12

37
E se o grafo for orientado?

1
B D
10 6

3 2 9 6 2 F
A

2
5
2
C E

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

Você também pode gostar