deinf/ufma - ed211 dijkstra.ppt [modo de …portela/ed211_dijkstra.pdfo algoritmo • seja g(v,a) um...

41
Dijkstra

Upload: others

Post on 03-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

Dijkstra

Page 2: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O algoritmo de Dijkstra

• O algoritmo de Dijkstra, concebido

pelo cientista da computação holandês Edsger

Dijkstra em 1956 e publicado em 1959,

soluciona o problema do caminho maissoluciona o problema do caminho mais

curto num grafo dirigido ou não dirigido com

arestas de peso não negativo, em tempo

computacional O([m+n]log n) onde m é o

número de arestas e n é o número de

vértices.

2

Page 3: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Problema

•Um exemplo prático do problema que pode

ser resolvido pelo algoritmo de Dijkstra é:

alguém precisa se deslocar de uma cidade paraalguém precisa se deslocar de uma cidade para

outra. Para isso, ela dispõe de várias estradas,

que passam por diversas cidades. Qual delas

oferece uma trajetória de menor caminho?

3

Page 4: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

PROBLEMAS

• 1º Problema:

– Construir a árvore de menor comprimento

total entre todos os nós de um grafo.

• 2º Problema:

– Encontrar o caminho de menor comprimento

total entre dois determinados nós de um

grafo.

4

Page 5: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O algoritmo de Dijkstra

• Escolhido um vértice como raiz da busca, este

algoritmo calcula o custo mínimo deste vértice

para todos os demais vértices do grafo. Opara todos os demais vértices do grafo. O

algoritmo pode ser usado sobre grafos

orientados (dígrafos), ou não, e admite que

todas as arestas possuem pesos não negativos

(nulo é possível).

5

Page 6: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O algoritmo de Dijkstra

• Esta restrição (pesos não negativos ) é

perfeitamente possível no contexto de redes de

transportes, onde as arestas representamtransportes, onde as arestas representam

normalmente distâncias ou tempos médios de

percurso; poderão existir, no entanto, aplicações

onde as arestas apresentam pesos negativos,

nestes casos o algoritmo não funcionará

corretamente. 6

Page 7: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

O Problema: achar o menor

caminho entre A e F

F

6

A

C E

7

210

8 21 F

2

Page 8: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

• Seja G(V,A) um grafo orientado e s um vértice de G:

• Atribua valor zero à estimativa do custo mínimo do vértice s (a raiz da busca) e infinito às demais estimativas;

• Atribua um valor qualquer aos precedentes (o precedente de um vértice t é o vértice que precede t no caminho de custo mínimo de s para t);

• Enquanto houver vértice aberto:• Enquanto houver vértice aberto:

– seja k um vértice ainda aberto cuja estimativa seja a menor dentre todos os vértices abertos;

– feche o vértice k

– Para todo vértice j ainda aberto que seja sucessor de k faça:• some a estimativa do vértice k com o custo do arco que une k a j;

• caso esta soma seja melhor que a estimativa anterior para o vértice j, substitua-a e anote k como precedente de j.

8

Page 9: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6Nó inicial

A

C E

9

210

8 21 F

2

Page 10: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6

A 0, A

B

C

D

E

F

10

Page 11: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6

A 0, A

B

C

D

E

F

11

Page 12: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6

A 0, A

B 4, A

C

D

E

F

12

Distância de B a A = 4

Page 13: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6

A 0, A * * * * *

B 4, A

C 2, A

D ∞

E ∞

F ∞

13

Distância de B a A = 4

Distância de C a A = 2

Nós não adjacentes a A -> D, E, F = ∞

Page 14: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6Nó inicial

A

C E

14

210

8 21 F

2

Page 15: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice Passo 1 Passo 2 Passo 3 Passo 4 Passo 5 Passo 6

A 0, A * * * * *

B 4, A

C 2, A

D ∞

E ∞

F ∞

15

Distância de B a A = 4

Distância de C a A = 2

Nós não adjacentes a A -> D, E, F = ∞

Nó não mais visitado *

Page 16: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞

16

Caminho de menor custo A, C = 2

Page 17: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

A

C E

17

210

8 21 F

2

corrente

Page 18: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞

18

A distância de B até A, com referência a C é (A, C) + (C, B) = 2 + 1 = 3

Page 19: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞ ∞

19

A distância de D até A, com referência a C é (A, C) + (C, D) = 2 + 8 = 10

A distância de E até A, com referência a C é (A, C) + (C, E) = 2 + 8 = 12

Nós não adjacentes (A, F) = ∞

Page 20: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞ ∞

20

Caminho de menor custo A, C = 3

Page 21: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

Page 22: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

A

C E

22

210

8 21 F

2

corrente

Page 23: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

Page 24: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

corrente

A

C E

24

210

8 21 F

2

Page 25: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞ ∞ ∞

25

A distância de D até A, com referência a B é (A, C) + (C, B) + (B, D) = 2 + 1 + 5 = 8

A distância de E até A, com referência a C é (A, C) + (C, E) = 2 + 10 = 12

Page 26: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞ ∞ ∞

26

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

Page 27: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

corrente

A

C E

27

210

8 21 F

2

Page 28: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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 ∞ ∞ ∞

28

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

Page 29: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

corrente

A

C E

29

210

8 21 F

2

Page 30: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

30

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

Page 31: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

corrente

A

C E

31

210

8 21 F

2

Page 32: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

32

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

Page 33: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

corrente

A

C E

33

210

8 21 F

2

Page 34: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

34

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

Page 35: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

35

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

Page 36: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

4

5

8 21

Solução

F

6

corrente

A

C E

36

210

8 21 F

2

Page 37: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

O Algoritmo

Vértice 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

37

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

Page 38: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

B D

10

1

9 223 6

E se o grafo for orientado?

F

6

A

C E

38

52

9 223 6

7

F

2

Page 39: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

Exercícios

• Execute o algoritmo de Dijkstra com o grafo da

figura a, começando com o vértice 1.

• Execute o algoritmo de Dijkstra com o grafo da

figura a, mas começando com o vértice 4. A figura a, mas começando com o vértice 4. A

resposta é a mesma?

• Para o grafo ilustrado na figura b, mostre cada

passo da execução do algoritmo de Dijkstra.

Começando com o vértice 1.

39

Page 40: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

Grafos

40

Page 41: DEINF/UFMA - ed211 Dijkstra.ppt [Modo de …portela/ed211_Dijkstra.pdfO Algoritmo • Seja G(V,A) um grafo orientado e sum vértice de G: • Atribua valor zero à estimativa do custo

Fim

41