06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos...

57

Transcript of 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos...

Page 1: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

06 � Grafos: Caminhos MínimosSCC0503 � Algoritmos e Estruturas de Dados II

Paulo H. R. Gabriel Moacir Ponti Jr.www.icmc.usp.br/~moacir

Instituto de Ciências Matemáticas e de Computação � USP

2011/1

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 1 / 57

Page 2: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Conteúdo da Aula

1 Revisão e Motivação

2 Caminhos Mínimos em Grafos Ponderados (um-para-todos)

3 Algoritmo de Dijkstra

4 Algoritmo de Bellmand-Ford

5 Caminhos Mínimos em Grafos Ponderados (todos-para-todos)

6 Sumário

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 2 / 57

Page 3: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Resumindo e recordando. . .

Seja G = (V ,E ) um (di)grafo

Percurso em G

Busca em profundidade (DFS)

Busca em largura (BFS)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 3 / 57

Page 4: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Resumindo e recordando: Um exemplo de percuso (DFS)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 4 / 57

Page 5: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Resumindo e recordando: Um exemplo de percurso (BFS)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 5 / 57

Page 6: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Resumindo e recordando: BFS

Algoritmo que encontra o menor caminho a partir de uma determinadafonte até todos os outros vértices

Menor Caminho

Caminho de menor comprimento (menor número de arestas)

BFS processa vértices em ordem crescente de distância em relação aovértice raiz

Tempo de execução

O(|V |+ |E |)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 6 / 57

Page 7: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Uma aplicação de grafos bem comum

Mapas

São Carlos

Rio Claro Araraquara

Ribeirão Preto

Descalvado

65

40

100

40

90

100

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 7 / 57

Page 8: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Uma aplicação de grafos bem comum

Problema 1

Como saber se duas cidades estão conectadas?

Problema 2

Qual o melhor caminho entre duas cidades?

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 8 / 57

Page 9: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Em outras palavras. . .

Função Peso

Seja G = (V ,E ) um (di)grafo ponderado com função peso w : E → <. Opeso de uma aresta u → v é denotado por w(u, v)Para e ∈ E , se e = (u, v), denotamos w(u, v) = w(e)

Comprimento de um Caminho

Seja p = v0 → v1 → . . .→ vk um caminho

O comprimento é a soma dos pesos das arestas de p

Matematicamente:

L(p) =k∑

i=1

w(vi−1, vi )

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 9 / 57

Page 10: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Em outras palavras. . .

L(p) =k∑

i=1

w(vi−1, vi )

Exemplo

L(p) = 153, 5

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 10 / 57

Page 11: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Caminhos mais curto

Mais uma de�nição

Um caminho mais curto (shortest path) de u até v é o caminho de menorcomprimento entre u e v

Notação

δ(u, v) = min{L(p)}, sendo p um caminho entre u e v

Observação

δ(u, v) =∞ se não houver caminho entre u e v

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 11 / 57

Page 12: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

O problema dos caminhos mínimos

Single-source shortest paths

Dado um (di)grafo ponderado, com pesos não-negativos, e um vértices ∈ V , encontre δ(s, v), para todo v ∈ V

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 12 / 57

Page 13: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

O problema dos caminhos mínimos � Ideia de solução

Abordagem Gulosa

1 Crie um conjunto S de vértices cujas distâncias a partir de s sãoconhecidas

2 A cada iteração, acrescente a S o vértice v cuja distância estimada a sé mínima

v ∈ (V − S) (ou seja, não pertence ainda a S)

3 Atualize as distâncias estimadas até v

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 13 / 57

Page 14: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Dijkstra (I)

Entrada

Grafo G = (V ,E ), direcionado ou não direcionado.

Vértice s ∈ V

w(e) para todo e ∈ E

Saída

d [u]: distância mínima de s até todo u alcançável

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 14 / 57

Page 15: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Dijkstra (II)

Inicialização

1 d [s]← 02 for all v ∈ V − {s}3 do d [s]←∞4 S ← ∅5 Q ← V

Q é uma �la de prioridades que conterá V − S

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 15 / 57

Page 16: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Dijkstra (III)

Percurso

1 while Q 6= ∅2 do u ← Menor_Chave(Q)

3 S ← S ∪ {u}4 for all v ∈ Adj [u]5 do if d [v ] > d [u] + w(u, v)6 then d [v ]← d [u] + w(u, v)7 Decrementa_Chave(Q, v , d [v ])

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 16 / 57

Page 17: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Entrada

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 17 / 57

Page 18: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Passo I

v s a b c d

d [v ] 0 ∞ ∞ ∞ ∞p[v ] − − − − −

v s a b c d

