algoritmos de dijkstra e bellman-fordbf.pdf · 2020. 4. 27. · 1 algoritmos de dijkstra e...

Post on 06-Sep-2020

6 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Algoritmos de Dijkstra eBellman-Ford

Prof. Celso A. W. Santos

J702 :: Teoria de Grafos

celso.santos@docente.unip.br

24/04/2020

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

2

Mais avisos...

� Avaliações serão realizadas por listas de exercícios, disponibilizadasem meu site todas as sextas-feiras.

. Prazo de entrega: até a quinta-feira da semana seguinte, às 23h59m

. Submissão deve ser feita em formato PDF

. Enviar com assunto no e-mail:[J702 - Lista X] Matrícula XXXXXXX ← tudo maiúsculo!

Exemplo: [J702 - Lista 3] Matrícula D648H12

. Sim... eu vou zerar estudos submetidos fora do padrão :)

� Todas as listas deverão ser entregues presencialmente ao retorno dasatividades!

Se você não tem impressora...

� As notas das Listas 2 e 3 estarão disponíveis no site na sexta-feiraque vem, dia 01/05.

3

Na aula passada...

4

Grafos ponderados

Definição. Um grafo ponderado é uma tripla G = (V,U,w) tal que V éum conjunto de vértices, E é um conjunto de arestas, e w : E → R éuma função peso que atribui um valor real a cada aresta do grafo.

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

5

Caminho Mínimo

Caminho MínimoEntrada: Um grafo ponderado G = (V,U,w), um vértice fonte s ∈ V eum vértice destino t ∈ V .Pergunta: Qual é o menor caminho entre s e t? E qual é o seu custo?

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

5

Caminho Mínimo

Caminho MínimoEntrada: Um grafo ponderado G = (V,U,w), um vértice fonte s ∈ V eum vértice destino t ∈ V .Pergunta: Qual é o menor caminho entre s e t? E qual é o seu custo?

s

b

c

d

e

f

g

t

4

3

23

5 5

6

1

5

23

7

4

5

Caminho Mínimo

Caminho MínimoEntrada: Um grafo ponderado G = (V,U,w), um vértice fonte s ∈ V eum vértice destino t ∈ V .Pergunta: Qual é o menor caminho entre s e t? E qual é o seu custo?

s

b

c

d

e

f

g

t

4

3

23

5 5

6

1

5

23

7

4

COMO ENCONTRAR O MENOR CAMINHO?

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

6

Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Dados vértices s, t ∈ V , encontra o menor caminho entre s e t.. Tem um problema!

� Algoritmo de Bellman-Ford. Single-source. “Resolve” o problema!

� Algoritmo de Floyd-Warshall. All-pairs. Mais rápido que executar Single-source para todos os vértices

7

Algoritmo de Dijkstra

8

Algoritmo de Dijkstra

Inicializa-Single-Source(G, s):

para todo vértice v ∈ V :d[v] =∞;π[v] =⊥;

d[s] = 0;

Relaxa(u, v, w):se d[v] > d[u] + w(u, v):

d[v] = d[u] + w(u, v);π[v] = u;

Dijkstra(G, s):Inicializa-Single-Source(G, s)S = ∅;Q = V ;enquanto Q 6= ∅ faça:

u = Extrai-Min(Q);S = S ∪ {u};p/ todo vértice v ∈ N(u) faça:

Relaxa(u, v, w);

8

Algoritmo de Dijkstra

Inicializa-Single-Source(G, s):

para todo vértice v ∈ V :d[v] =∞;π[v] =⊥;

d[s] = 0;

Relaxa(u, v, w):se d[v] > d[u] + w(u, v):

d[v] = d[u] + w(u, v);π[v] = u;

Dijkstra(G, s):Inicializa-Single-Source(G, s)S = ∅;Q = V ;enquanto Q 6= ∅ faça:

u = Extrai-Min(Q);S = S ∪ {u};p/ todo vértice v ∈ N(u) faça:

Relaxa(u, v, w);

8

Algoritmo de Dijkstra

Inicializa-Single-Source(G, s):

para todo vértice v ∈ V :d[v] =∞;π[v] =⊥;

d[s] = 0;

Relaxa(u, v, w):se d[v] > d[u] + w(u, v):

d[v] = d[u] + w(u, v);π[v] = u;

Dijkstra(G, s):Inicializa-Single-Source(G, s)S = ∅;Q = V ;enquanto Q 6= ∅ faça:

u = Extrai-Min(Q);S = S ∪ {u};p/ todo vértice v ∈ N(u) faça:

Relaxa(u, v, w);

9

Exemplo de Execução :: Algoritmo de Dijkstra

d

s b c d e f g t

π

s b c d e f g t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

∞b

c

∞d

e

f

g

∞t

π ⊥

s

b

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

∞b

c

∞d

e

f

g

∞t

π ⊥

s

b

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

c

∞d

e

f

g

∞t

π ⊥

s

s

b

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

∞d

e

f

g

∞t

π ⊥

s

s

b

s

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

∞d

e

f

g

∞t

π ⊥

s

s

b

s

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

∞d

e

f

g

∞t

π ⊥

s

s

b

s

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

9

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

c

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

9

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

c

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

9

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

c

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

9

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

c

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

9

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

c

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

f

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

∞t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

COMO ENCONTRAR O MENOR CAMINHO?

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

23

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

23

5 5

6

1

5

23

7

4

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

23

5 5

6

1

5

23

7

4

E QUAL É O SEU CUSTO?

9

Exemplo de Execução :: Algoritmo de Dijkstra

d 0

s

4

b

3

c

6

d

7

e

11

f

9

g

13

t

π ⊥

s

s

b

s

c

