Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br
Transcript of Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br
![Page 1: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/1.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/2.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/3.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/4.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/5.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/6.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/7.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/8.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/9.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/10.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/11.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/12.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/13.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/14.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/15.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/16.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/17.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/18.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/19.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/20.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/21.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/22.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/23.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/24.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/25.jpg)
Exercício
25
![Page 26: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/26.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/27.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/28.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/29.jpg)
30
Caminhos Mais Curtos de Todos os Pares: Algoritmo de Floyd-Warshall
Complexidade: ?
![Page 30: Grafos: caminhos mínimos Parte 3 - edisciplinas.usp.br](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/30.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/31.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/32.jpg)
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](https://reader034.fdocumentos.com/reader034/viewer/2022042307/625b512ec39f567753162925/html5/thumbnails/33.jpg)
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)