Algoritmos de Caminho Mínimo
em Grafos
CC/EC/Mestrado
Teoria dos 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, ...)
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
2
8
5
C
D
Solução:
4
4
F
I
2
4
4
7
H
4
4
5
A
E
6
5
2
4
2
G
4
J
A–D–G–I–K
custo = 7 + 2 + 2 + 5 = 16
K
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
- 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:
Se i∈S ⇒π (i )=π∗ (i )
Se i∈ S̄ ⇒π (i )≥ π∗ (i )
min k ∈S,k∈ Γ (k ) {π( k )+c ki }
π (i ), i ∈ S̄ , 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)
a
cai
π (b)
1
π (i )
i
b
cbi
π (c) c
ci
c
S
̄S
Caminhos mais Curtos
j ∈ S̄ tal que π ( j ) =mini ∈ S̄ π ( .i )
Teorema: Seja o nó
Então π∗ ( j )=π ( j) , isto é, o comprimento do caminho
π( j)
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
̄S
encontrado
- P2 é a parte final, do nó L ao nó j
Caminhos mais Curtos
comprimento de P1 ≥ (L) ≥ (j)
comprimento de P2 ≥ 0
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
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
Execução
7. 2 é o vértice 13.
de menor
6 é o custo;
vértice de menor custo;
fechado = fechado+{6}
fechado = fechado+{2}
2. inicializando os custos
8. examinando os vértices vizinhos ao
14. fim alcançado
2
3. atualizando o conjunto
fechado
9. 4 é o vértice de menor custo;
4. examinando os vértices
ao
fechado vizinhos
= fechado+{4}
1 que estão em aberto
10. examinando os vértices vizinhos
5. 3 é o vértice de
custo;
ao menor
4
fechado = fechado+{3}
11. 5 é o vértice de menor custo;
6. examinando os fechado
vértices= vizinhos
ao
fechado+{5}
3
12. examinando os vértices vizinhos
ao 5
1. o grafo inicial
fim do algoritmo
CC/EC/Mestrado
Teoria dos Grafos
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:
3
3
1
-8
10
2
Caminho mais curto de 1 a 3?
Resultado do algoritmo?
Porque?
2
3
Download

j - claudiaboeres