d [v ] 0 ∞ ∞ ∞ ∞Q

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 18 / 57

Page 19: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Passo II

v s a b c d

d [v ] 0 2 7 ∞ ∞p[v ] − s s − −

v a b c d

d [v ] 2 7 ∞ ∞Q

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 19 / 57

Page 20: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Passo III

v s a b c d

d [v ] 0 2 5 10 7

p[v ] − s a a a

v b c d

d [v ] 5 10 7Q

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 20 / 57

Page 21: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Passo IV

v s a b c d

d [v ] 0 2 5 6 7

p[v ] − s s b a

v c d

d [v ] 6 7Q

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 21 / 57

Page 22: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Passo V

v s a b c d

d [v ] 0 2 5 6 7

p[v ] − s s b a

v d

d [v ] 7Q

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 22 / 57

Page 23: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Passo VI

v s a b c d

d [v ] 0 2 5 6 7

p[v ] − s s b a

Q = ∅

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 23 / 57

Page 24: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo � Saída

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 24 / 57

Page 25: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Análise do algoritmo de Dijkstra (I)

Teorema

O algoritmo de Dijkstra sempre devolve d [v ] = δ(s, v) para todo v ∈ V

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 25 / 57

Page 26: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Análise do algoritmo de Dijkstra (II)

Inicialização: O(|V |) vezes

Durante o percurso:

O(|V |) operações de Menor_Chave()

No laço mais interno:

O(|V |+ |E |) operações de Decrementa_Chave()

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 26 / 57

Page 27: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Análise do algoritmo de Dijkstra (III)

Complexidade da Fila

Depende da implementação

Em geral, usa-se uma árvore heap

Inserção/Atualização: O(log |V |)

Complexidade do algoritmo de Dijkstra

O(|V |+ (|E |+ |V |) log(|V |))

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 27 / 57

Page 28: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Limitações no algoritmo de Dijkstra

Ciclos Negativos

Arestas com peso menor que 0

Ocorrem quando modelamos determinados problemas do mundo realpor meio de (di)grafos

Impedem a existência de caminhos mínimos

Reformulando Problema

Dado um (di)grafo ponderado e um vértice s ∈ V , encontre δ(s, v), paratodo v ∈ V OU determine a existência de ciclos negativos

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 28 / 57

Page 29: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Bellman-Ford (I)

Inicialização

1 d [s]← 02 for all v ∈ V − {s}3 do d [s]←∞

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 29 / 57

Page 30: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Bellman-Ford (II)

Percurso

1 for i ← to |V | − 12 do for all (u, v) ∈ E

3 do if d [v ] > d [u] + w(u,w)4 then d [v ]← d [u] + w(u, v)5 for all (u, v) ∈ E

6 do if d [v ] > d [u] + w(u, v)7 then reporta existência de ciclo negativo.

Complexidade

O(|V | · |E |)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 30 / 57

Page 31: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo de execução (I)

s

t x

y z

6

5

-2

8 7-3

-47

9

2

Estimando o tempo. . .

s

t x

y z

6

5

-2

8 7-3

-47

9

2

d(t)=∞

d(s)=0

d(x)=∞

d(z)=∞d(y)=∞

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 31 / 57

Page 32: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo de execução (II)

Primeira rodada

s

t x

y z

6

5

-2

8 7-3

-47

9

2

d(t)=∞6

d(s)=0

d(x)=∞

d(z)=∞d(y)=∞7

Segunda rodada

s

t x

y z

6

5

-2

8 7-3

-47

9

2

d(t)=6

d(s)=0

d(x)=∞114

d(z)=∞2d(y)=7

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 32 / 57

Page 33: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Exemplo de execução (III)

Terceira rodada

s

t x

y z

6

5

-2

8 7-3

-47

9

2

d(t)=62

d(s)=0

d(x)=4

d(z)=2d(y)=7

Quarta rodada

s

t x

y z

6

5

-2

8 7-3

-47

9

2

d(t)=2

d(s)=0

d(x)=4

d(z)=2-2d(y)=7

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 33 / 57

Page 34: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Outro problema envolvendo caminhos

Até agora, vimos o problema envolvendo uma única fonte

Há casos em que temos a necessidade de saber menores caminhosentre todos os vértices

Problema de All-Pairs Shortest Paths

Possível Solução

Utilizar o algoritmo de Dijkstra considerando cada vértice como origemalternadamente

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 34 / 57

Page 35: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Outra possibilidade

Algoritmo de Floyd-Warshall

Utiliza uma matriz |V | × |V | para calcular e armazenar os tamanhos doscaminhos mais curtos

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 35 / 57

Page 36: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

Inicialização: custosentre vértices adjacentessão inseridos na matriz

