Algoritmo de Floyd-Warshall

8,401 views
8,181 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,401
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
162
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Algoritmo de Floyd-Warshall

  1. 1. UNIVERSIDADE FEDERAL DE ALFENAS Teoria dos Grafos Algoritmo de Floyd-Warshall Discentes: Jéverson Abreu, João A. Silva, Sueli Perpétua, Thalles Terra Docente: Douglas Castilho Disciplina: Teoria dos Grafos 23 de setembro de 2012Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 1 / 16
  2. 2. Introdução Também conhecido como algoritmo de Floyd, algoritmo de Roy-Floyd, algoritmo de Roy-Warshall ou algoritmo WFI; Foi explicado por Bernard Roy em 1959 e publica 3 anos mais tarde por Stephen Warshall e Robert Floyd. É um algoritmo que resolve o problema de encontrar o menor caminho entre todos os pares de vértices de um grafo orientado e ponderado Ele apenas encontra os valores de tais caminhos, e não a seqüência de arestas a ser percorrida.Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 2 / 16
  3. 3. Outras Aplicações Calcular o Fecho Transitivo de um grafo; Verificar se um grafo não-dirigido é bipartido; Achar um vértice central, isto é, aquele que minimiza a distância máxima ou média entre todos os vértices;Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 3 / 16
  4. 4. Problema de se encontrar um vértice central Poderíamos pensar, em como avaliar o melhor local para instalarmos uma loja. Podemos definir como melhor local aquele que diminui a distância entre a loja e locais estratégicos como: Um bairro onde o consumo dos produtos vendidos por ela é alto; Estabelicimentos que prestarão serviços para a loja; Um local onde se tenha uma grande concentração de um público alvo para a loja.Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 4 / 16
  5. 5. Menor caminho entre todos os vértices Dado um grafo G direcionado e ponderado, encontrar para todo par u, v de vértices um caminho mínimo de u a v.Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 5 / 16
  6. 6. Menor caminho entre todos os vértices O algorimto de Floyd-Warshall tem como objetivo calcular o caminho mínimo entre cada par de vértices de um grafo O grafo pode conter arestas negativas Não pode conter ciclos negativos Utiliza técnica de programação dinâmicaJéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 6 / 16
  7. 7. Menor caminho entre todos os vértices Entrada: matriz de adjacência representando os pesos das arestas de um grafo orientado e satisfaça a seguinte condição:   0,  se i = j, yj = o peso da aresta orientada(i, j), se, i = j e (i, j) ∈ A,  ∞,  caso contrário. Saída: Uma matriz quadrada D|V |X |V | onde cada célula dij contém a distancia mínima entre o vétice i e j, onde a entrada dij contém o peso do caminho mais curto do vértice i até o vértice j.Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 7 / 16
  8. 8. Menor caminho entre todos os vértices func floyd-Warshall(caminho[][]) for k = 1 to n for i = 1 to n for j = 1 to n caminho[i][j] = min(caminho[i][j], caminho[i][k]+caminho[k][j])Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 8 / 16
  9. 9. Menor caminho entre todos os vértices func floyd-Warshall(caminho[][]) for k = 1 to n for i = 1 to n for j = 1 to n caminho[i][j] = min(caminho[i][j], caminho[i][k]+caminho[k][j])Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 9 / 16
  10. 10. Acompanhamento Matriz de adjacência de entrada 0 8 5 D (0) = 3 0 ∞ ∞ 2 0 Após iteração sobre o primeiro vértice 0 8 5 D (1) = 3 0 8 ∞ 2 0Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 10 / 16
  11. 11. Acompanhamento Após iteração sobre o segundo vértice 0 8 5 D (2) = 3 0 8 5 2 0 Após iteração sobre o terceiro vértice 0 7 5 D (3) = 3 0 8 5 2 0Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 11 / 16
  12. 12. Complexidade É fácil analisar o tempo de execução do algoritmo de Floyd-warshall. O laço principal é executado n vezes e o laço interno considera cada um dos O(n2 ) pares de vértices, realizando um operação de tempo constante para cada par. Se usarmos uma estrutura de dados como a matriz de adjacência, temos um tempo de execução total de O(n3 ).Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 12 / 16
  13. 13. Bellman Ford x Dijkstra x Floyd-Warshall BF Dijkstra FW |V |O(|V ∗ A|) |V |O(|V |2 + |A| O(|V |3 )Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 13 / 16
  14. 14. Considerações Finais O Algoritmo de Floyd-Warshall e Bellman Ford trabalha com arestas de peso negativo enquanto Dijkstra não. Floyd-Warshall tem como saída uma matriz de caminho mínimos já Bellman Ford e Dijkstra fornece um vetor. No Dijkstra, é possível reproduzir o caminho, enquanto que o Floyd-Warshall apenas fornece o caminho mais curto, e não a sequência das arestas. Bellman Ford aceita ciclo negativo enquanto Floyd-Warshall não.Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 14 / 16
  15. 15. Bibliografia CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; (2002). Algoritmos - Teoria e Prática. Tradução da 2a edição americana. Rio de Janeiro. Editora CampusJéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 15 / 16
  16. 16. Perguntas???Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 16 / 16

×