A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo.

Cópias: 1
CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo.

Apresentações semelhantes


Apresentação em tema: "CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo."— Transcrição da apresentação:

1 CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo

2 CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos 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.

3 CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Dijkstra v INI = vértice 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 = 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(v INI, i), d(v INI,k) + c(k,i)} se (custo < d(v INI, i)) então d(v INI, i) = custo; anterior(i) = k }

4 CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Execução 1. o grafo inicial2. inicializando os custos3. atualizando o conjunto fechado4. examinando os vértices vizinhos ao 1 que estão em aberto 5. 3 é o vértice de menor custo; fechado = fechado+{3} 6. examinando os vértices vizinhos ao é o vértice de menor custo; fechado = fechado+{2} 8. examinando os vértices vizinhos ao é o vértice de menor custo; fechado = fechado+{4} 10. examinando os vértices vizinhos ao é o vértice de menor custo; fechado = fechado+{5} 12. examinando os vértices vizinhos ao é o vértice de menor custo; fechado = fechado+{6} 14. fim alcançado fim do algoritmo

5 CC/EC/PPGI/UFES Outros algoritmos de caminho mínimo Algoritmo de Bellmann-Ford Algoritmo de Floyd CC/EC/MestradoTeoria dos Grafos

6 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 vértice 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) faça 6. d(v_inicial, i) d(v_inicial, j) + c(j, i) 7. anterior(i) j 8. fim-enquanto CC/EC/MestradoTeoria dos Grafos d(1, i)0 anterior(i)000 {1,2} {1,3} {2,3} {j,i} (1,2) (2,1) (1,3) (3,1) (2,3) (3,2) (1,2) (2,1) (1,3) (3,1) (3,2)

7 CC/EC/PPGI/UFES Caminhos mais Curtos Dados: Grafo G=(V, A), |V | = n. Não 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 nós numerados de 1 a k como nós intermediários. Caminho mais curto entre todos os pares de nós de um grafo

8 CC/EC/PPGI/UFES Caminhos mais Curtos A 0 (i, j ) = c ij : caminho mais curto de i a j usando no máximo o nó 0 (que não existe) como nó intermediário (caminho mais curto de i a j sem nós intermediários) A k (i, j ) : pode usar o nó k ou não. A k+1 (i, j ) : pode usar o nó k+1 ou não. 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ó intermediário.

9 CC/EC/PPGI/UFES Caminhos mais Curtos Se A k+1 (i, j ) não usa o nó k+1 como intermediário, então: 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 intermediário, então: A k+1 (i, j ) = A k (i, k+1) + A k (k+1, j )

10 CC/EC/PPGI/UFES Caminhos mais Curtos Algoritmo de Floyd: Para i = 1,...,n faça Para j = 1,...,n faça A 0 (i,j) c ij fim-para Para k = 1,...,n faça Para i = 1,...,n faça Para j = 1,...,n faça A k (i,j) min{A k-1 (i,j), A k-1 (i,k) + A k-1 (k,j)} fim-para

11 CC/EC/PPGI/UFES A 1 = Caminhos mais Curtos Exemplo: C = A 0 = A 2 = A 3 =

12 CC/EC/PPGI/UFES Caminhos mais Curtos Algoritmo de Dijkstra: número de operações (tempo) ~ n 2 n-1 iterações, cada iteração busca o mínimo em uma lista com até n-1 elementos Algoritmo de Floyd: número de operações (tempo) ~ n 3 Três 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 nós pode ser resolvido com a mesma eficiência aplicando-se n vezes o algoritmo de Dijkstra, uma vez a partir de cada nó inicial.

13 CC/EC/PPGI/UFES Floyd em grafos não direcionados? Como aplicar o algoritmo de Floyd no grafo abaixo?


Carregar ppt "CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo."

Apresentações semelhantes


Anúncios Google