• Nenhum resultado encontrado

Caminhos mais curtos

N/A
N/A
Protected

Academic year: 2022

Share "Caminhos mais curtos"

Copied!
65
0
0

Texto

(1)

Caminhos mais curtos

CLRS Secs 24.3 e 25.2

Análise de Algoritmos — 2º sem 2018 1 / 65

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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.

(9)

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

(10)

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.

(11)

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

(12)

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.

(13)

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

(14)

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.

(15)

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

(16)

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?

(17)

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

(18)

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?

(19)

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

(20)

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)

(21)

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

(22)

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)

(23)

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

(24)

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)

(25)

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

(26)

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)

(27)

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

(28)

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.

(29)

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

(30)

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.

(31)

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

(32)

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.

(33)

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

(34)

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

(35)

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

(36)

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

(37)

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

(38)

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].

(39)

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

(40)

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].

(41)

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

(42)

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].

(43)

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

(44)

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].

(45)

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{Dk1[i,j],Dk1[i,k]+Dk1[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

(46)

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{Dk1[i,j],Dk1[i,k]+Dk1[k,j]} sek ≥1

A matrixDntem a resposta aoProblema 2.

Algoritmo de Floyd-Warshall:calculaDn pela recorrência.

(47)

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{Dk1[i,j],Dk1[i,k]+Dk1[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

(48)

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{Dk1[i,j],Dk1[i,k]+Dk1[k,j]} sek ≥1

A matrixDntem a resposta aoProblema 2.

Algoritmo de Floyd-Warshall:calculaDn pela recorrência.

(49)

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{Dk1[i,j],Dk1[i,k] +Dk1[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

(50)

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{Dk1[i,j],Dk1[i,k] +Dk1[k,j]} 7 devolvaDn

Consumo de tempo:Ê(n3)

Dijkstra:O(nmlgn)

Dijkstra:O(n(m+nlgn))com Fibonacci heap.

(51)

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{Dk1[i,j],Dk1[i,k] +Dk1[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

(52)

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{Dk1[i,j],Dk1[i,k] +Dk1[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.

(53)

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{Dk1[i,j],Dk1[i,k] +Dk1[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

(54)

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

















(55)

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

(56)

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

















(57)

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

(58)

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

















(59)

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

(60)

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

















(61)

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

(62)

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

















(63)

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

(64)

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!

(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!

Análise de Algoritmos — 2º sem 2018 65 / 65

Referências

Documentos relacionados

Existe a chamada manifestação subclínica da doença, onde o animal infectado não apresenta sinais clínicos evidentes, porém pode disseminar a bactéria, contaminando o ambiente

O pastor Felipe Silva de Oliveira da Terceira Igreja Batista em Jardim Bom Retiro (São Gonçalo/RJ), é convidado para apresentar uma reflexão bíblica baseada na

Distribution of Staphylococcus aureus isolated from bovine mastitis in Brazil, according to the number of virulence genes exhibited (luk, hla, hlb, sea, seb, sec, sed,

Nesse trabalho foi realizada uma análise de taxa média de bloqueio em conexões por algoritmos de caminhos mínimos: Algoritmo Genético e Algoritmo de Yen, buscando uma

O Fundo é denominado em EUR e tem como objectivo a obtenção de rendibilidades anuais positivas, superiores à EURIBOR a 3 meses em EUR acrescida de 1,5%,

Results obtained in this study allow us to infer there are differences in the evaluation of plantar pressure distributions in standing posture between the Baropodometer, SAPO,

O exercício profissional do Supervisor de Ensino deve mobilizar metodologias e instrumentos de participação na elaboração de políticas públicas, bem como na

Nesta área existem vários botões de funções. Ao seleccionar os diferentes botões executam-se as operações correspondentes. Página Principal: Visite a página principal da tmn.