• Nenhum resultado encontrado

Caminhos mais curtos

N/A
N/A
Protected

Academic year: 2022

Share "Caminhos mais curtos"

Copied!
58
0
0

Texto

(1)

Caminhos mais curtos

CLRS Secs 24.3 e 25.2

Análise de Algoritmos 2º sem 2017 1 / 58

(2)

Caminhos mais curtos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu a v é o comprimento de um caminho deu av de comprimento mínimo.

Problema 1: Dados G,c e um vértices deG, encontrar a distância des a cada vértice de G. Problema 2: Dados G ec,

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): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho deu av de comprimento mínimo.

Problema 1: Dados G,c e um vértices deG, encontrar a distância des a cada vértice de G. Problema 2: Dados G ec,

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 2017 3 / 58

(4)

Caminhos mais curtos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho deu av de comprimento mínimo.

Problema 1: Dados G,c e um vértices deG, encontrar a distância des a cada vértice de G.

Problema 2: Dados G ec,

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): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho deu av de comprimento mínimo.

Problema 1: Dados G,c e um vértices deG, encontrar a distância des a cada vértice de G. Problema 2: Dados G ec,

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 2017 5 / 58

(6)

Caminhos mais curtos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho deu av de comprimento mínimo.

Problema 1: Dados G,c e um vértices deG, encontrar a distância des a cada vértice de G. Problema 2: Dados G ec,

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): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho deu av de comprimento mínimo.

Problema 1: Dados G,c e um vértices deG, encontrar a distância des a cada vértice de G. Problema 2: Dados G ec,

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 2017 7 / 58

(8)

Circuitos negativos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho entreu e v de comprimento mínimo.

Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode car mal-denida. Poderíamos dar voltas num circuito negativo,

cada vez obtendo um caminho de comprimento menor. Assim denimos a distânciaδ(u,v) como

−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu av c.c.

(9)

Circuitos negativos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho entreu e v de comprimento mínimo.

Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode car mal-denida.

Poderíamos dar voltas num circuito negativo,

cada vez obtendo um caminho de comprimento menor. Assim denimos a distânciaδ(u,v) como

−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu av c.c.

Análise de Algoritmos 2º sem 2017 9 / 58

(10)

Circuitos negativos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho entreu e v de comprimento mínimo.

Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode car mal-denida.

Poderíamos dar voltas num circuito negativo,

cada vez obtendo um caminho de comprimento menor.

Assim denimos a distânciaδ(u,v) como

−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu av c.c.

(11)

Circuitos negativos

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Para vérticesu e v, adistância deu av é o comprimento de um caminho entreu e v de comprimento mínimo.

Quando há um circuito de comprimento negativo no grafo, a distância entre certos vértices pode car mal-denida.

Poderíamos dar voltas num circuito negativo,

cada vez obtendo um caminho de comprimento menor.

Assim denimos a distânciaδ(u,v) como

−∞, caso exista circuito negativo alcançavel deu, e o comprimento de um caminho mais curto deu av c.c.

Análise de Algoritmos 2º sem 2017 11 / 58

(12)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G e c, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj.

Corolário: ParaG e c, se o último arco de um caminho mais curto des a t é o arco ut, então δ(s,t) =δ(s,u) +c(ut).

Lema: ParaG,c es,

Lema: δ(s,v)≤δ(s,u) +c(uv) para todos os arcos uv.

(13)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G ec, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj.

Corolário: ParaG e c, se o último arco de um caminho mais curto des a t é o arco ut, então δ(s,t) =δ(s,u) +c(ut).

Lema: ParaG,c es,

Lema: δ(s,v)≤δ(s,u) +c(uv) para todos os arcos uv.

Análise de Algoritmos 2º sem 2017 13 / 58

(14)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G ec, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj.

Corolário: ParaG e c, se o último arco de um caminho mais curto des a t é o arco ut, então δ(s,t) =δ(s,u) +c(ut).

Lema: ParaG,c es,

