42
1 Grafos: caminhos mínimos Parte 1 SCC0216 Modelagem Computacional em Grafos Thiago A. S. Pardo Maria Cristina F. Oliveira

Grafos: caminhos mínimos Parte 1

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Grafos: caminhos mínimos Parte 1

1

Grafos: caminhos mínimosParte 1

SCC0216 Modelagem Computacional em Grafos

Thiago A. S. PardoMaria Cristina F. Oliveira

Page 2: Grafos: caminhos mínimos Parte 1

2

O problema do menor caminho

Um motorista deseja encontrar o caminho mais curto possível entre duas cidades do Brasil

Caso ele receba um mapa rodoviário do Brasil, que apresenta a distância entre cada par de cidades adjacentes, como determinar uma rota mais curtaentre as cidades desejadas?

Uma maneira possível é enumerar todas as rotas possíveis que levam de uma cidade à outra, e então selecionar a mais curta

Page 3: Grafos: caminhos mínimos Parte 1

3

O problema do menor caminho

Menor caminho = caminho de menor custo = melhor caminho

Custo = distância ou qualquer outra métrica

Page 4: Grafos: caminhos mínimos Parte 1

4

Caminhos mínimos O problema do caminho mínimo consiste em determinar um

menor caminho entre um vértice de origem u e um vértice de destino v

Qual o menor caminho entre s e y?

6

5

u

3s

6

2 7

v

x y

4123

Page 5: Grafos: caminhos mínimos Parte 1

5

Caminhos mínimos

Possíveis caminhos

6

5

u

3s

6

2 7

v

x y

4123

0

5

3

11

9

Page 6: Grafos: caminhos mínimos Parte 1

6

Caminhos mínimos

Possíveis caminhos

6

5

u

3s

6

2 7

v

x y

412

3

0

5

3

11

9

Page 7: Grafos: caminhos mínimos Parte 1

7

Caminhos mínimos

Possíveis caminhos

6

5

u

3s

6

2 7

v

x y

4123

0

5

3

11

9

Page 8: Grafos: caminhos mínimos Parte 1

8

Caminho mínimo

Duas abordagens para caminho mínimo

Se grafo não valorado (assume-se que cada aresta tem peso 1), busca em largura é uma boa opção

Se grafo valorado, outros algoritmos são necessários

Page 9: Grafos: caminhos mínimos Parte 1

9

Caminho mínimo

Grafo dirigido G(V,A) com função peso w: A→ℜ que associa pesos às arestas

Peso (custo) do caminho p = <v0, v1, ..., vk>

∑=

−=k

iii vvwpw

