algoritmos em grafos n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Algoritmos em Grafos PowerPoint Presentation
Download Presentation
Algoritmos em Grafos

Loading in 2 Seconds...

play fullscreen
1 / 26

Algoritmos em Grafos - PowerPoint PPT Presentation


  • 94 Views
  • Uploaded on

Algoritmos em Grafos. Celso C. Ribeiro Caroline T. Rocha. PARTE 2: CAMINHOS MAIS CURTOS. Caminhos mais Curtos. Dados: grafo G=(V,A) orientado e distância c ij associada ao arco ( i , j )  A. Problema: Obter o caminho mais curto entre dois nós s e t.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Algoritmos em Grafos' - alain


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
algoritmos em grafos

Algoritmos em Grafos

Celso C. Ribeiro

Caroline T. Rocha

slide2
PARTE 2: CAMINHOS MAIS CURTOS

Algoritmos em Grafos

caminhos mais curtos
Caminhos mais Curtos
  • Dados: grafo G=(V,A) orientado e

distância cij associada ao arco (i,j)  A.

Problema: Obter o caminho mais curto entre dois nós s e t.

  • O comprimento de um caminho é igual à soma dos comprimentos (distâncias) dos arcos que formam o caminho.

A “distância” ou “comprimento” de um arco pode ter diversas interpretações dependendo da aplicação: custos, distâncias, consumo de combustível, etc.

Exemplo 1: Dado um mapa rodoviário, determinar a rota mais curta de uma cidade a outra.

(rota mais rápida,

rota com menor consumo de combustível, ...)

Algoritmos em Grafos

caminhos mais curtos1

B

E

H

6

4

4

2

4

4

8

F

I

5

5

2

5

K

A

C

4

2

4

7

4

2

4

G

J

D

Caminhos mais Curtos

Exemplo 2: Construção de uma estrada entre duas cidades A e K. O grafo abaixo representa os diversos trechos possíveis e o custo de construção de cada um. Determinar o trajeto ótimo cujo custo de construção seja mínimo (corresponde a achar o caminho mais curto de A a K em relação a estes custos).

Solução: A – D – G – I – K

custo = 7 + 2 + 2 + 5 = 16

Algoritmos em Grafos

caminhos mais curtos2

k

w

i

j

Caminhos mais Curtos
  • Condição de existência:

Caminho de i a j contendo um circuito w:

Comprimento do caminho =

comprimento (i  k) +

comprimento (w) +

comprimento (k  j)

Qual é o comprimento do caminho mais curto de i a j se o comprimento do circuito w é negativo?

Algoritmos em Grafos

caminhos mais curtos3

A solução ótima (caminho mais curto) sempre será um caminho elementar (sem circuito).

Caminhos mais Curtos

Condição de existência:

não há circuitos de comprimento negativo.

Algoritmos em Grafos

caminhos mais curtos4
Caminhos mais Curtos
  • Caminho mais curto:

- De um nó a outro

- De um nó a todos os demais

- Entre todos os pares de nós de um grafo

Algoritmos em Grafos

caminhos mais curtos5

Algoritmo de Moore-Dijkstra (1957-1959)

*(i) = comprimento do caminho mais curto do nó 1 ao nó i

Em especial, *(1)=0 (distâncias positivas).

    • Algoritmo com n-1 iterações
    • No início de cada iteração, o conjunto V de nós está particionado em dois subconjuntos S e S, com o nó 1 em S.
Caminhos mais Curtos

Caminho mais curto do nó 1 a cada nó do grafo G=(V,A)

Hipótese: todas as distâncias cij são positivas:

cij ≥ 0, (i,j)  A

Algoritmos em Grafos

caminhos mais curtos6

cai

a

1

b

c

i

cbi

cci

Caminhos mais Curtos
  • Cada nó i  V possui um rótulo (i ), que verifica a seguinte propriedade:
  • dá o valor do caminho mais curto de 1 a i sob a restrição de que todos os nós utilizados (exceto o próprio i ) pertençam a S.

Algoritmos em Grafos

caminhos mais curtos7
Caminhos mais Curtos

Teorema: Seja o nó tal que .

Então , isto é, o comprimento do caminho mais curto do nó 1 ao nó j é igual a .