Lema: δ(s,v)≤δ(s,u) +c(uv) para todos os arcos uv.

(15)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G ec, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj.

Corolário: ParaG e c, se o último arco de um caminho mais curto des a t é o arco ut, então δ(s,t) =δ(s,u) +c(ut).

Lema: ParaG,c es,

Lema: δ(s,v)≤δ(s,u) +c(uv) para todos os arcos uv.

Análise de Algoritmos 2º sem 2017 15 / 58

(16)

Algoritmo de Dijkstra

π: representa os caminhos mínimos atés d: guarda estimativa a distância des ao vértice

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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 6∈Q Invariantes: u.d ≥δ(s,u)se u ∈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 des ao vértice

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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 des au u.v: cujos vértices internos estão fora de Q

Invariantes: u.d =δ(s,u) seu 6∈Q

Invariantes: u.d ≥δ(s,u)se u ∈Q

Onde usamos que não há arestas de comprimento negativo?

Análise de Algoritmos 2º sem 2017 17 / 58

(18)

Algoritmo de Dijkstra

π: representa os caminhos mínimos atés d: guarda estimativa a distância des ao vértice

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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)se u 6∈Q Invariantes: u.d ≥δ(s,u)se u ∈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 des ao vértice

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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)se u 6∈Q Invariantes: u.d ≥δ(s,u)se u ∈Q

Onde usamos que não há arestas de comprimento negativo?

Análise de Algoritmos 2º sem 2017 19 / 58

(20)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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.

Se Q for uma lista simples: Linha 3 eEXTRACT-MIN:O(n)

Consumo de tempo do Dijkstra: O(n2)

(21)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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.

Se Q for uma lista simples:

Linha 3 eEXTRACT-MIN:O(n)

Consumo de tempo do Dijkstra: O(n2)

Análise de Algoritmos 2º sem 2017 21 / 58

(22)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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.

Se Q for uma lista simples:

Linha 3 eEXTRACT-MIN:O(n)

Consumo de tempo do Dijkstra: O(n2)

(23)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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(m lg n)

Consumo de tempo com Fibonacci heap: O(m+n lg n)

Análise de Algoritmos 2º sem 2017 23 / 58

(24)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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.

Se Q for implementada com um heap:

Inicialização: O(n) EXTRACT-MINe DECREASE-KEY:O(lg n) DECREASE-KEY:linha 8

Consumo de tempo do Dijkstra: O(m lg n)

Consumo de tempo com Fibonacci heap: O(m+n lg n)

(25)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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(m lg n)

Consumo de tempo com Fibonacci heap: O(m+n lg n)

Análise de Algoritmos 2º sem 2017 25 / 58

(26)

Algoritmo de Dijkstra

Complexidade:

DIJKSTRA(G,c,s)

1 para v ∈V(G)faça v.d ← ∞ v.π←nil 2 s.d ←0

3 Q ←V(G) la de prioridade: chave devév.d

4 enquanto Q 6=∅ faça 5 u←EXTRACT-MIN(Q) 6 para cadav ∈adj(u) faça 7 se v ∈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(m lg n)

Consumo de tempo com Fibonacci heap: O(m+n lg n)

(27)

Problema 2

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Funçãoc que atribui um comprimentoc(e) para cada e ∈E.

Problema 2: Dados G ec,

encontrar a distância entre todo par de vértices deG.

Hipótese:

Não há circuito de comprimento negativo emG.

Algoritmo de Floyd-Warshall: programação dinâmica

Análise de Algoritmos 2º sem 2017 27 / 58

(28)

Problema 2

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Funçãoc que atribui um comprimentoc(e) para cada e ∈E.

Problema 2: Dados G ec,

encontrar a distância entre todo par de vértices deG.

Hipótese:

Não há circuito de comprimento negativo emG.

Algoritmo de Floyd-Warshall: programação dinâmica

(29)

Problema 2

Dados:

G = (V,E): grafo dirigido

Funçãoc que atribui um comprimento c(e) para cada e ∈E.

