De acordo com esta página , o algoritmo de Dijkstra é apenas BFS com uma fila de prioridade. É realmente assim tão simples? Eu acho que não.
De acordo com esta página , o algoritmo de Dijkstra é apenas BFS com uma fila de prioridade. É realmente assim tão simples? Eu acho que não.
Respostas:
Você pode implementar o algoritmo de Dijkstra como BFS com uma fila de prioridade (embora não seja a única implementação).
O algoritmo de Dijkstra se baseia na propriedade de que o caminho mais curto de a também é o caminho mais curto para qualquer um dos vértices ao longo do caminho. É exatamente isso que o BFS faz.t
Ou em outra perspectiva: como o algoritmo de Dijkstra se comportaria se todos os pesos fossem 1? Exatamente como o BFS.
Primeiro, como podemos adaptar o BFS ao gráfico ponderado mais geral ?
Aqui está uma idéia do livro "Algoritmos (Seção 4.4)", de Dasgupta et al:
Terceiro, como o algoritmo Dijkstra se comporta em gráficos não ponderados?
Ele se comporta exatamente da mesma forma que o BFS. Nós elaboramos isso a partir de dois pontos principais.
Em "relaxamento".
Para o algoritmo Dijkstra no gráfico geral ponderado, o relaxamento é
for all edges (u,v) in E:
if dist(v) > dist(u) + w(u,v)
dist(v) = dist(u) + w(u,v)
for all edges (u,v) in E:
if dist(v) = \infty
dist(v) = dist(u) + 1
Em "fila de prioridade".
Quando o algoritmo Dijkstra é executado em gráfico não ponderado, a qualquer momento, a fila de prioridade contém no máximo dois valores distintos (distância). Portanto, uma fila FIFO de BFS é suficiente.