11 ),()(

Page 10: Grafos: caminhos mínimos Parte 1

10

Caminho mínimo

Grafo dirigido G(V,A) com função peso w: A→ℜ que associa pesos às arestas

Peso (custo) do caminho p = <v0, v1, ..., vk>

Caminho de menor peso entre u e v:

∑=

−=k

iii vvwpw

11 ),()(

∞∃⇒=

ccvpuderotasevupwvu

p/}:)(min{),(δ

Page 11: Grafos: caminhos mínimos Parte 1

11

Caminho mínimo

Menor caminho entre os vértices u e vdefinido como qualquer rota p com um peso

w(p) = δ(u,v)

Atenção especial com ciclos e pesos negativos

Page 12: Grafos: caminhos mínimos Parte 1

12

Caminho mínimo

Qual o menor caminho entre s e v?

6

5

u

3s

6

2 7

v

x y

41-2

3

Page 13: Grafos: caminhos mínimos Parte 1

13

Camino mínimo

Se há um ciclo positivo no caminho, ele não faz parte do caminho mínimo

Por quê?

Page 14: Grafos: caminhos mínimos Parte 1

14

Camino mínimo

Se há um ciclo positivo no caminho, ele não faz parte do caminho mínimo

Por quê? 6

5

u

3s

6

2 7

v

x y

412

3

Page 15: Grafos: caminhos mínimos Parte 1

15

Caminhos mínimos Conceitos

Parte-se do vértice inicial s, associando-se a cada vérticeum número d(v) que informa o valor (distância) do menorcaminho de s até v

Page 16: Grafos: caminhos mínimos Parte 1

16

Caminhos mínimos Conceitos

Por exemplo, na figura abaixo, quando chegamos aovértice v, d(v) será dado por min(d(u)+6, d(x)+4, d(y)+7)

6

5

u

3s

6

2 7

v

x y

4123

Page 17: Grafos: caminhos mínimos Parte 1

17

Caminhos mínimos

Conceitos

Relaxamento de arestas Faz-se uma estimativa pessimista para o valor do caminho

mínimo até cada vértice: d(v) = ∞ O processo de ‘relaxar’ uma aresta consiste em verificar se é

possível melhorar esta estimativa pessimista, passando-se pelo vértice u

u v

d(u)=5

2

d(v)=9

u v

d(u)=5

2

d(v)=7relaxamento

Page 18: Grafos: caminhos mínimos Parte 1

18

Caminhos mínimos

Conceitos

Relaxamento de arestas Faz-se uma estimativa pessimista para o caminho mínimo até

cada vértice: d(v) = ∞ O processo de relaxar uma aresta consiste em verificar se é

possível melhorar esta estimativa, passando-se pelo vértice u

u v

d(u)=5

2

d(v)=6

u v

d(u)=5

2

d(v)=6não fazrelaxamento

Page 19: Grafos: caminhos mínimos Parte 1

19

Caminhos mínimos

Sub-rotina para relaxamento de arestas

relax(u, v, w) // (u,v) é a aresta, w é o seu pesoiníciose d[v] > d[u] + w(u,v) então

d[v] = d[u] + w(u,v)antecessor[v]=u

fim

Page 20: Grafos: caminhos mínimos Parte 1

20

Caminhos mínimos

Sub-rotina para relaxamento de arestas

relax(u, v, w) // (u,v) é a aresta, w é o seu pesoiníciose d[v] > d[u] + w(u,v) então

d[v] = d[u] + w(u,v)antecessor[v]=u

fimu v

d(u)=5

2

d(v)=9

u v

d(u)=5

2

d(v)=7relaxamento

Page 21: Grafos: caminhos mínimos Parte 1

21

Caminhos mínimos

Sub-rotina para relaxamento de arestas

relax(u, v, w) // (u,v) é a aresta, w é o seu pesoiníciose d[v] > d[u] + w(u,v) então

d[v] = d[u] + w(u,v)antecessor[v]=u

fimu v

d(u)=5

2

d(v)=6

u v

d(u)=5

2

d(v)=6não fazrelaxamento

Page 22: Grafos: caminhos mínimos Parte 1

22

Caminho mínimo

Várias possibilidades de caminhos

Caminhos mais curtos de origem única

Caminhos mais curtos de destino único

Caminho mais curto de par único

Caminhos mais curtos de todos os pares

Page 23: Grafos: caminhos mínimos Parte 1

23

Algoritmo de Dijkstra

Características Caminho mais curto de origem única Admite ciclos Só admite pesos positivos

Método Inicia-se com estimativas pessimistas para cada vértice A cada passo, adiciona um vértice u de menor estimativa

de caminho mínimo a um conjunto S S contém os vértices com caminhos mínimos desde a origem

já definidos Relaxam-se as arestas adjacentes a u

Page 24: Grafos: caminhos mínimos Parte 1

24

Algoritmo de Dijkstra

Exemplo (a partir de s)

s

t x

y z

10

1

3 695

2

7

2 4

Page 25: Grafos: caminhos mínimos Parte 1

25

Algoritmo de Dijkstra

Exemplo (a partir de s) Estimativas pessimistas S = Ø

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=∞

d(s)=0

d(x)=∞

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

Page 26: Grafos: caminhos mínimos Parte 1

26

Algoritmo de Dijkstra

Exemplo (a partir de s) Adiciona s a S S={s}

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=∞10

d(s)=0

d(x)=∞

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

Page 27: Grafos: caminhos mínimos Parte 1

27

Algoritmo de Dijkstra

Exemplo (a partir de s) Adiciona y a S S={s,y}

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=108

d(s)=0

d(x)=∞14

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

Page 28: Grafos: caminhos mínimos Parte 1

28

Algoritmo de Dijkstra

Exemplo (a partir de s) Adiciona z a S S={s,y,z}

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=8

d(s)=0

d(x)=1413

d(z)=7d(y)=5

Page 29: Grafos: caminhos mínimos Parte 1

29

Algoritmo de Dijkstra

Exemplo (a partir de s) Adiciona t a S S={s,y,z,t}

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=8

d(s)=0

d(x)=139

d(z)=7d(y)=5

Page 30: Grafos: caminhos mínimos Parte 1

30

Algoritmo de Dijkstra

Exemplo (a partir de s) Adiciona x a S S={s,y,z,t,x}

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=8

d(s)=0

d(x)=9

d(z)=7d(y)=5

Page 31: Grafos: caminhos mínimos Parte 1

31

Algoritmo de Dijkstra

Exemplo (a partir de s) S={s,y,z,t,x}

s

t x

y z

10

1

3 695

2

7

2 4

d(t)=8

d(s)=0

d(x)=9

d(z)=7d(y)=5

Page 32: Grafos: caminhos mínimos Parte 1

32

Algoritmo de Dijkstra

Por que funciona? Solução ótima?

Page 33: Grafos: caminhos mínimos Parte 1

33

Algoritmo de Dijkstra

Por que funciona? Solução ótima?

Estratégia gulosa

Solução ótima, pois sempre busca pelo vértice mais leve

Page 34: Grafos: caminhos mínimos Parte 1

Exercícios

34

Page 35: Grafos: caminhos mínimos Parte 1

35

Exercício

Calcule os caminhos mínimos para o grafo abaixo a partir do vértice 0 aplicando o algoritmo de Dijkstra

Page 36: Grafos: caminhos mínimos Parte 1

36

Exercício

Calcule os caminhos mínimos para o grafo abaixo a partir do vértice 1 aplicando o algoritmo de Dijkstra

5

1 2

43

1

10

12 8

010

Page 37: Grafos: caminhos mínimos Parte 1

37

Algoritmo de Dijkstra

Implementação do algoritmo de Dijkstra

Insere os vértices em uma fila de prioridades, organizada em função da atual estimativa do custo do caminho mínimo

Page 38: Grafos: caminhos mínimos Parte 1

38

Algoritmo de DijkstraDIJKSTRA(G, w, s)

início//inicializa variáveispara cada vértice v faça

d[v]= ∞antecessor[v]= -1

d[s]= 0S= Øcria fila de prioridade F com vértices do grafo//insere vértice u em S e faz relaxamento a partir das arestas adjacentesenquanto F ≠ Ø faça

u= retirar vértice de FS= S + {u}para cada vértice v adjacente a u faça

relax(u,v,w) //atualizando fila de prioridade, se necessáriofim

Page 39: Grafos: caminhos mínimos Parte 1

39

Algoritmo de Dijkstra

Complexidade de tempo (se fila de prioridade bem implementada sobre heap) em função da somatória de: O(|V|) para inicializar variáveis O(|V| log|V|) para criar fila de prioridade sobre heap O(|V|) para processar todos os vértices e, para cada um,

atualizar a fila na ordem de O(log|V|) O(|V| log|V|), portanto

O(|A|) para processar todas as arestas e, para cada relaxamento, atualizar a fila na ordem de O(log|V|) O(|A| log|V|), portanto

O(|A| log|V|), no pior caso, considerando que |A|>|V|

Page 40: Grafos: caminhos mínimos Parte 1

40

Questão

Como lidar com os demais casos abaixo?

Caminhos mais curtos de origem única ok

Caminhos mais curtos de destino único?

Caminho mais curto de par único?

Caminhos mais curtos de todos os pares?

Page 41: Grafos: caminhos mínimos Parte 1

41

Exercício

Propor algoritmo de caminho mínimo para grafo com ciclo e peso negativo

6

5

u

3s

6

2 7

v

x y

41-23

Page 42: Grafos: caminhos mínimos Parte 1

Questão

Para pensar

Como a busca pelo caminho mínimo pode se beneficiar da ordenação topológica?

42