Caminho Mínimo

Propaganda
Caminho Mínimo
Geraldo Robson Mateus
DCC - UFMG
Definição
Seja G=(N,A) um grafo simples finito ou não e
um custo cij associado a cada arco (i,j) em G.
Encontrar, se existir, um caminho com início
 N com custo
em f e extremidade em T
XXXX,
mínimo.
Modelo
min

 i , j A
cij xij
1 , se i  O   f 

xij   xij  0 , se i  N  O  D

 i , j S  i 
 i , j E i 
1 , se i  D  s


xij  0
 i , j   A
Particularidades
i.
ii.
iii.
iv.
v.
Caso particular do problema de transbordo;
Modelo de circulação de fluxo;
xXXXXXX
ij  0 ,1 ;
Caminho para todos os nós ou um subconjunto
Modelo linear
 
-
Algoritmo Simplex
FCM
Algoritmo Dijkstra
Modelo dual
max u f  us
ui  u j  cij
ui livre
u'i  ui
,  i , j   A
,i  N
u'i  u'f  menor distância do nó f ao nó i .
cij  0
Caminho Mínimo - XXXX

Inicialização:
faça u'f  0 , X   f 

Processo iterativo: (n-1 iterações)
faça X  N  X
seja u'p  c pq  min
 i , j  X , X 

u'i  cij
faça u'q  u'p  c pq , q  X

Caminho Mínimo – cij quaisquer
“A soma dos custos nos arcos de qualquer
circuito em G é não negativa”
u'i  ui , i  N
max u  u
'
s
'
f
u  u  cij ,   i , j 
'
j
'
i
u livre , i  N
'
i
Algoritmo cij quaisquer
faça u'f  0 , u'i   , i  f ;
se u'j  u'i  cij   i , j  então PARE
selecione
 p , q  tal que u'q  u'p  c pq
faça u'q  u'p  c pq
Como identificar circuito negativo?
Recuperação do caminho
se u's   então não existe um caminho
se u   então existe nó k tal que u  u  cks
'
s
'
s
'
k
Algoritmo de Dijkstra
S  f ;
para i   N  f  faça
d  i   c fi ;
fimpara ;
para i  1, n  1 faça
escolha j   N  S  tal que d  j  é mínimo ;
faça S  S   j ;
para k   N  S  faça

d  k   min d  k  , d  j   c jk
fimpara ;
fimalgoritmo ;

Algoritmo (2)
Seja P o conjunto dos nós cujo caminho mínimo
foi encontrado.
P  N  P;
L  j   vetor contendo para cada j  P do arco minimal de j .
u'j - comprimento do caminho do nó inicial ao nó j.
Inicialização
para j   N   f   faça L  j   f ;
c se existe o arco
u'j   ij
 caso contrário ;
fimpara ;
P   f  ; P   N   f  ;
Processo
 f , j   A;
s  P
iterativo
repita
 
selecione k  P tal que u'k  min u'j ;
jP
faça P  P  k  ; P  P  k  ;
para todo j  P faça
se u'k  ckj  u'j então faça
u'j  u'k  ckj ; L  j   k ;
fimse ;
fimpara ;
até P   ;
fimalgoritmo;
Algoritmo cij quaisquer
d(f) = 0 e L(f) = 0
d(j) = ∞ para todo j ∈ N – f
Enquanto algum arco (i,j) satisfaz d(j) > d(i) + cij
faça
d(j) = d(i) + cij
L(j) = i
fimenquanto
fimalgoritmo
Complexidade: O(2 n)
Exemplo
3
4
1
2
2
3
8
7
9
2
5
1
6
3
8
2
3
3
6
6
2
8
9
Extensões







Um único nó destino, um conjunto de nós
destinos, caminho mínimo para todos os nós
Um único nó fonte, um conjunto de fontes,
caminho mínimo de todos para o destino
Algoritmo orientado ao alvo
Caminho mínimo com janela de tempo
Grafos n-partido
Caminho mínimo entre quaisquer pares de nós
Caminho crítico (PERT/CPM)
Algoritmo para todo par de nós
d(f) = 0 e L(f) = 0
d(i,j) = ∞ para todo (i,j) ∈ N x N
d(i,i) = 0 para todo i ∈ N
Para cada (i,j) ∈ A faça d(i,j) = cij , L(j) = i
Enquanto a rede contem i, j, k | d(i,j) > d(i,k) + d(k,j) faça
d(i,j) = d(i,k) + d(k,j)
L(j) = pred(k,j) (predecessor de j no caminho de k para j.
fimenquanto
fimalgoritmo
Complexidade: O(n3C)
Algoritmo de Floyd-Warshall
d(i,j) = ∞ para todo (i,j) ∈ N x N e pred(i,j) = 0
d(i,i) = 0 para todo i ∈ N
Para cada (i,j) ∈ A faça d(i,j) = cij , pred(i,j) = i
Para cada K = 1, …, n faça
Para cada (i,j) ∈ N x N faça
Se d(i,j) > d(i,k) + d(k,j) então faça
d(i,j) = d(i,k) + d(k,j)
pred(i,j) = pred(k,j)
fimse
fimalgoritmo
Complexidade: O(n3)
Algoritmos e complexidade
Algoritmo
Autor
Bellman-FordMoore
Descrição
Complexidade
-
O(nm)
Com Parent Checking
O(nm)
Dijkstra
-
O(n2)
Dial
Usando buckets
Cherkassky et
al.
Com Overflow Bags
O(m+n(C/α+α))
Approximate buckets
O(mβ+n(β+C/ β))
Double buckets
O(m+n(β+C/ β))
Fibonacci Heap
O(m+nlogn)
Dijkstra
Fredman e
Tarjan
K-array heap
Ahuja et al.
R-heap
O(m+nC)
O(mlogn)
O(m+nlogC)
Algoritmos e complexidade
Algoritmo
Autor
Descrição
Incremental
Graph
Pape
O(n2n)
Pallotino
O(n2m)
Threshold
algorithm
Glover et al.
O(nm)
Topological
Ordering
Goldberg e
Radzik
O(nm)
Com atualizações de
distância
Comp.
O(nm)
Download