grafos: caminhos mínimos parte 3 - edisciplinas.usp.br

33
Grafos: caminhos mínimos Parte 3 SCC0216 Modelagem Computacional em Grafos Thiago A. S. Pardo Maria Cristina F. Oliveira

Upload: others

Post on 17-Apr-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

Grafos: caminhos mínimosParte 3

SCC0216 Modelagem Computacional em Grafos

Thiago A. S. PardoMaria Cristina F. Oliveira

Page 2: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

2

Caminhos Mais Curtos de Todos os Pares Suponha que um grafo orientado ponderado

representa as possíveis vôos de uma companhia aérea conectando pares de cidades

Suponha que queremos construir uma tabela com as melhores rotas, ou os menores caminhos, entre todas as cidades

Esse é um exemplo de problema que exige encontrar os caminhos mais curtos para todos os pares de vértices

Page 3: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

3

Caminhos Mais Curtos de Todos os Pares Uma possível solução seria utilizar o algoritmo de Dijkstra

considerando cada vértice como origem, alternadamente

Uma solução mais direta é utilizar o algoritmo de Floyd-Warshall Admite arestas com peso negativo, mas não admite ciclos de

peso negativo (mesma situação de Bellman-Ford)

Se |V| = n, o algoritmo utiliza uma matriz An x n para calcular e armazenar os tamanhos (ou custos) dos caminhos mais curtos

Page 4: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

4

Caminho mínimo

Grafo dirigido G(V,A) com função peso w: A→ℜ que associa pesos às arestas

Seja p algum caminho do vértice u ao vértice v Seja w(p) o peso (custo) do caminho p Caminho de menor peso entre u e v:

∞∃⇒=

ccvpuderotasevupwvu

p/}:)(min{),(δ

Page 5: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

5

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

1 2 328

32

5

2

21

1

3

3

Matriz A Grafo G(V,A)

Page 6: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

6

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

1 2 328

32

5

2

21

1

3

3

Inicialmente, os custos entre pares vértices adjacentes são inseridos na matriz A

Diagonal é zerada: pesos de self-loops são ignorados

Page 7: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

7

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

1 2 328

32

5

Inicialmente, os custos entre pares vértices adjacentes são inseridos na matriz A

Diagonal é zerada: pesos de self-loops são ignorados

Page 8: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

8

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Matriz A é percorrida n = |V| vezes

A cada iteração (k, com (1≤ k ≤ n), verifica se um caminho entre um par de vértices (v,w), que passa pelo vértice k, é mais curto do que o caminho mais curto já conhecido

Mais curto = menor custo

1 2 328

32

5

Page 9: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

9

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[v,w] = min(A[v,w],

A[v,k] + A[k,w])

k = 1, 2, 3

1 2 328

32

5

Page 10: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

10

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[1,1] = min(A[1,1],

A[1,1] + A[1,1])

u = 1, v = 1, k = 1

1 2 328

32

5

Page 11: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

11

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[1,2] = min(A[1,2],

A[1,1] + A[1,2])

u = 1, v = 2, k = 1

1 2 328

32

5

Page 12: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

12

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[1,3] = min(A[1,3],

A[1,1] + A[1,3])

u = 1, v = 3, k = 1

1 2 328

32

5

Page 13: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

13

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[2,1] = min(A[2,1],

A[2,1] + A[1,1])1 2 328

32

5

u = 2, v = 1, k = 1

Page 14: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

14

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[2,2] = min(A[2,2],

A[2,1] + A[1,2])1 2 328

32

5

u = 2, v = 2, k = 1

Page 15: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

15

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 ∞

∞ 2 02

21

1

3

3

Ou seja:A[2,3] = min(A[2,3],

A[2,1] + A[1,3])1 2 328

32

5

u = 2, v = 3, k = 1

Page 16: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

16

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

∞ 2 02

21

1

3

3

Ou seja:A[2,3] = min(A[2,3],

A[2,1] + A[1,3])1 2 328

32

5

u = 2, v = 3, k = 1

Page 17: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

17

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

∞ 2 02

21

1

3

3

Ou seja:A[3,1] = min(A[3,1],

A[3,1] + A[1,1])1 2 328

32

5

u = 3, v = 1, k = 1

Page 18: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

18

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

∞ 2 02

21

1

3

3

Ou seja:A[3,2] = min(A[3,2],

A[3,1] + A[1,2])1 2 328

32

5

u = 3, v = 2, k = 1

Page 19: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

19

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

∞ 2 02

21

1

3

3

Ou seja:A[3,3] = min(A[3,3],

A[3,1] + A[1,3])1 2 328

32

5

u = 3, v = 3, k = 1

Page 20: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

20

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

8

0 8 5

3 0 8

∞ 2 02

21

1

3

3

Ao final da iteração k=1, tem-se todos os caminhos mais curtos entre v e wque podem passar pelo vértice 1

O processo se repete para k = 2 e k = 3

1 2 328

32

5

Page 21: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

21

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

∞ 2 02

21

1

3

3

...A[3,1] = min(A[3,1],

A[3,2] + A[2,1])

k = 2

1 2 328

32

5

Page 22: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

22

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

5 2 02

21

1

3

3

...A[3,1] = min(A[3,1],

A[3,2] + A[2,1])

k = 2

1 2 328

32

5

Page 23: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

23

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 8 5

3 0 8

5 2 02

21

1

3

3

...A[1,2] = min(A[1,2],

A[1,3] + A[3,2])

k = 3

1 2 328

32

5

Page 24: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

24

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

0 7 5

3 0 8

5 2 02

21

1

3

3

...A[1,2] = min(A[1,2],

A[1,3] + A[3,2])

k = 3

1 2 328

32

5

Page 25: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

Exercício

25

Page 26: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

26

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

Aplique o algoritmo de Floyd-Warshall no grafo abaixo

1

4

2 3

4 -23

-1 2

Page 27: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

28

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

procedimento Floyd-Warshall (Grafo G, matriz A)variáveis

u,v,k: vertices;

iníciopara u=1 até NumVertices faça

para v=1 até NumVertices façase u = v então

A[u,v]= 0;senão A[u,v]= w(u,v); // peso aresta (u,v)

para k=1 até NumVertices façapara u=1 até NumVertices faça

para v=1 até NumVertices façase A[u,k]+A[k,v] < A[u,v] então

A[u,v]= A[u,k] + A[k,v];

fim;

Page 28: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

Implementar método de Floyd-Warshall

29

Page 29: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

30

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

Complexidade: ?

Page 30: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

31

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

Complexidade: O(|V|3)

Por que?

Page 31: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

32

Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall

Esse algoritmo adota qual paradigma de projeto de algoritmos?

Page 32: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

Atenção Comparação entre algoritmos estudados

33

Método Vértices Pesos Ciclos Complexidade

Dijkstra Origem única Positivos Sim O(|A| log|V|)

Bellman-Ford Origem única Positivos e negativos

Sim, incluindo negativos O(|A||V|)

Ordenaçãotopológica Origem única Positivos e

negativos Não O(|A|+|V|)

Floyd-Warshall Todos os pares Positivos e negativos

Sim, incluindo negativos O(|V|3)

Page 33: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br

34

Outros algoritmos

Há outras alternativas para caminhos mais curtos Vimos algumas das principais

Para os curiosos, estudar... Algoritmo de Warshall (anterior a Floyd-Warshall)

para existência de caminhos Algoritmo de Johnson (todos os pares, para

grafos esparsos)