Problem najkrótszej ścieżki
Z Wikipedii
Problem najkrótszej ścieżki jest zagadnieniem szczególnie istotnym w informatyce. Polega on na znalezieniu w grafie ważonym najkrótszego połączenia pomiędzy danymi wierzchołkami. Szczególnymi przypadkami tego problemu są problem najkrótszej ścieżki od jednego wierzchołka do wszystkich innych oraz problem najkrótszej ścieżki pomiędzy wszystkimi parami wierzchołków.
Okazuje się, że żeby znaleźć najkrótszą ścieżkę pomiędzy dwoma wierzchołkami grafu trzeba (w pesymistycznym przypadku) znaleźć najkrótsze ścieżki od wierzchołka wyjściowego do wszystkich innych wierzchołków. Problem najkrótszej ścieżki od jednego z wierzchołków do wszystkich innych można więc zobrazować jako problem znalezienia najkrótszej drogi pomiędzy dwoma miastami. W takim wypadku wierzchołkami grafu są skrzyżowania dróg, krawędziami - drogi, a wagi krawędzi odwzorowują długość danego odcinka drogowego. Do znalezienia najkrótszej ścieżki pomiędzy dwoma wierzchołkami zazwyczaj używane są algorytmy:
- Dijkstry (przy założeniu, że w grafie nie ma wag ujemnych) o pesymistycznej złożoności obliczeniowej ,
- Bellmana-Forda o pesymistycznej złożoności obliczeniowej O(VE),
- A*, używający heurystyki,
- nienazwany (przy założeniu, że graf jest skierowany i nie ma cykli) o pesymistycznej złożoności obliczeniowej O(V + E),
gdzie V to liczba wierzchołków grafu, a E to liczba jego krawędzi.
Drugi szczególny przypadek problemu najkrótszej ścieżki występuje, gdy chcemy znaleźć najkrótsze ścieżki pomiędzy każdą parą wierzchołków. Oczywiście możliwe jest zrobienie tego dla każdego wierzchołka używając algorytmu znajdującego najkrótszą ścieżkę od jednego wierzchołka do wszystkich innych, jednak metoda ta okazuje się w praktyce niezbyt efektywna. Najkrótsze ścieżki pomiędzy wszystkimi wierzchołkami znajdują m.in. algorytmy:
- nienazwany (wykorzystuje mnożenie macierzy) o pesymistycznej złożoności obliczeniowej
- Floyda-Warshalla o pesymistycznej złożoności obliczeniowej O(V3),
- Johnsona o pesymistycznej złożoności obliczeniowej
gdzie V to liczba wierzchołków.