c

d

d

e

d

f

d

g

g

t

s

b

c

d

e

f

g

t

4

3

23

5 5

6

1

5

23

7

4

10

Encontrando a Resposta

Devolve-Menor-Caminho(G, s):Dijkstra(G, s);imprime “Custo: ” + d[t];imprime “Caminho: t ← ”v = π[t];enquanto v 6= ⊥ faça:

imprime: “v ←”;v = π[v];

11

O problema do Dijkstra: Ciclos Negativos

� O algoritmo de Dijkstra funciona mesmo quando existem pesosnegativos nas arestas.

s

b

c

d

e

f

g

t

4

3

2 3

5 5

6

1

5

23

7

4

� ... mas quebra quando existem ciclos negativos!

11

O problema do Dijkstra: Ciclos Negativos

� O algoritmo de Dijkstra funciona mesmo quando existem pesosnegativos nas arestas.

s

b

c

d

e

f

g

t

-4

3

2 -3

5 5

6

1

5

-23

7

4

� ... mas quebra quando existem ciclos negativos!

11

O problema do Dijkstra: Ciclos Negativos

� O algoritmo de Dijkstra funciona mesmo quando existem pesosnegativos nas arestas.

s

b

c

d

e

f

g

t

-4

3

2 -3

5 5

6

1

5

-23

7

4

� ... mas quebra quando existem ciclos negativos!

11

O problema do Dijkstra: Ciclos Negativos

� O algoritmo de Dijkstra funciona mesmo quando existem pesosnegativos nas arestas.

s

b

c

d

e

f

g

t

-9

3

2 -3

5 5

6

1

5

-23

7

4

� ... mas quebra quando existem ciclos negativos!

11

O problema do Dijkstra: Ciclos Negativos

� O algoritmo de Dijkstra funciona mesmo quando existem pesosnegativos nas arestas.

s

b

c

d

e

f

g

t

-9

3

2 -3

5 5

6

1

5

-23

-7

4

� ... mas quebra quando existem ciclos negativos!

12

O Algoritmo de Bellman-Ford

13

Algoritmo de Bellman-Ford

Bellman-Ford(G, s):Inicializa-Single-Source(G, s);de i = 1 até n− 1 faça:

para toda aresta uv ∈ E faça:Relaxa(u, v, w);

para toda aresta uv ∈ E faça:se d[v] > d[u] + w(u, v) então:

devolve Falsedevolve True

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d

s b c d e

π

s b c d e

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

c

∞d

e

π ⊥

s

b

c

d

e

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

c

∞d

e

π ⊥

s

b

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

c

∞d

e

π ⊥

s

b

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

c

∞d

e

π ⊥

s

b

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

c

∞d

e

π ⊥

s

b

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

3

c

∞d

e

π ⊥

s

b

s

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

3

c

∞d

e

π ⊥

s

b

s

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

∞b

3

c

∞d

e

π ⊥

s

b

s

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

∞d

e

π ⊥

s

s

b

s

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

∞d

e

π ⊥

s

s

b

s

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

e

π ⊥

s

s

b

s

c

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

e

π ⊥

s

s

b

s

c

c

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

9

e

π ⊥

s

s

b

s

c

c

d

c

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

9

e

π ⊥

s

s

b

s

c

c

d

c

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

ACABOU O ALGORITMO?

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

9

e

π ⊥

s

s

b

s

c

c

d

c

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

5

e

π ⊥

s

s

b

s

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

5

e

π ⊥

s

s

b

s

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

5

e

π ⊥

s

s

b

s

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

3

c

6

d

5

e

π ⊥

s

s

b

s

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

6

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

6

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

6

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

ACABOU O ALGORITMO?

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

ACABOU O ALGORITMO?

14

Exemplo de Execução :: Algoritmo de Bellman-Ford

d 0

s

4

b

2

c

5

d

5

e

π ⊥

s

s

b

b

c

c

d

d

e

Ordem das Arestas:1a : de2a : bd3a : sc4a : bc5a : sb6a : cd7a : ce

s

b

c

d

e

4

3

-2 3

5

6

-1

ACABOU O ALGORITMO?

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d 0

a

∞b

c

π ⊥

a

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d 0

a

4

b

c

π ⊥

a

s

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

ACABOU O ALGORITMO?

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

d[b] > d[a] + w(a, b)!

15

Exemplo de Execução (Ruim) :: Algoritmo de Bellman-Ford

d −1

a

4

b

−4

c

π c

a

s

b

b

c

Ordem das Arestas:1a : bc2a : ca3a : ab

a

b

c

4

3

-8

Algoritmo devolve False!!

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

16

Comparando os Algoritmos

Algoritmos para resolver Caminho Mínimo

� Algoritmo de Dijkstra. Single-source. Complexidade: O(n log n + m)

� Algoritmo de Bellman-Ford. Single-source. Complexidade: O(nm)

� Algoritmo de Floyd-Warshall. All-pairs. Complexidade: O(n3)

17

Dúvidas?

18

Aula que vem...

19

Árvore Geradora Mínima

v1

v2

v3

v4 v5

v6

v7v8

30

18

25

23

15

28

17

33

2122

3227

31 35

19

Árvore Geradora MínimaEntrada: Um grafo ponderado G = (V,U,w).Pergunta: Qual é a árvore T ⊆ G de custo mínimo que gera G?

19

Árvore Geradora Mínima

v1

v2

v3

v4 v5

v6

v7v8

30

18

25

23

15

28

17

33

2122

3227

31 35

19

Árvore Geradora MínimaEntrada: Um grafo ponderado G = (V,U,w).Pergunta: Qual é a árvore T ⊆ G de custo mínimo que gera G?

top related