27
Caminho mais curto e o algoritmo de Dijkstra Caminho mais curto e o algoritmo de Dijkstra Márcia R. Cerioli Departamento de Ciência da Computação - IM e PESC - COPPE UFRJ Algoritmos e Grafos Dezembro de 2015

Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 2: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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?

Page 3: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 4: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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+

Page 5: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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+

Page 6: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 7: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 8: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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 .

Page 9: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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}

Page 10: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 11: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 12: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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.

Page 13: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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!

Page 14: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

Caminho mais curto e o algoritmo de Dijkstra

A solução de Dijkstra

E.W. Dijkstra

Edsger Wybe Dijkstra, em 1956

Holanda

(1930 – 2002)

Page 15: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 16: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 17: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 18: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 19: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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

Page 20: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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.

Page 21: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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.

Page 22: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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}

Page 23: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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}

Page 24: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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.

Page 25: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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.

Page 26: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

Caminho mais curto e o algoritmo de Dijkstra

E.W. Dijkstra

Prêmio Turing

Edsger W. Dijkstra, em 2002Prêmio Turing, em 1972

Page 27: Caminho mais curto e o algoritmo de Dijkstracerioli/cursos/algra/Dijkstra.pdf · Caminho mais curto e o algoritmo de Dijkstra Problema do Caminho mais Curto CaminhosmínimostemaProp

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.