Algoritmos de Caminho Mínimo em Grafos CC/EC/Mestrado Teoria dos Grafos 1
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, ...)
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). B E H 6 4 2 4 4 4 8 F I 5 5 2 5 A K C 4 2 4 7 4 2 4 D G J Solução: A – D – G – I – K custo = 7 + 2 + 2 + 5 = 16
Caminhos mais Curtos Condição de existência: Caminho de i a j contendo um ciclo 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 ciclo w é negativo?
Caminhos mais Curtos Condição de existência: não há ciclos de comprimento negativo. A solução ótima (caminho mais curto) sempre será um caminho elementar (sem ciclos).
Caminhos mais Curtos Caminho mais curto: - De um nó a outro - De um nó a todos os demais - De um nó a todos os demais - Entre todos os pares de nós de um grafo
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 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 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. a 1 b c i cai cbi cci
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
Caminhos mais Curtos comprimento de P1 ≥ (L) ≥ (j) Logo, o comprimento de P1 + P2 ≥ (j).
Algoritmo de Dijkstra Resolve o problema com um vértice-fonte em grafos cujas arestas tenham peso maior ou igual a zero. Este algoritmo é capaz de determinar o caminho mínimo, a partir de um vértice inicial v, para todos os outros vértices do grafo. CC/EC/Mestrado Teoria dos Grafos 12
Algoritmo de Dijkstra vINI = vértice inicial d(vINI, vINI) = 0 d(vINI, i) = INFINITO, i, i V – {vINI} fechado = aberto = V anterior(i) = 0, i, i V enquanto(aberto ≠ ) { k = vértice pertencente a aberto, mais próximo do vértice inicial fechado = fechado k; aberto = aberto – k; para cada vizinho i de k que está em aberto faça{ custo = min{d(vINI, i), d(vINI,k) + c(k,i)} se (custo < d(vINI, i)) então d(vINI, i) = custo; anterior(i) = k } CC/EC/Mestrado Teoria dos Grafos 13
Execução fim do algoritmo 1. o grafo inicial 7. 2 é o vértice de menor custo; fechado = fechado+{2} 13. 6 é o vértice de menor custo; fechado = fechado+{6} 2. inicializando os custos 8. examinando os vértices vizinhos ao 2 14. fim alcançado fim do algoritmo 3. atualizando o conjunto fechado 9. 4 é o vértice de menor custo; fechado = fechado+{4} 4. examinando os vértices vizinhos ao 1 que estão em aberto 10. examinando os vértices vizinhos ao 4 5. 3 é o vértice de menor custo; fechado = fechado+{3} 11. 5 é o vértice de menor custo; fechado = fechado+{5} 6. examinando os vértices vizinhos ao 3 12. examinando os vértices vizinhos ao 5 CC/EC/Mestrado Teoria dos Grafos 14
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 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 Caminho mais curto de 1 a 3? 2 Resultado do algoritmo? 3 Porque?