Vous êtes sur la page 1sur 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

corretamente.

algoritmo

no

funcionar
6

O Problema: achar o menor


caminho entre A e F
5
B

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

Caminho de menor custo A, C = 2

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

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

0, A

4, A

3, C

2, A

2, A

10, C

12, C

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

0, A

4, A

3, C

2, A

2, A

10, C

12, C

Caminho de menor custo A, C = 3

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

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

0, A

4, A

3, C

3, C

2, A

2, A

10, C

8, B

12, C

12, C

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

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

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

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

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

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

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

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

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

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

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

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

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

37

E se o grafo for orientado?


1
B

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

Vous aimerez peut-être aussi