Escolar Documentos
Profissional Documentos
Cultura Documentos
Funções utilitárias
Relax(u, v, w) - parte do algoritmo que tenta melhorar a distância.
InitializeSingleSource(G) - inicializa a distância para todos os vértices como infinito e do
inicial para 0, bem como o pai para nulo.
Algoritmo de Bellman-Ford
Características
Complexidade O(nm).
Na implementação do Cormen, utiliza lista de arestas como representação do grafo.
Admite pesos negativos nas arestas.
Relaxa as progressivamente arestas do grafo. (Função Relax(u,v,w)).
Não admite ciclos de peso negativo no grafo, pois isso gera uma solução indefinida.
(Distância para os vértices do ciclo será -infinito para simbolizar indefinido).
Apesar de não admitir ciclos de peso negativo no grafo, o algoritmo é capaz de detectá-los
basicamente "executando" mais uma iteração. Pois se ao final das n-1 iterações ainda
conseguirmos relaxar alguma aresta, estamos em um ciclo de peso negativo. Em
implementações, geralmente retornamos falso caso conseguirmos alguma melhora
(observar pseudocódigo).
Funcionamento do Algoritmo
Enumere uma sequência arbitrária de arcos serão relaxados a cada passo, ou seja,
basicamente selecione uma sequência de arestas (abordando todas as arestas do grafo).
A partir dessa sequência, itere relaxando cada arco do grafo n-1 vezes sendo n = |V|.
Iteramos n-1 vezes pois dado um grafo ideal, o menor ciclo possível que percorra todos os
vértices e volte ao mesmo vértice terá n arestas. Portanto, se retirarmos uma aresta desse
ciclo, ele se torna um caminho com n-1 arestas.
Algoritmo de Dijkstra
Ideia
Propriedades
Complexidade O(n 2
) com lista simples e O(n + m)log
10
n com heap.
Implementação comum a partir de uma lista de adjacência.
Utiliza uma min-heap com ordenação pela distância dos vértices armazenados.
Funcionamento do Algoritmo
A partir de uma origem u, para cada vértice v adjacente a u, tenta relaxar o vértice v, caso
tenha sido possível, adiciona v na heap juntamente com o peso da aresta (u, v).
Executa enquanto a heap não estiver vazia, e somente para vértices não visitados (V-S).
Algoritmo DAG
Propiedades
Complexidade O(n + m)
Funciona para grafos acíclicos e direcionados.
Funcionamento do algoritmo
Múltiplas fontes
Algoritmo de Floyd-Warshall
Propiedades
Ideia
Utiliza vértices intermediários para verificar a distância de i para j, e a cada iteração
atualiza se possível a distância de i para j, caso Dij seja menor que Dik + Dkj.