Ignorar loops

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 36 / 57

Page 37: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

A matriz é percorrida |V |vezes

A cada iteração k ,veri�ca-se se umcaminho entre doisvértices (v ,w) que passatambém pelo vértice k émais curto que ocaminho mais curtoconhecido

d [v ,w ] = min{d [v ,w ], d [v , k]+d [k ,w ]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 37 / 57

Page 38: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [1, 1] = min{d [1, 1], d [1, 1]+d [1, 1]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 38 / 57

Page 39: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [1, 2] = min{d [1, 2], d [1, 1]+d [1, 2]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 39 / 57

Page 40: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [1, 3] = min{d [1, 3], d [1, 1]+d [1, 3]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 40 / 57

Page 41: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [2, 1] = min{d [2, 1], d [2, 1]+d [1, 1]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 41 / 57

Page 42: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [2, 2] = min{d [2, 2], d [2, 1]+d [1, 2]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 42 / 57

Page 43: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [2, 3] = min{d [2, 3], d [2, 1]+d [1, 3]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 ∞3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 43 / 57

Page 44: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [2, 3] = min{d [2, 3], d [2, 1]+d [1, 3]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 44 / 57

Page 45: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [3, 1] = min{d [3, 1], d [3, 1]+d [1, 3]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 45 / 57

Page 46: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [3, 2] = min{d [3, 2], d [3, 1]+d [1, 2]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 46 / 57

Page 47: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

d [3, 3] = min{d [3, 3], d [3, 1]+d [1, 3]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 47 / 57

Page 48: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

Ao �nal da primeiraiteração, sabemos oscaminhos mais curtosentre v e w que passampor 1

Repete-se o processoconsiderando os demaisvértices

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 48 / 57

Page 49: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

. . .

d [3, 1] = min{d [3, 1], d [3, 2]+d [2, 1]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 ∞ 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 49 / 57

Page 50: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

. . .

d [3, 1] = min{d [3, 1], d [3, 2]+d [2, 1]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 5 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 50 / 57

Page 51: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

. . .

d [1, 2] = min{d [1, 2], d [1, 3]+d [3, 2]}

1 2 32

8

3

2

5

1 2 3

1 0 8 5

2 3 0 8

3 5 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 51 / 57

Page 52: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Exemplo

. . .

d [1, 2] = min{d [1, 2], d [1, 3]+d [3, 2]}

1 2 32

8

3

2

5

1 2 3

1 0 7 5

2 3 0 8

3 5 2 0

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 52 / 57

Page 53: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Pseudocódigo

Inicialização

1 for i ← 1 to |V |2 do for j ← 1 to |V |3 do d [i , j ]← w(i , j)4 p[i , j ]← null

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 53 / 57

Page 54: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Algoritmo de Floyd-Warshall � Pseudocódigo

Programação Dinâmica

1 for k ← 1 to |V |2 do for i ← 1 to |V |3 do for j ← 1 to |V |4 do if (d [i , k] + d [k , j ] < d [i , j ])5 do d [i , j ]← d [i , k] + d [k , j ]6 p[i , j ]← k

Complexidade

O(|V |3)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 54 / 57

Page 55: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Sumário

Dois problemas de caminhos mínimos

Single-source shortest paths

Dijkstra

Arestas não-negativasO(|V |+ (|E |+ |V |) log(|V |))

Bellman-Ford

O(|V | · |E |)

All-Pairs Shortest Paths Problem

Floyd-Warshall

O(|V |3)

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 55 / 57

Page 56: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Leitura Recomendada I

CORMEN, T. H. et al.Introduction to algorithms,The MIT Press, 2.ed., 2001.Cap. 24.

SEDGEWICK, R.Algorithms in C: part 5, 3.ed., Addison-Wesley, 2002.Cap. 21 - Sec. 21.1, 21.2, 21.3, 21.7

ZIVIANI, N.Projeto de Algoritmos, 3.ed. Cengage, 2004.Cap. 7 - Sec. 7.8

DASGUPTA, S. et al.Algoritmos, McGraw-Hill, 2008.Cap. 4

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 56 / 57

Page 57: 06 Grafos: Caminhos Mínimos - USPwiki.icmc.usp.br/images/c/cc/Alg2_06.Grafos_caminhos...2 Caminhos Mínimos em Grafos Ponderados ( um-para-todos ) 3 Algoritmo de Dijkstra 4 Algoritmo

Agradecimentos

Ao prof. Thiago Pardo, que forneceu parte das �guras utilizadas nesta aula.

Paulo H. R. Gabriel (ICMC�USP) 06 Grafos: parte 6 2011/1 57 / 57