Vous êtes sur la page 1sur 15

CC/EC/Mestrado

Teoria dos Grafos


Algoritmos de Caminho Mnimo
em Grafos
CAMINHOS MAIS CURTOS
Caminhos mais Curtos
Dados: grafo G=(V,A) orientado e
distncia c
ij
associada ao arco (i,j) A.
Problema: Obter o caminho mais curto entre dois ns s e t.
O comprimento de um caminho igual soma dos
comprimentos (distncias) dos arcos que formam o caminho.
A distncia ou comprimento de um arco pode ter diversas
interpretaes dependendo da aplicao: custos, distncias, consumo
de combustvel, etc.
Exemplo 1: Dado um mapa rodovirio, determinar a rota mais
curta de uma cidade a outra.
(rota mais rpida,
rota com menor consumo de combustvel, ...)
Caminhos mais Curtos
Exemplo 2: Construo de uma estrada entre duas cidades A e
K. O grafo abaixo representa os diversos trechos possveis e o
custo de construo de cada um. Determinar o trajeto timo
cujo custo de construo seja mnimo (corresponde a achar o
caminho mais curto de A a K em relao a estes custos).
A
B
C
D
F
E
G J
I
H
K
8
7
5
6 4
2 4
5
4
4
2
2 4
4
5
2 4 4
Soluo: A D G I K
custo = 7 + 2 + 2 + 5 = 16
Caminhos mais Curtos
Condio de existncia:
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
Condio de existncia:
no h ciclos de comprimento negativo.
A soluo 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 ns de um grafo
- De um n a todos os demais
Caminhos mais Curtos
Caminho mais curto do n 1 a cada n do grafo G=(V,A)
Hiptese: todas as distncias c
ij
so 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 (distncias positivas).
Algoritmo com n-1 iteraes
No incio de cada iterao, o conjunto V de ns est particionado
em dois subconjuntos S e S, com o n 1 em S.
Cada n i V possui um rtulo (i ), que verifica a seguinte
propriedade:
Caminhos mais Curtos
Se i S (i )= (i )
Se i

S (i ) (i )
min
k S,k ( k )
{
( k )+c
ki
}
d o valor do caminho mais curto de 1 a i sob a
restrio de que todos os ns utilizados (exceto o prprio i )
pertenam a S.
(i ), i

S ,
a
1 b
c
i
( a)
( b)
(c)
(i )
c
ai
c
bi
c
ci

S
S
Caminhos mais Curtos
Teorema: Seja o n tal que .
Ento , isto , o comprimento do caminho
mais curto do n 1 ao n j igual a .
j

S
( j )=min
i S
(i )
( j )=( j )
( j )

S
Demonstrao:
Por construo, 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
Caminhos mais Curtos
comprimento de P
1
(L) (j)
comprimento de P
2
0
Logo, o comprimento de P
1
+ P
2
(j).
CC/EC/Mestrado

Teoria dos Grafos
Algoritmo de Dijkstra
Resolve o problema com um vrtice-fonte
em grafos cujas arestas tenham peso
maior ou igual a zero. Este algoritmo
capaz de determinar o caminho mnimo, a
partir de um vrtice inicial v, para todos os
outros vrtices do grafo.
CC/EC/Mestrado

Teoria dos Grafos
Algoritmo de Dijkstra
v
INI
= vrtice inicial
d(v
INI
, v
INI
) = 0
d(v
INI
, i) = INFINITO, i, i V {v
INI
}
fechado =
aberto = V
anterior(i) = 0, i, i V
enquanto(aberto ) {
k = vrtice pertencente a aberto, mais prximo do vrtice inicial
fechado = fechado k; aberto = aberto k;
para cada vizinho i de k que est em aberto faa{
custo = min{d(v
INI
, i), d(v
INI
,k) + c(k,i)}
se (custo < d(v
INI
, i)) ento
d(v
INI
, i) = custo; anterior(i) = k
}
}
CC/EC/Mestrado

Teoria dos Grafos
Execuo
1. o grafo inicial



2. inicializando os custos



3. atualizando o conjunto fechado


4. examinando os vrtices vizinhos ao
1 que esto em aberto


5. 3 o vrtice de menor custo;
fechado = fechado+{3}

6. examinando os vrtices vizinhos ao
3


7. 2 o vrtice de menor custo;
fechado = fechado+{2}

8. examinando os vrtices vizinhos ao
2


9. 4 o vrtice de menor custo;
fechado = fechado+{4}
10. examinando os vrtices vizinhos
ao 4
11. 5 o vrtice de menor custo;
fechado = fechado+{5}
12. examinando os vrtices vizinhos
ao 5
13. 6 o vrtice de menor custo;
fechado = fechado+{6}
14. fim alcanado





fim do algoritmo
Caminhos mais Curtos
Nmero de operaes (tempo): ~ n
2
n-1 iteraes, cada iterao busca o mnimo em uma lista com
at n-1 elementos
Caminho mais curto do n 1:
ao n j
a todos os ns
Mesma complexidade, mas critrios de parada diferentes.
Distncias negativas:
1
3
2
10
- 8
3
Caminho mais curto de 1 a 3?
Resultado do algoritmo?
2
3
Porque?

Vous aimerez peut-être aussi