Demonstração:

  • Por construção, certamente existe um caminho de 1 até j com comprimento (j).
  • Suponhamos que exista outro caminho de 1 a j de comprimento menor do que (j).
  • Dividamos este caminho em duas partes:

- P1 é a parte inicial, do nó 1 ao nó L, onde L é o primeiro nó de encontrado

- P2 é a parte final, do nó L ao nó j

Algoritmos em Grafos

caminhos mais curtos8
Caminhos mais Curtos
  • comprimento de P1 ≥ (L) ≥ (j)

comprimento de P2 ≥ 0

Logo, o comprimento de P1 + P2 ≥ (j).

Algoritmos em Grafos

caminhos mais curtos9

Inicializar S  {2,3,...,n},

S  {1},

(1) 0,

(j) c1j se j1+

+ caso contrário

EnquantoS  faça

Selecionar jS tal que (j)= miniS{(i)}

S  S – {j}

Para iS e ij+faça

(i)  min{(i), (j)+cji}

fim_enquanto

Caminhos mais Curtos

Algoritmo de Moore-Dijkstra

O algoritmo constrói progressivamente o conjunto dos nós mais próximos de 1.

 Construção de uma arborescência com raiz em 1 que define os

caminhos mais curtos do nó 1 a cada nó do grafo.

Algoritmos em Grafos

caminhos mais curtos10

S = {1}

S = {2,3,4,5,6}

1

1

3

3

5

4

2

6

4

5

6

2

4

4

5

5

2

2

7

7

j = 3

S = {2,4,5,6}

1

1

2

2

5

5

3

3

*(1) = 0

1

1

7

7

*(3) = 1

Caminhos mais Curtos

Exemplo:

(1) = 0

(2) = 7

(3) = 1

(4) = (5) = (6) = +

ITERAÇÃO 1

(2) = min{7,

1+5} = 6

(5) = min{,

1+2} = 3

(6) = min{,

1+7} = 8

Algoritmos em Grafos

caminhos mais curtos11

4

5

*(5) = 3

2

1

1

7

*(1) = 0

1

2

5

3

1

7

3

3

6

4

6

2

5

2

5

4

*(3) = 1

4

5

*(2) = 5

*(5) = 3

j = 2

S = {4,6}

j = 5

S = {2,4,6}

2

7

*(1) = 0

1

2

5

3

1

7

*(3) = 1

Caminhos mais Curtos

ITERAÇÃO 2

(2) = min{6,

3+2} = 5

(4) = min{,

3+5} = 8

ITERAÇÃO 3

(4) = min{8,

5+4} = 8

(6) = min{,

5+1} = 6

Algoritmos em Grafos

caminhos mais curtos12

4

5

*(2) = 5

*(5) = 3

2

7

*(1) = 0

1

2

5

3

1

1

1

7

*(3) = 1

*(6) = 6

3

3

5

5

2

2

6

4

4

6

*(4) = 8

4

5

*(2) = 5

*(5) = 3

j = 4

S = { }

j = 6

S = {4}

2

7

*(1) = 0

1

2

5

3

1

7

*(3) = 1

*(6) = 6

Caminhos mais Curtos

ITERAÇÃO 4

(4) = 8

ITERAÇÃO 5

Algoritmos em Grafos

caminhos mais curtos13

3

3

4

1

2

5

2

1

3

2

1

3

4

3

2

5

6

7

4

Caminhos mais Curtos

Iteração

Início

0

4

2

0

4

2

5

4

0

4

2

5

4

7

7

0

4

2

5

4

7

7

0

4

2

5

4

7

7

0

4

2

5

4

7

7

0

4

2

5

4

7

7

Algoritmos em Grafos

caminhos mais curtos14

1

2

3

3

- 8

10

Caminhos mais Curtos
  • Número de operações (tempo): ~ n2 n-1 iterações, cada iteração busca o mínimo em uma lista com até n-1 elementos (vetor )
  • Caminho mais curto do nó 1:

 ao nó j

 a todos os nós

Mesma complexidade, mas critérios de parada diferentes.

  • Distâncias negativas:

2

Caminho mais curto de 1 a 3?

Resultado do algoritmo?

3

Por que?

Algoritmos em Grafos

caminhos mais curtos15
Caminhos mais Curtos

Extensão do algoritmo de Moore-Dijkstra para o caso com distâncias negativas (mas sem ciclos negativos)

Inicializar S  {2,3,...,n},

S  {1},