Funçãoc que atribui um comprimentoc(e) para cada e ∈E.

Problema 2: Dados G ec,

encontrar a distância entre todo par de vértices deG.

Hipótese:

Não há circuito de comprimento negativo emG.

Algoritmo de Floyd-Warshall: programação dinâmica

Análise de Algoritmos 2º sem 2017 29 / 58

(30)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G e c, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj. Vamos identicar V = [n] ={1,2, . . . ,n}.

Para k∈[n], seja P um caminho mais curto des at 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].

(31)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G ec, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj.

Vamos identicar V = [n] ={1,2, . . . ,n}.

Para k∈[n], seja P um caminho mais curto des at 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 2017 31 / 58

(32)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G ec, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj. Vamos identicar V = [n] ={1,2, . . . ,n}.

Para k∈[n], seja P um caminho mais curto des at 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].

(33)

Propriedades

P: caminho mais curto de s at Subestrutura ótima:

Subcaminhos deP são caminhos mais curtos.

Lema: Dados G ec, seja P =hv1, . . . ,vki um caminho mais curto emG de v1 a vk. Para todo 1≤i ≤j ≤k, Pij :=hvi, . . . ,vji é um caminho mais curto de vi a vj. Vamos identicar V = [n] ={1,2, . . . ,n}.

Para k∈[n], seja P um caminho mais curto des at 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 2017 33 / 58

(34)

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 de i a j em G com vértices intermediários em[k].

SeP não usa k como vértice intermediário, então P é um caminho mínimo de i a j emG então com vértices intermediários em[k−1]. senãoP =P0·P00 onde

senãoP0 é um caminho mínimo de i a k em G senãocom vértices intermediários em [k−1]e senãoP00 é um caminho mínimo de k a j em G senãocom vértices intermediários em [k−1].

(35)

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 de i a j em G

com vértices intermediários em[k].

SeP não usa k como vértice intermediário, então P é um caminho mínimo de i a j emG então com vértices intermediários em[k−1]. senãoP =P0·P00 onde

senãoP0 é um caminho mínimo de i a k em G senãocom vértices intermediários em [k−1]e senãoP00 é um caminho mínimo de k a j em G senãocom vértices intermediários em [k−1].

Análise de Algoritmos 2º sem 2017 35 / 58

(36)

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 de i a j em G

com vértices intermediários em[k].

SeP não usa k como vértice intermediário, então P é um caminho mínimo de i a j emG então com vértices intermediários em[k−1].

senãoP =P0·P00 onde

senãoP0 é um caminho mínimo de i a k em G senãocom vértices intermediários em [k−1]e senãoP00 é um caminho mínimo de k a j em G senãocom vértices intermediários em [k−1].

(37)

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 de i a j em G

com vértices intermediários em[k].

SeP não usa k como vértice intermediário, então P é um caminho mínimo de i a j emG então com vértices intermediários em[k−1]. senãoP =P0·P00 onde

senãoP0 é um caminho mínimo de i a k em G senãocom vértices intermediários em[k−1]e senãoP00 é um caminho mínimo de k a j em G senãocom vértices intermediários em[k−1].

Análise de Algoritmos 2º sem 2017 37 / 58

(38)

Recorrência

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k].

Dk[i][j]=

cij se k=0

min{Dk1[i][j],Dk1[i][k]+Dk1[k][j]} se k≥1

A matrix Dn tem a resposta ao Problema 2.

Algoritmo de Floyd-Warshall: calcula Dn pela recorrência.

(39)

Recorrência

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k].

Dk[i][j]=

cij se k =0

min{Dk1[i][j],Dk1[i][k]+Dk1[k][j]} se k ≥1

A matrix Dn tem a resposta ao Problema 2.

Algoritmo de Floyd-Warshall: calcula Dn pela recorrência.

Análise de Algoritmos 2º sem 2017 39 / 58

(40)

Recorrência

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k].

Dk[i][j]=

cij se k =0

min{Dk1[i][j],Dk1[i][k]+Dk1[k][j]} se k ≥1

