# Czym różni się algorytm Bellmana Forda od algorytmu Dijkstra?
## Wprowadzenie
W dziedzinie informatyki istnieje wiele algorytmów służących do rozwiązywania problemów związanych z grafami. Dwa z najbardziej popularnych i powszechnie stosowanych to algorytm Bellmana Forda i algorytm Dijkstra. Oba algorytmy są używane do znajdowania najkrótszej ścieżki w grafie, ale różnią się w swoim podejściu i zastosowaniu. W tym artykule omówimy podobieństwa i różnice między tymi dwoma algorytmami.
## 1. Algorytm Bellmana Forda
### 1.1 Opis algorytmu
Algorytm Bellmana Forda jest algorytmem dynamicznym, który znajduje najkrótszą ścieżkę w grafie ważonym z jednym źródłem. Algorytm ten może być stosowany zarówno w grafach skierowanych, jak i nieskierowanych. Jego główną zaletą jest to, że może obsługiwać grafy zawierające ujemne wagi krawędzi.
### 1.2 Zasada działania
Algorytm Bellmana Forda działa w oparciu o relaksację krawędzi. Polega to na iteracyjnym przeglądaniu wszystkich krawędzi grafu i aktualizowaniu odległości do każdego wierzchołka, jeśli istnieje krótsza ścieżka. Algorytm wykonuje tę operację V-1 razy, gdzie V to liczba wierzchołków w grafie.
### 1.3 Złożoność czasowa
Złożoność czasowa algorytmu Bellmana Forda wynosi O(V * E), gdzie V to liczba wierzchołków, a E to liczba krawędzi w grafie.
## 2. Algorytm Dijkstra
### 2.1 Opis algorytmu
Algorytm Dijkstra jest algorytmem zachłannym, który znajduje najkrótszą ścieżkę w grafie ważonym z jednym źródłem. Algorytm ten może być stosowany tylko w grafach skierowanych i nie obsługuje ujemnych wag krawędzi.
### 2.2 Zasada działania
Algorytm Dijkstra działa w oparciu o wybieranie wierzchołka o najmniejszej odległości i aktualizowanie odległości do sąsiednich wierzchołków. Algorytm utrzymuje listę wierzchołków, dla których znaleziono najkrótszą ścieżkę, oraz listę wierzchołków do odwiedzenia. Iteracyjnie wybiera wierzchołek o najmniejszej odległości z listy do odwiedzenia i aktualizuje odległości do sąsiednich wierzchołków. Algorytm kończy działanie, gdy wszystkie wierzchołki zostaną odwiedzone.
### 2.3 Złożoność czasowa
Złożoność czasowa algorytmu Dijkstra wynosi O(V^2), gdzie V to liczba wierzchołków w grafie. Jednakże, istnieją również bardziej efektywne implementacje tego algorytmu, które mają złożoność czasową O((V + E) * log(V)).
## 3. Podsumowanie
Algorytmy Bellmana Forda i Dijkstry są dwoma popularnymi algorytmami stosowanymi do znajdowania najkrótszej ścieżki w grafie. Oba algorytmy mają swoje zalety i ograniczenia, które należy wziąć pod uwagę przy wyborze odpowiedniego algorytmu do konkretnego problemu. Algorytm Bellmana Forda jest bardziej wszechstronny, ponieważ obsługuje grafy z ujemnymi wagami krawędzi, podczas gdy algorytm Dijkstra jest bardziej efektywny dla grafów bez ujemnych wag. Wybór między tymi dwoma algorytmami zależy od specyfiki problemu i wymagań dotyczących grafu.
Algorytm Bellmana Forda różni się od algorytmu Dijkstra tym, że może obsługiwać grafy z ujemnymi wagami krawędzi, podczas gdy algorytm Dijkstra działa tylko dla grafów z nieujemnymi wagami krawędzi.
Link do strony FitnessTube: FitnessTube







