Eu tenho estudado os três e estou declarando minhas inferências deles abaixo. Alguém poderia me dizer se eu os entendi com precisão ou não? Obrigado.
O algoritmo Dijkstra é usado apenas quando você tem uma única fonte e deseja conhecer o menor caminho de um nó para outro, mas falha em casos como este .
O algoritmo Floyd-Warshall é usado quando qualquer um dos nós pode ser uma fonte, portanto, você deseja que a distância mais curta alcance qualquer nó de destino a partir de qualquer nó de origem. Isso só falha quando há ciclos negativos.
Bellman-Ford é usado como Dijkstra, quando há apenas uma fonte. Isso pode lidar com pesos negativos e seu trabalho é o mesmo que Floyd-Warshall, exceto por uma fonte, certo? (Este é o que eu tenho menos certeza.)
fonte
Respostas:
previous[v]
O comportamento do algoritmo de Dijkstra em gráficos com arestas negativas depende da variante precisa em discussão. Algumas variantes do algoritmo, como a da Wikipedia, sempre são executadas rapidamente, mas não calculam corretamente os caminhos mais curtos quando existem arestas negativas. Outras variantes, como a destas notas de aula, sempre calculam os caminhos mais curtos corretamente (a menos que haja um ciclo negativo acessível a partir da fonte), mas podem exigir tempo exponencial na pior das hipóteses, se houver arestas negativas.
Está correto. Floyd-Warshall é um exemplo de algoritmo de caminho mais curto para todos os pares , o que significa que ele calcula os caminhos mais curtos entre todos os pares de nós. Outro exemplo é "para cada nó v, execute Dijkstra com v como o nó de origem". Existem vários outros.
Para mais detalhes, consulte o seu livro de algoritmos favorito. (Você tem um livro de algoritmos favorito, não é?)
fonte
Todos os três algoritmos são abordados nos slides das palestras do Prof. Jaehyun Park (Universidade de Stanford). Aqui está o link Algoritmos de caminho mais curto
fonte
A página da Wikipedia sobre o problema do caminho mais curto descreve dois problemas diferentes: SSSP e APSP.
Caminho mais curto de fonte única (SSSP):
Algoritmo de Bellman-Ford: resolve o problema de fonte única se os pesos das bordas forem negativos. Isso é uma melhoria no Dijkstra, onde agora ele também pode lidar com pesos negativos.
Caminho mais curto de todos os pares (APSP):
Portanto, Floyd – Warshall não é o mesmo que BFS, embora a metodologia subjacente seja a mesma, programação dinâmica.
fonte
Talvez isso deva ser um comentário e não uma resposta, mas é uma distinção entre esses algoritmos que outras respostas não mencionam.
As pessoas tendem a chamar o algoritmo de Floyd de Floyd-Warshall , mas os algoritmos de Floyd e Warshall não são os mesmos.
fonte