A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.

Apresentações semelhantes


Apresentação em tema: "Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha."— Transcrição da apresentação:

1 Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha

2 2Algoritmos em Grafos PARTE 2: CAMINHOS MAIS CURTOS

3 3Algoritmos em Grafos 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. 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,...)

4 4Algoritmos em Grafos 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). A B C D F E GJ I H K 8 7 5 64 24 5 4 4 2 2 4 4 5 244 Solução:A – D – G – I – K custo = 7 + 2 + 2 + 5 = 16

5 5Algoritmos em Grafos Caminhos mais Curtos Condição de existência: Caminho de i a j contendo um circuito w: k j i 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?

6 6Algoritmos em Grafos Caminhos mais Curtos Condição de existência: não há circuitos de comprimento negativo. A solução ótima (caminho mais curto) sempre será um caminho elementar (sem circuito).

7 7Algoritmos em Grafos 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

8 8Algoritmos em Grafos Caminho mais curto do nó 1 a cada nó do grafo G=(V,A) Hipótese: todas as distâncias c ij são positivas: c ij ≥ 0,  (i,j)  A 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

9 9Algoritmos em Grafos Cada nó i  V possui um rótulo  (i ), que verifica a seguinte propriedade: Caminhos mais Curtos 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. a 1b c i c ai c bi c ci

10 10Algoritmos em Grafos 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: - P 1 é a parte inicial, do nó 1 ao nó L, onde L é o primeiro nó de encontrado - P 2 é a parte final, do nó L ao nó j

11 11Algoritmos em Grafos Caminhos mais Curtos comprimento de P 1 ≥  (L) ≥  (j) comprimento de P 2 ≥ 0 Logo, o comprimento de P 1 + P 2 ≥  (j).

12 12Algoritmos em Grafos 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. Inicializar S  {2,3,...,n}, S  {1},  (1)  0,  (j)  c 1j se j  1 + +  caso contrário Enquanto S   faça Selecionar j  S tal que  (j)= min i  S {  (i)} S  S – {j} Para  i  S e i  j + faça  (i)  min{  (i),  (j)+c ji } fim_enquanto

13 13Algoritmos em Grafos Caminhos mais Curtos Exemplo: 1 2 3 4 5 6 1 2 3 5 7 7 5 1 2 4 ITERAÇÃO 1  *(1) = 0  *(3) = 1 1 2 3 4 5 6 1 2 3 5 7 7 5 1 2 4 S = {1} S = {2,3,4,5,6}  (1) = 0  (2) = 7  (3) = 1  (4) =  (5) =  (6) = +   (2) = min{7,  (5) = min{ ,  (6) = min{ , j = 3 S = {2,4,5,6} 1+5} = 6 1+2} = 3 1+7} = 8

14 14Algoritmos em Grafos Caminhos mais Curtos ITERAÇÃO 2  (2) = min{6,  (4) = min{ , j = 5 S = {2,4,6} 3+2} = 5 3+5} = 8  *(1) = 0  *(3) = 1 1 2 3 4 5 6 1 2 3 5 7 7 5 1 2 4  *(5) = 3 ITERAÇÃO 3  (4) = min{8,  (6) = min{ , j = 2 S = {4,6} 5+4} = 8 5+1} = 6  *(1) = 0  *(3) = 1 1 2 3 4 5 6 1 2 3 5 7 7 5 1 2 4  *(5) = 3  *(2) = 5

15 15Algoritmos em Grafos Caminhos mais Curtos ITERAÇÃO 4  (4) = 8 j = 6 S = {4} ITERAÇÃO 5 j = 4 S = { }  *(1) = 0  *(3) = 1 1 2 3 4 5 6 1 2 3 5 7 7 5 1 2 4  *(5) = 3  *(2) = 5  *(6) = 6  *(1) = 0  *(3) = 1 1 2 3 4 5 6 1 2 3 5 7 7 5 1 2 4  *(5) = 3  *(2) = 5  *(6) = 6  *(4) = 8

