UNIVERSIDADE FEDERAL DE ALFENAS Teoria dos Grafos
Algoritmo de Floyd-Warshall
Discentes: Jéverson Abreu, João A. Silva,Sueli Perpétua, Thalles TerraDocente: Douglas Castilho
Disciplina: Teoria dos Grafos
23 de setembro de 2012
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 1 / 16
Introdução
Também conhecido como algoritmo de Floyd, algoritmo deRoy-Floyd, algoritmo de Roy-Warshall ou algoritmo WFI;
Foi explicado por Bernard Roy em 1959 e publica 3 anosmais tarde por Stephen Warshall e Robert Floyd.
É um algoritmo que resolve o problema de encontrar o menorcaminho entre todos os pares de vértices de um grafo orientado eponderado
Ele apenas encontra os valores de tais caminhos, e nãoa seqüência de arestas a ser percorrida.
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 2 / 16
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ânciamáxima ou média entre todos os vértices;
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 3 / 16
Problema de se encontrar um vértice central
Poderíamos pensar, em como avaliar o melhor local parainstalarmos uma loja. Podemos definir como melhor local aqueleque 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úblicoalvo para a loja.
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 4 / 16
Menor caminho entre todos os vértices
Dado um grafo G direcionado e ponderado, encontrar para todopar 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
Menor caminho entre todos os vértices
O algorimto de Floyd-Warshall tem como objetivo calcular ocaminho mínimo entre cada par de vértices de um grafo
O grafo pode conter arestas negativasNão pode conter ciclos negativosUtiliza técnica de programação dinâmica
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 6 / 16
Menor caminho entre todos os vértices
Entrada: matriz de adjacência representando os pesos dasarestas de um grafo orientado e satisfaça a seguinte condição:
yj =
0, se i = j ,o peso da aresta orientada(i , j), se, i 6= j e (i , j) ∈ A,∞, caso contrário.
Saída: Uma matriz quadrada D|V |X |V | onde cada célula dij contéma distancia mínima entre o vétice i e j , onde a entrada dij contémo 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
Menor caminho entre todos os vértices
func floyd-Warshall(caminho[][])for k = 1 to n
for i = 1 to nfor 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
Menor caminho entre todos os vértices
func floyd-Warshall(caminho[][])for k = 1 to n
for i = 1 to nfor 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
Acompanhamento
Matriz de adjacência de entrada
D(0) =
0 8 53 0 ∞∞ 2 0
Após iteração sobre o primeiro vértice
D(1) =
0 8 53 0 8∞ 2 0
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 10 / 16
Acompanhamento
Após iteração sobre o segundo vértice
D(2) =
0 8 53 0 85 2 0
Após iteração sobre o terceiro vértice
D(3) =
0 7 53 0 85 2 0
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 11 / 16
Complexidade
É fácil analisar o tempo de execução do algoritmo deFloyd-warshall. O laço principal é executado n vezes e o laçointerno considera cada um dos O(n2) pares de vértices,realizando um operação de tempo constante para cada par. Seusarmos 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
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
Considerações Finais
O Algoritmo de Floyd-Warshall e Bellman Ford trabalha comarestas de peso negativo enquanto Dijkstra não.Floyd-Warshall tem como saída uma matriz de caminho mínimosjá Bellman Ford e Dijkstra fornece um vetor.No Dijkstra, é possível reproduzir o caminho, enquanto que oFloyd-Warshall apenas fornece o caminho mais curto, e não asequê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
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 Campus
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 15 / 16
Perguntas???
Jéverson, João, Sueli, Thalles (Unifal-MG) 23 de setembro de 2012 16 / 16
Top Related