A matrix Dn tem a resposta ao Problema 2.

Algoritmo de Floyd-Warshall: calcula Dn pela recorrência.

(41)

Recorrência

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k].

Dk[i][j]=

cij se k =0

min{Dk1[i][j],Dk1[i][k]+Dk1[k][j]} se k ≥1

A matrix Dn tem a resposta ao Problema 2.

Algoritmo de Floyd-Warshall: calcula Dnpela recorrência.

Análise de Algoritmos 2º sem 2017 41 / 58

(42)

Algoritmo de Floyd-Warshall

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k−1].

FLOYD-WARSHALL-(G,c) 1 n← |V(G)|

2 D0←c

3 para k←1 até n faça 4 para i ←1 até n faça 5 para j ←1 até n faça

6 Dk[i][j] =min{Dk1[i][j],Dk1[i][k] +Dk1[k][j]}

7 devolva Dn

Consumo de tempo: Θ(n3) Dijkstra: O(nm lg n)

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

(43)

Algoritmo de Floyd-Warshall

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k−1].

FLOYD-WARSHALL-(G,c) 1 n← |V(G)|

2 D0←c

3 para k←1 até n faça 4 para i ←1 até n faça 5 para j ←1 até n faça

6 Dk[i][j] =min{Dk1[i][j],Dk1[i][k] +Dk1[k][j]}

7 devolva Dn

Consumo de tempo: Θ(n3)

Dijkstra: O(nm lg n)

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

Análise de Algoritmos 2º sem 2017 43 / 58

(44)

Algoritmo de Floyd-Warshall

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k−1].

FLOYD-WARSHALL-(G,c) 1 n← |V(G)|

2 D0←c

3 para k←1 até n faça 4 para i ←1 até n faça 5 para j ←1 até n faça

6 Dk[i][j] =min{Dk1[i][j],Dk1[i][k] +Dk1[k][j]}

7 devolva Dn

Consumo de tempo: Θ(n3) Dijkstra: O(nm lg n)

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

(45)

Algoritmo de Floyd-Warshall

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k−1].

FLOYD-WARSHALL-(G,c) 1 n← |V(G)|

2 D0←c

3 para k←1 até n faça 4 para i ←1 até n faça 5 para j ←1 até n faça

6 Dk[i][j] =min{Dk1[i][j],Dk1[i][k] +Dk1[k][j]}

7 devolva Dn

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 2017 45 / 58

(46)

Algoritmo de Floyd-Warshall

Dk[i][j]: comprimento de um caminho mínimo de i a j emG Dk[i][j]: com vértices intermediários em [k−1].

FLOYD-WARSHALL-(G,c) 1 n← |V(G)|

2 D0←c

3 para k←1 até n faça 4 para i ←1 até n faça 5 para j ←1 até n faça

6 Dk[i][j] =min{Dk1[i][j],Dk1[i][k] +Dk1[k][j]}

7 devolva Dn

E os caminhos mais curtos?

Guarde informação durante o processo acima para obter um caminho mais curto entre quaisquer dois vértices deG.

(47)

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 2017 47 / 58

(48)

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

(49)

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 2017 49 / 58

(50)

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

(51)

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 2017 51 / 58

(52)

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

(53)

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 2017 53 / 58

(54)

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

(55)

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 2017 55 / 58

(56)

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

(57)

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 2017 57 / 58

(58)

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!

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

III - COTA 20% (Grupo C3) - Lista dos(as) candidatos(as) suplentes em ordem decrescente de nota, para as vagas ofertadas, de acordo com o item 5.1.1, Inciso III, do Edital

São discutidos os conhecimentos disponíveis em termos de imagem funcional pelo método na esquizofrenia, transtornos ansiosos e do humor, nas demências e nos transtornos de

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,

Base- ado neste contexto, o foco desse trabalho ´e investigar diferentes t´ecnicas para gerac¸˜ao procedural de n´ıveis (fases) e identificar qual delas ´e preferida pelos

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.

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,