16 16Algoritmos em Grafos Caminhos mais Curtos 1 2 3 5 4 2 3 2 5 4 3 1 2 6 7 3 1 4 3 123456 1 2 3 4 5 6 7 nó Iteração Início 042042  04254770425477 0425404254 04254770425477 04254770425477 04254770425477 04254770425477

17 17Algoritmos em Grafos Caminhos mais Curtos Número de operações (tempo): ~ n 2 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: 1 3 2 10 - 8 3 Caminho mais curto de 1 a 3? Resultado do algoritmo? 2 3 Por que?

18 18Algoritmos em Grafos Inicializar S  {2,3,...,n}, S  {1},  (1)  0,  (j)  c 1j se j  1 + +  caso contrário Enquanto S   faça Selecionar j  S tal que  (j)= min i  S {  (i)} S  S – {j} Para  i  j + faça Calcular  *   (j)+ c ji Se  * <  (i) então S  S  {i}  (i)   * fim-se fim-para fim-enquanto Caminhos mais Curtos Extensão do algoritmo de Moore-Dijkstra para o caso com distâncias negativas (mas sem ciclos negativos)

19 19Algoritmos em Grafos Caminhos mais Curtos 1 2 3 5 4 2 3 -2 -3 4 3 1 2 6 7 3 1 4 3 12345678 1 2 3 4 5 6 7 nó Iteração Início 042042  S =2 3 4 5 6 7 0425404254 04154770415477 04254770425477 04142660414266 04142550414255 04142550414255 04143770414377 04143660414366 X X 3 X 3 X 5 X 5 X 5 XX 7

20 20Algoritmos em Grafos 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

21 21Algoritmos em Grafos Caminhos mais Curtos Dados: Grafo G=(V, A) orientado, |V | = n. Não há circuitos negativos. c = {c ij }, j = 1,...,n, i = 1,...,n c ij ≥ 0 c ii = 0 c ij = + , (i, j )  A A k (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. Caminho mais curto entre todos os pares de nós de um grafo

22 22Algoritmos em Grafos Caminhos mais Curtos A 0 (i, j ) = c ij : 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) A k (i, j ) : pode usar o nó k ou não. A k+1 (i, j ) : pode usar o nó k+1 ou não. A 0  A 1 A 1  A 2... A n-1  A n A n (i, j ) = valor do caminho mais curto de i a j podendo usar qualquer nó de 1 a n como nó intermediário.

23 23Algoritmos em Grafos Caminhos mais Curtos Se A k+1 (i, j ) não usa o nó k+1 como intermediário, então: A k+1 (i, j ) = A k (i, j ) A k+1 (i, j ) = min { A k (i, j ), A k (i, k+1) + A k (k+1, j ) } Se A k+1 (i, j ) usa o nó k+1 como intermediário, então: A k+1 (i, j ) = A k (i, k+1) + A k (k+1, j )

24 24Algoritmos em Grafos Caminhos mais Curtos Algoritmo de Floyd: Para i = 1,...,n faça Para j = 1,...,n faça A 0 (i,j)  c ij fim-para Para k = 1,...,n faça Para i = 1,...,n faça Para j = 1,...,n faça A k (i,j)  min{A k-1 (i,j), A k-1 (i,k) + A k-1 (k,j)} fim-para

25 25Algoritmos em Grafos 073 206 1140 A 1 = Caminhos mais Curtos Exemplo: 1 2 3 3 6 4 112 0+∞3 206 1140 C = 0+∞3 206 1140 A 0 = 073 206 640 A 2 = 073 205 640 A 3 =

26 26Algoritmos em Grafos Caminhos mais Curtos Algoritmo de Dijkstra: número de operações (tempo) ~ n 2 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) ~ n 3 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.


Carregar ppt "Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha."

Apresentações semelhantes


Anúncios Google