Você está na página 1de 4

Fonte Única

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.

Arvóre de caminho mínimo


Não é única, implementações podem gerar árvores diferentes, porém ainda com solução
ótima.

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

Não admite arestas com peso negativo.


S : Conjunto de vértices cujo caminho mínimo em relação a s já foi calculado.
Selecionar u ∈ V − S, com menor estimativa de caminho mínimo, adicionar u a S e relaxar
todas as arestas (u, v) tal que v ∈ Adj[u].

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

Após a ordenação topológica do grafo, a partir do vértice de origem e seguindo a ordem


topológica, relaxa todos os vértices adjacentes ao vértice atual da iteração.

Múltiplas fontes
Algoritmo de Floyd-Warshall

Propiedades

Pequena variação do algortimo de Warshall (alcançabilidade em grafos).

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.

Você também pode gostar