(1) 0,

(j) c1j se j1+

+ caso contrário

EnquantoS  faça

Selecionar jS tal que (j)= miniS{(i)}

S  S – {j}

Para ij+faça

Calcular *  (j)+ cji

Se* < (i) então

S  S  {i}

(i)  *

fim-se

fim-para

fim-enquanto

Algoritmos em Grafos

caminhos mais curtos16

3

3

4

1

2

-3

-2

1

3

2

1

3

4

S =

3

3

5

5

7

5

6

2

7

4

Caminhos mais Curtos

X

X

X

X

X

X

X

X

2 3 4 5 6 7

3

5

Iteração

Início

0

4

2

0

4

2

5

4

0

4

2

5

4

7

7

0

4

1

5

4

7

7

0

4

1

4

3

7

7

0

4

1

4

3

6

6

0

4

1

4

2

6

6

0

4

1

4

2

5

5

0

4

1

4

2

5

5

Algoritmos em Grafos

caminhos mais curtos17
Caminhos mais Curtos
  • Caminho mais curto:

- De um nó a outro

- De um nó a todos os demais

- Entre todos os pares de nós de um grafo

Algoritmos em Grafos

caminhos mais curtos18
Caminhos mais Curtos

Caminho mais curto entre todos os pares de nós de um grafo

  • Dados:

Grafo G=(V, A) orientado, |V | = n.

Não há circuitos negativos.

c = {cij}, j = 1,...,n, i = 1,...,n

cij ≥ 0

cii = 0

cij= +, (i, j )  A

Ak(i, j ) = valor do caminho mais curto de i a j podendo usar apenas nós numerados de 1 a k como nós intermediários.

Algoritmos em Grafos

caminhos mais curtos19
Caminhos mais Curtos

A0(i, j ) = cij: caminho mais curto de i a j usando no máximo o nó “0” (que não existe) como nó intermediário (caminho mais curto de i a j sem nós intermediários)

Ak(i, j ) : pode usar o nó k ou não.

Ak+1(i, j ) : pode usar o nó k+1 ou não.

A0 A1

A1 A2

...

An-1 An

An(i, j ) = valor do caminho mais curto de i a j podendo usar qualquer nó de 1 a n como nó intermediário.

Algoritmos em Grafos

caminhos mais curtos20
Caminhos mais Curtos
  • Se Ak+1(i, j ) não usa o nó k+1 como intermediário, então: Ak+1(i, j ) = Ak(i, j )
  • Se Ak+1(i, j ) usa o nó k+1 como intermediário, então: Ak+1(i, j ) = Ak(i, k+1) + Ak(k+1, j )

Ak+1(i, j ) = min { Ak(i, j ), Ak(i, k+1) + Ak(k+1, j ) }

Algoritmos em Grafos

caminhos mais curtos21

Para i = 1,...,nfaça

Para j = 1,...,nfaça

A0(i,j)  cij

fim-para

fim-para

Para k = 1,...,nfaça

Para i = 1,...,nfaça

Para j = 1,...,nfaça

Ak(i,j)  min{Ak-1(i,j),

Ak-1(i,k) + Ak-1(k,j)}

fim-para

fim-para

fim-para

Caminhos mais Curtos

Algoritmo de Floyd:

Algoritmos em Grafos

caminhos mais curtos22

6

0

0

0

0

4

4

4

4

11

6

6

11

0

4

11

4

1

A0 =

A3 =

A2 =

A1 =

6

6

5

6

0

0

0

0

2

2

2

2

C =

6

0

2

3

11

2

3

3

3

3

7

7

7

+∞

0

0

0

0

3

+∞

0

3

2

Caminhos mais Curtos

Exemplo:

Algoritmos em Grafos

caminhos mais curtos23
Caminhos mais Curtos
  • Algoritmo de Dijkstra: número de operações (tempo) ~ n2 n-1 iterações, cada iteração busca o mínimo em uma lista com até n-1 elementos (vetor )
  • Algoritmo de Floyd: número de operações (tempo) ~ n3 Três comandos for de 1 até n um dentro do outro
  • Ou seja, o problema de calcular os caminhos mais curtos entre todos os pares de nós pode ser resolvido com a mesma eficiência aplicando-se n vezes o algoritmo de Dijkstra, uma vez a partir de cada nó inicial.

Algoritmos em Grafos