Caminhos mais curtos
CLRS Secs 24.3 e 25.2
Análise de Algoritmos — 2º sem 2018 1 / 65
Caminhos mais curtos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E.
I Ocomprimentode um caminho é a soma dos comprimentos de suas arestas.
I Para vérticesuev, adistânciadeu avé o menor comprimento de um caminho deu av.
Problema 1:DadosG,ce um vérticesdeG,
Problema 1:encontrar a distância desa cada vértice deG. Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG. Algoritmo de Dijkstra:comprimentos não negativos
Algoritmo de Floyd-Warshall:sem circuitos negativos
Caminhos mais curtos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E.
I Ocomprimentode um caminho é a soma dos comprimentos de suas arestas.
I Para vérticesuev, adistânciadeu avé o menor comprimento de um caminho deu av.
Problema 1:DadosG,ce um vérticesdeG,
Problema 1:encontrar a distância desa cada vértice deG. Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG. Algoritmo de Dijkstra:comprimentos não negativos
Algoritmo de Floyd-Warshall:sem circuitos negativos
Análise de Algoritmos — 2º sem 2018 3 / 65
Caminhos mais curtos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E.
I Ocomprimentode um caminho é a soma dos comprimentos de suas arestas.
I Para vérticesuev, adistânciadeu avé o menor comprimento de um caminho deu av.
Problema 1:DadosG,ce um vérticesdeG,
Problema 1:encontrar a distância desa cada vértice deG.
Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG. Algoritmo de Dijkstra:comprimentos não negativos
Algoritmo de Floyd-Warshall:sem circuitos negativos
Caminhos mais curtos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E.
I Ocomprimentode um caminho é a soma dos comprimentos de suas arestas.
I Para vérticesuev, adistânciadeu avé o menor comprimento de um caminho deu av.
Problema 1:DadosG,ce um vérticesdeG,
Problema 1:encontrar a distância desa cada vértice deG. Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG.
Algoritmo de Dijkstra:comprimentos não negativos Algoritmo de Floyd-Warshall:sem circuitos negativos
Análise de Algoritmos — 2º sem 2018 5 / 65
Caminhos mais curtos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E.
I Ocomprimentode um caminho é a soma dos comprimentos de suas arestas.
I Para vérticesuev, adistânciadeu avé o menor comprimento de um caminho deu av.
Problema 1:DadosG,ce um vérticesdeG,
Problema 1:encontrar a distância desa cada vértice deG. Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG. Algoritmo de Dijkstra:comprimentos não negativos
Algoritmo de Floyd-Warshall:sem circuitos negativos
Caminhos mais curtos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E.
I Ocomprimentode um caminho é a soma dos comprimentos de suas arestas.
I Para vérticesuev, adistânciadeu avé o menor comprimento de um caminho deu av.
Problema 1:DadosG,ce um vérticesdeG,
Problema 1:encontrar a distância desa cada vértice deG. Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG. Algoritmo de Dijkstra:comprimentos não negativos
Algoritmo de Floyd-Warshall:sem circuitos negativos
Análise de Algoritmos — 2º sem 2018 7 / 65
Circuitos negativos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Para vérticesuev, adistânciadeu avé o comprimento
de um caminho entreu ev de comprimento mínimo.
Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode ficar mal-definida.
Poderíamos dar “voltas” num circuito negativo,
cada vez obtendo um “caminho” de comprimento menor. Assim definimos a distânciaÖ(u,v)como
−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu avc.c.
Circuitos negativos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Para vérticesuev, adistânciadeu avé o comprimento
de um caminho entreu ev de comprimento mínimo.
Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode ficar mal-definida.
Poderíamos dar “voltas” num circuito negativo,
cada vez obtendo um “caminho” de comprimento menor. Assim definimos a distânciaÖ(u,v)como
−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu avc.c.
Análise de Algoritmos — 2º sem 2018 9 / 65
Circuitos negativos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Para vérticesuev, adistânciadeu avé o comprimento
de um caminho entreu ev de comprimento mínimo.
Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode ficar mal-definida.
Poderíamos dar “voltas” num circuito negativo,
cada vez obtendo um “caminho” de comprimento menor.
Assim definimos a distânciaÖ(u,v)como
−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu avc.c.
Circuitos negativos
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Para vérticesuev, adistânciadeu avé o comprimento
de um caminho entreu ev de comprimento mínimo.
Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode ficar mal-definida.
Poderíamos dar “voltas” num circuito negativo,
cada vez obtendo um “caminho” de comprimento menor.
Assim definimos a distânciaÖ(u,v)como
−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu avc.c.
Análise de Algoritmos — 2º sem 2018 11 / 65
Propriedades
P: caminho mais curto desat Subestrutura ótima:
Subcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emG dev1avk. Para todo 1≤i ≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Corolário:ParaG ec, se o último arco de um caminho mais curto des até o arcout, entãoÖ(s,t) =Ö(s,u) +c(ut).
Lema:ParaG,ces,
Lema:Ö(s,v)≤Ö(s,u) +c(uv)para todos os arcosuv.
Propriedades
P: caminho mais curto desat Subestrutura ótima:
Subcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emGdev1avk. Para todo 1≤i≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Corolário:ParaG ec, se o último arco de um caminho mais curto des até o arcout, entãoÖ(s,t) =Ö(s,u) +c(ut).
Lema:ParaG,ces,
Lema:Ö(s,v)≤Ö(s,u) +c(uv)para todos os arcosuv.
Análise de Algoritmos — 2º sem 2018 13 / 65
Propriedades
P: caminho mais curto desat Subestrutura ótima:
Subcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emGdev1avk. Para todo 1≤i≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Corolário:ParaG ec, se o último arco de um caminho mais curto desaté o arcout, entãoÖ(s,t) =Ö(s,u) +c(ut).
Lema:ParaG,ces,
Lema:Ö(s,v)≤Ö(s,u) +c(uv)para todos os arcosuv.
Propriedades
P: caminho mais curto desat Subestrutura ótima:
Subcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emGdev1avk. Para todo 1≤i≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Corolário:ParaG ec, se o último arco de um caminho mais curto desaté o arcout, entãoÖ(s,t) =Ö(s,u) +c(ut).
Lema:ParaG,ces,
Lema:Ö(s,v)≤Ö(s,u) +c(uv)para todos os arcosuv.
Análise de Algoritmos — 2º sem 2018 15 / 65
Algoritmo de Dijkstra
á: representa os caminhos mínimos atés d: guarda estimativa a distância desao vértice
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
nada nada
Invariantes: u.d =Ö(s,u)seu <Q Invariantes: u.d ≥Ö(s,u)seu∈Q
Onde usamos que não há arestas de comprimento negativo?
Algoritmo de Dijkstra
á: representa os caminhos mínimos atés d: guarda estimativa a distância desao vértice
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
u.d: comprimento de um caminho mínimo desau u.v:cujos vértices internos estão fora deQ
Invariantes: u.d =Ö(s,u)seu<Q
Invariantes: u.d ≥Ö(s,u)seu∈Q
Onde usamos que não há arestas de comprimento negativo?
Análise de Algoritmos — 2º sem 2018 17 / 65
Algoritmo de Dijkstra
á: representa os caminhos mínimos atés d: guarda estimativa a distância desao vértice
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
Invariantes: u.d =Ö(s,u)seu<Q Invariantes: u.d ≥Ö(s,u)seu ∈Q
Onde usamos que não há arestas de comprimento negativo?
Algoritmo de Dijkstra
á: representa os caminhos mínimos atés d: guarda estimativa a distância desao vértice
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
Invariantes: u.d =Ö(s,u)seu<Q Invariantes: u.d ≥Ö(s,u)seu ∈Q
Onde usamos que não há arestas de comprimento negativo?
Análise de Algoritmos — 2º sem 2018 19 / 65
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
SeQfor uma lista simples: Linha 3 e Extract-Min:O(n)
Consumo de tempo do Dijkstra:O(n2)
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
SeQfor uma lista simples:
Linha 3 e Extract-Min:O(n)
Consumo de tempo do Dijkstra:O(n2)
Análise de Algoritmos — 2º sem 2018 21 / 65
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
SeQfor uma lista simples:
Linha 3 e Extract-Min:O(n)
Consumo de tempo do Dijkstra:O(n2)
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
Consumo de tempo do Dijkstra:O(mlgn)
Consumo de tempo com Fibonacci heap:O(m+nlgn)
Análise de Algoritmos — 2º sem 2018 23 / 65
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
SeQfor implementada com um heap:
Inicialização:O(n) Extract-Mine Decrease-Key:O(lgn) Decrease-Key:linha 8
Consumo de tempo do Dijkstra:O(mlgn)
Consumo de tempo com Fibonacci heap:O(m+nlgn)
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
Consumo de tempo do Dijkstra:O(mlgn)
Consumo de tempo com Fibonacci heap:O(m+nlgn)
Análise de Algoritmos — 2º sem 2018 25 / 65
Algoritmo de Dijkstra
Complexidade:
DIJKSTRA(G,c,s)
1 parav∈V(G)faça v.d← ∞ v.á←nil 2 s.d←0
3 Q←V(G) fila de prioridade: chave devév.d
4 enquantoQ,∅faça 5 u← Extract-Min(Q) 6 para cadav∈adj(u)faça 7 sev∈Q ev.d >u.d+c(uv)
8 então v.á←u v.d ←u.d+c(uv) 9 áed são a informação desejada.
Consumo de tempo do Dijkstra:O(mlgn)
Consumo de tempo com Fibonacci heap:O(m+nlgn)
Algoritmo A
∗DadosG,c,s,t, achar um caminho mínimo desat.
Suponha que exista, para cadavuma estimativa h(v)≤Ö(v,t).
Organize a fila de prioridadeQ pelo mínimo de f(v) =Ö(s,v) +h(v). Consistência: se para cada arestau→v
h(u)≤c(u→v)+h(v), o algoritmo termina com um caminho ótimo desat.
Análise de Algoritmos — 2º sem 2018 27 / 65
Algoritmo A
∗DadosG,c,s,t, achar um caminho mínimo desat.
Suponha que exista, para cadavuma estimativa h(v)≤Ö(v,t).
Organize a fila de prioridadeQ pelo mínimo de f(v) =Ö(s,v) +h(v). Consistência: se para cada arestau→v
h(u)≤c(u→v)+h(v), o algoritmo termina com um caminho ótimo desat.
Algoritmo A
∗DadosG,c,s,t, achar um caminho mínimo desat.
Suponha que exista, para cadavuma estimativa h(v)≤Ö(v,t).
Organize a fila de prioridadeQ pelo mínimo de f(v) =Ö(s,v) +h(v).
Consistência: se para cada arestau→v h(u)≤c(u→v)+h(v), o algoritmo termina com um caminho ótimo desat.
Análise de Algoritmos — 2º sem 2018 29 / 65
Algoritmo A
∗DadosG,c,s,t, achar um caminho mínimo desat.
Suponha que exista, para cadavuma estimativa h(v)≤Ö(v,t).
Organize a fila de prioridadeQ pelo mínimo de f(v) =Ö(s,v) +h(v).
Consistência: se para cada arestau→v h(u)≤c(u→v)+h(v), o algoritmo termina com um caminho ótimo desat.
Algoritmo A
∗Quando se aplica:
Gé subgrafo de um grafo no qual é “fácil” calcular distâncias.
Por exemplo, num mapa, a distância euclidiana é uma estimativa.
Análise de Algoritmos — 2º sem 2018 31 / 65
Algoritmo A
∗Quando se aplica:
Gé subgrafo de um grafo no qual é “fácil” calcular distâncias.
Por exemplo, num mapa, a distância euclidiana é uma estimativa.
Algoritmo A
∗Quando se aplica:
Gé subgrafo de um grafo no qual é “fácil” calcular distâncias.
Por exemplo, num mapa, a distância euclidiana é uma estimativa.
Análise de Algoritmos — 2º sem 2018 33 / 65
Problema 2
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Funçãoc que atribui um comprimentoc(e)para cadae∈E.
Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG.
Hipótese:
Hipótese:Não há circuito de comprimento negativo emG.
Algoritmo de Floyd-Warshall:programação dinâmica
Problema 2
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Funçãoc que atribui um comprimentoc(e)para cadae∈E.
Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG.
Hipótese:
Hipótese:Não há circuito de comprimento negativo emG.
Algoritmo de Floyd-Warshall:programação dinâmica
Análise de Algoritmos — 2º sem 2018 35 / 65
Problema 2
Dados:
G = (V,E): grafodirigido
Funçãoc que atribui um comprimentoc(e)para cadae∈E. Funçãoc que atribui um comprimentoc(e)para cadae∈E.
Problema 2:DadosG ec,
Problema 2:encontrar a distância entre todo par de vértices deG.
Hipótese:
Hipótese:Não há circuito de comprimento negativo emG.
Algoritmo de Floyd-Warshall:programação dinâmica
Propriedades
P: caminho mais curto desat Subestrutura ótima:
SubestruturaSubcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emG dev1avk. Para todo 1≤i ≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Vamos identificarV = [n] ={1,2, . . . ,n}.
Parak ∈[n], sejaPum caminho mais curto desat cujos vértices internos estão todos em[k].
Floyd-Warshall:Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
Análise de Algoritmos — 2º sem 2018 37 / 65
Propriedades
P: caminho mais curto desat Subestrutura ótima:
SubestruturaSubcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emGdev1avk. Para todo 1≤i≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Vamos identificarV = [n] ={1,2, . . . ,n}.
Parak ∈[n], sejaPum caminho mais curto desat cujos vértices internos estão todos em[k].
Floyd-Warshall:Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
Propriedades
P: caminho mais curto desat Subestrutura ótima:
SubestruturaSubcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emGdev1avk. Para todo 1≤i≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Vamos identificarV = [n] ={1,2, . . . ,n}.
Parak ∈[n], sejaPum caminho mais curto desat cujos vértices internos estão todos em[k].
Floyd-Warshall:Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
Análise de Algoritmos — 2º sem 2018 39 / 65
Propriedades
P: caminho mais curto desat Subestrutura ótima:
SubestruturaSubcaminhos deP são caminhos mais curtos.
Lema:DadosG ec, sejaP =hv1, . . . ,vkium caminho mais curto emGdev1avk. Para todo 1≤i≤j ≤k,
Pij:=hvi, . . . ,vjié um caminho mais curto devi avj.
Vamos identificarV = [n] ={1,2, . . . ,n}.
Parak ∈[n], sejaPum caminho mais curto desat cujos vértices internos estão todos em[k].
Floyd-Warshall:Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
Algoritmo de Floyd-Warshall
Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
SejaP um caminho mínimo dei aj emG com vértices intermediários em[k].
SeP não usak como vértice intermediário, entãoP é um caminho mínimo deiajemG entãocom vértices intermediários em[k−1]. senãoP =P0·P00onde
senãoP0é um caminho mínimo dei ak emG senãocom vértices intermediários em[k−1]e senãoP00é um caminho mínimo dek aj emG senãocom vértices intermediários em[k−1].
Análise de Algoritmos — 2º sem 2018 41 / 65
Algoritmo de Floyd-Warshall
Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
SejaP um caminho mínimo dei aj emG com vértices intermediários em[k].
SeP não usak como vértice intermediário, entãoP é um caminho mínimo deiajemG entãocom vértices intermediários em[k−1]. senãoP =P0·P00onde
senãoP0é um caminho mínimo dei ak emG senãocom vértices intermediários em[k−1]e senãoP00é um caminho mínimo dek aj emG senãocom vértices intermediários em[k−1].
Algoritmo de Floyd-Warshall
Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
SejaP um caminho mínimo dei aj emG com vértices intermediários em[k].
SeP não usak como vértice intermediário, entãoP é um caminho mínimo deiaj emG entãocom vértices intermediários em[k−1].
senãoP =P0·P00onde
senãoP0é um caminho mínimo dei ak emG senãocom vértices intermediários em[k−1]e senãoP00é um caminho mínimo dek aj emG senãocom vértices intermediários em[k−1].
Análise de Algoritmos — 2º sem 2018 43 / 65
Algoritmo de Floyd-Warshall
Usa caminhos mínimos
com vértices intermediários em[k−1]para obter caminhos mínimos com vértices intermediários em[k].
SejaP um caminho mínimo dei aj emG com vértices intermediários em[k].
SeP não usak como vértice intermediário, entãoP é um caminho mínimo deiaj emG entãocom vértices intermediários em[k−1].
senãoP=P0·P00onde
senãoP0é um caminho mínimo dei ak emG senãocom vértices intermediários em[k−1]e senãoP00é um caminho mínimo dek aj emG senãocom vértices intermediários em[k−1].
Recorrência
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k].
Dk[i,j]=
( cij sek =0
min{Dk−1[i,j],Dk−1[i,k]+Dk−1[k,j]} sek ≥1
A matrixDntem a resposta aoProblema 2.
Algoritmo de Floyd-Warshall:calculaDn pela recorrência.
Análise de Algoritmos — 2º sem 2018 45 / 65
Recorrência
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k].
Dk[i,j]=
( cij sek =0
min{Dk−1[i,j],Dk−1[i,k]+Dk−1[k,j]} sek ≥1
A matrixDntem a resposta aoProblema 2.
Algoritmo de Floyd-Warshall:calculaDn pela recorrência.
Recorrência
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k].
Dk[i,j]=
( cij sek =0
min{Dk−1[i,j],Dk−1[i,k]+Dk−1[k,j]} sek ≥1
A matrixDntem a resposta aoProblema 2.
Algoritmo de Floyd-Warshall:calculaDn pela recorrência.
Análise de Algoritmos — 2º sem 2018 47 / 65
Recorrência
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k].
Dk[i,j]=
( cij sek =0
min{Dk−1[i,j],Dk−1[i,k]+Dk−1[k,j]} sek ≥1
A matrixDntem a resposta aoProblema 2.
Algoritmo de Floyd-Warshall:calculaDn pela recorrência.
Algoritmo de Floyd-Warshall
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k−1].
FLOYD-WARSHALL-(G,c) 1 n← |V(G)|
2 D0←c
3 parak ←1atén faça 4 parai←1atén faça 5 paraj←1aténfaça
6 Dk[i,j] =min{Dk−1[i,j],Dk−1[i,k] +Dk−1[k,j]} 7 devolvaDn
Consumo de tempo:Ê(n3) Dijkstra:O(nmlgn)
Dijkstra:O(n(m+nlgn))com Fibonacci heap.
Análise de Algoritmos — 2º sem 2018 49 / 65
Algoritmo de Floyd-Warshall
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k−1].
FLOYD-WARSHALL-(G,c) 1 n← |V(G)|
2 D0←c
3 parak ←1atén faça 4 parai←1atén faça 5 paraj←1aténfaça
6 Dk[i,j] =min{Dk−1[i,j],Dk−1[i,k] +Dk−1[k,j]} 7 devolvaDn
Consumo de tempo:Ê(n3)
Dijkstra:O(nmlgn)
Dijkstra:O(n(m+nlgn))com Fibonacci heap.
Algoritmo de Floyd-Warshall
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k−1].
FLOYD-WARSHALL-(G,c) 1 n← |V(G)|
2 D0←c
3 parak ←1atén faça 4 parai←1atén faça 5 paraj←1aténfaça
6 Dk[i,j] =min{Dk−1[i,j],Dk−1[i,k] +Dk−1[k,j]} 7 devolvaDn
Consumo de tempo:Ê(n3) Dijkstra:O(nmlgn)
Dijkstra:O(n(m+nlgn))com Fibonacci heap.
Análise de Algoritmos — 2º sem 2018 51 / 65
Algoritmo de Floyd-Warshall
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k−1].
FLOYD-WARSHALL-(G,c) 1 n← |V(G)|
2 D0←c
3 parak ←1atén faça 4 parai←1atén faça 5 paraj←1aténfaça
6 Dk[i,j] =min{Dk−1[i,j],Dk−1[i,k] +Dk−1[k,j]} 7 devolvaDn
E os caminhos mais curtos?
Guarde informação durante o processo acima para obter um caminho mais curto entre quaisquer dois vértices deG.
Algoritmo de Floyd-Warshall
Dk[i,j]: comprimento de um caminho mínimo dei aj emG Dk[i,j]:com vértices intermediários em[k−1].
FLOYD-WARSHALL-(G,c) 1 n← |V(G)|
2 D0←c
3 parak ←1atén faça 4 parai←1atén faça 5 paraj←1aténfaça
6 Dk[i,j] =min{Dk−1[i,j],Dk−1[i,k] +Dk−1[k,j]} 7 devolvaDn
E os caminhos mais curtos?
Guarde informação durante o processo acima para obter um caminho mais curto entre quaisquer dois vértices deG.
Análise de Algoritmos — 2º sem 2018 53 / 65
Simulação
D0=
0 3 8 ∞ −4
∞ 0 ∞ 1 7
∞ 4 0 ∞ ∞
2 ∞ −5 0 ∞
∞ ∞ ∞ 6 0
D1=
0 3 8 ∞ −4
∞ 0 ∞ 1 7
∞ 4 0 ∞ ∞ 2 5 −5 0 −2
∞ ∞ ∞ 6 0
Simulação
D0=
0 3 8 ∞ −4
∞ 0 ∞ 1 7
∞ 4 0 ∞ ∞
2 ∞ −5 0 ∞
∞ ∞ ∞ 6 0
D1=
0 3 8 ∞ −4
∞ 0 ∞ 1 7
∞ 4 0 ∞ ∞ 2 5 −5 0 −2
∞ ∞ ∞ 6 0
Análise de Algoritmos — 2º sem 2018 55 / 65
Simulação
D1=
0 3 8 ∞ −4
∞ 0 ∞ 1 7
∞ 4 0 ∞ ∞ 2 5 −5 0 −2
∞ ∞ ∞ 6 0
D2=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 5 −5 0 −2
∞ ∞ ∞ 6 0
Simulação
D1=
0 3 8 ∞ −4
∞ 0 ∞ 1 7
∞ 4 0 ∞ ∞ 2 5 −5 0 −2
∞ ∞ ∞ 6 0
D2=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 5 −5 0 −2
∞ ∞ ∞ 6 0
Análise de Algoritmos — 2º sem 2018 57 / 65
Simulação
D2=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 5 −5 0 −2
∞ ∞ ∞ 6 0
D3=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 −1 −5 0 −2
∞ ∞ ∞ 6 0
Simulação
D2=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 5 −5 0 −2
∞ ∞ ∞ 6 0
D3=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 −1 −5 0 −2
∞ ∞ ∞ 6 0
Análise de Algoritmos — 2º sem 2018 59 / 65
Simulação
D3=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 −1 −5 0 −2
∞ ∞ ∞ 6 0
D4=
0 3 −1 4 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
Simulação
D3=
0 3 8 4 −4
∞ 0 ∞ 1 7
∞ 4 0 5 11 2 −1 −5 0 −2
∞ ∞ ∞ 6 0
D4=
0 3 −1 4 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
Análise de Algoritmos — 2º sem 2018 61 / 65
Simulação
D4=
0 3 −1 4 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
D5=
0 3 −3 2 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
Simulação
D4=
0 3 −1 4 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
D5=
0 3 −3 2 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
Análise de Algoritmos — 2º sem 2018 63 / 65
Simulação
Distâncias:
D5=
0 3 −3 2 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
Como obter os caminhos?
Exercício!
Simulação
Distâncias:
D5=
0 3 −3 2 −4 3 0 −4 1 −1
7 4 0 5 3
2 −1 −5 0 −2
8 5 1 6 0
Como obter os caminhos?
Exercício!
Análise de Algoritmos — 2º sem 2018 65 / 65