cc/ec/ppgi/ufes cc/ec/mestradoteoria dos grafos algoritmo de caminho mínimo

13
CC/EC/PPGI/UFES CC/EC/Mestrado Teoria dos Grafos Algoritmo de Caminho Mínimo

Upload: internet

Post on 16-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

  • Slide 1
  • CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mnimo
  • Slide 2
  • CC/EC/PPGI/UFES CC/EC/MestradoTeoria 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.
  • Slide 3
  • CC/EC/PPGI/UFES CC/EC/MestradoTeoria 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 } d(v_inicial, j) + c(j, i) faa 6. d(v_inicial, i) d(v_inicial, j) + c(j, i) 7. anterior(i) j 8. fim-enquanto CC/EC/MestradoTeoria dos Grafos 1 3 2 3 -8 10 123 d(1, i)0 anterior(i)000 {1,2} {1,3} {2,3} {j,i} 310 1 -5 12 (1,2) (2,1) (1,3) (3,1) (2,3) (3,2) -13 2 -21 -29 (1,2) (2,1) (1,3) (3,1) (3,2) 3 1 10 1 2 2">
  • CC/EC/PPGI/UFES 11 Algoritmo de Bellmann-Ford Entrada: matriz de pesos das arestas c(i, j) de G = (V,E) 1. v_inicial vrtice inicial; 2. d(v_inicial, v_inicial)0; 3. d(v_inicial, i)INFINITO,para todo i de V v_inicial 4. anterior(i)0, para todo i de V 5. enquanto (j, i) de E tal que d(v_inicial, i) > d(v_inicial, j) + c(j, i) faa 6. d(v_inicial, i) d(v_inicial, j) + c(j, i) 7. anterior(i) j 8. fim-enquanto CC/EC/MestradoTeoria dos Grafos 1 3 2 3 -8 10 123 d(1, i)0 anterior(i)000 {1,2} {1,3} {2,3} {j,i} 310 1 -5 12 (1,2) (2,1) (1,3) (3,1) (2,3) (3,2) -13 2 -21 -29 (1,2) (2,1) (1,3) (3,1) (3,2) 3 1 10 1 2 2
  • Slide 7
  • CC/EC/PPGI/UFES Caminhos mais Curtos Dados: Grafo G=(V, A), |V | = n. No 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 ns numerados de 1 a k como ns intermedirios. Caminho mais curto entre todos os pares de ns de um grafo
  • Slide 8
  • CC/EC/PPGI/UFES Caminhos mais Curtos A 0 (i, j ) = c ij : caminho mais curto de i a j usando no mximo o n 0 (que no existe) como n intermedirio (caminho mais curto de i a j sem ns intermedirios) A k (i, j ) : pode usar o n k ou no. A k+1 (i, j ) : pode usar o n k+1 ou no. 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 intermedirio.
  • Slide 9
  • CC/EC/PPGI/UFES Caminhos mais Curtos Se A k+1 (i, j ) no usa o n k+1 como intermedirio, ento: 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 intermedirio, ento: A k+1 (i, j ) = A k (i, k+1) + A k (k+1, j )
  • Slide 10
  • CC/EC/PPGI/UFES Caminhos mais Curtos Algoritmo de Floyd: Para i = 1,...,n faa Para j = 1,...,n faa A 0 (i,j) c ij fim-para Para k = 1,...,n faa Para i = 1,...,n faa Para j = 1,...,n faa A k (i,j) min{A k-1 (i,j), A k-1 (i,k) + A k-1 (k,j)} fim-para
  • Slide 11
  • CC/EC/PPGI/UFES 073 206 1140 A 1 = Caminhos mais Curtos Exemplo: 1 2 3 3 6 4 112 0+3 206 40 C = 0+3 206 1140 A 0 = 073 206 640 A 2 = 073 205 640 A 3 =
  • Slide 12
  • CC/EC/PPGI/UFES Caminhos mais Curtos Algoritmo de Dijkstra: nmero de operaes (tempo) ~ n 2 n-1 iteraes, cada iterao busca o mnimo em uma lista com at n-1 elementos Algoritmo de Floyd: nmero de operaes (tempo) ~ n 3 Trs 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 ns pode ser resolvido com a mesma eficincia aplicando-se n vezes o algoritmo de Dijkstra, uma vez a partir de cada n inicial.
  • Slide 13
  • CC/EC/PPGI/UFES Floyd em grafos no direcionados? Como aplicar o algoritmo de Floyd no grafo abaixo? 1 3 2 3 -8 10