Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouJorge Madeira Nobre Alterado mais de 8 anos atrás
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 042042 04254770425477 0425404254 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 042042 S =2 3 4 5 6 7 0425404254 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.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.