Zaawansowane algorytmy i struktury danych/Wykład 5: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 24: | Linia 24: | ||
wierzchołków wraz z ich wagami. | wierzchołków wraz z ich wagami. | ||
=== Relaksacja === | |||
=== Relaksacja === | |||
Podobnie ja to było w [[algorytm_dijkstry|Algorytmie Dijkstry]] | Podobnie ja to było w [[algorytm_dijkstry|Algorytmie Dijkstry]] | ||
użyjemy metody relaksacji. Metoda ta polega na tym, że w trakcie | użyjemy metody relaksacji. Metoda ta polega na tym, że w trakcie | ||
Linia 53: | Linia 52: | ||
górnymi na odległości. | górnymi na odległości. | ||
relaksacja|Relaksacja]] krawędzi <math>(u,v)</math> polega na | [[relaksacja|Relaksacja]] krawędzi <math>(u,v)</math> polega na | ||
sprawdzeniu, czy przechodząc krawędzią <math>(u,v)</math> z | sprawdzeniu, czy przechodząc krawędzią <math>(u,v)</math> z | ||
<math>u</math> do <math>v</math>, nie otrzymamy krótszej ścieżki z | <math>u</math> do <math>v</math>, nie otrzymamy krótszej ścieżki z | ||
Linia 67: | Linia 66: | ||
\pi(v) = u | \pi(v) = u | ||
}} | }} | ||
=== Algorytm === | |||
Po przypomnieniu czym była relaksacja gotowi jesteśmy na zapisanie algorytm | |||
Bellmana-Forda, a następnie udowodnienie jego poprawności. |
Wersja z 20:57, 19 lip 2006
Abstrakt
Pierwsza część tego wykładu poświęcona będzie problemowi obliczania najkrótszych ścieżek w grafie z jednego źródła w przypadku, w którym wagi krawędzi mogą być ujemne. Zaprezentujemy algorytm Bellmana-Forda, który rozwiązuje ten problem w czasie . W drugiej części zajmiemy się problemem obliczania odległości między wszystkimi parami wierzchołków. Pokażemy związki tego problemu z mnożeniem macierzy.
Algorytm Bellmana-Forda
Algorytm Bellmana-Forda służy do rozwiązania problemu
znalezienia najkrótszych ścieżek w grafie, w którym wagi krawędzi
mogą być ujemne. W problemie tym mamy dany graf
i funkcję wagową . Algorytm
Bellmana-Forda wylicza dla zadanego wierzchołka , czy
istnieje w grafie cykl o ujemnej wadze osiągalny z
. Jeżeli taki cykl nie istniej to algorytm oblicza
najkrótsze ścieżki z do wszystkich pozostałych
wierzchołków wraz z ich wagami.
Relaksacja
Podobnie ja to było w Algorytmie Dijkstry użyjemy metody relaksacji. Metoda ta polega na tym, że w trakcie działania algorytmu dla każdego wierzchołka utrzymujemy wartość będącą górnym ograniczeniem wagi najkrótszej ścieżki ze do . W algorytmie utrzymywać będziemy także dla każdego wierzchołka wskaźnik wskazujący na poprzedni wierzchołek przez, który prowadzi dotychczas znaleziona najkrótsza ścieżka.
Na początku wielkości te inicjujemy przy pomocy następującej procedury:
Algorytm Inicjalizacja algorytmu najkrótszych ścieżek
INICJALIZUJ for każdy wierzchołek do
Ustalone przez tą procedure wartości są dobrymi ograniczeniami
górnymi na odległości.
Relaksacja krawędzi polega na sprawdzeniu, czy przechodząc krawędzią z do , nie otrzymamy krótszej ścieżki z do niż ta dotychczas znaleziona. Jeżeli tak to aktualizowane są także wartości i . W celu relaksacji krawędzi używamy procedury RELAKSUJ.
Algorytm Relaksacja krawędzi
{{{3}}}
Algorytm
Po przypomnieniu czym była relaksacja gotowi jesteśmy na zapisanie algorytm Bellmana-Forda, a następnie udowodnienie jego poprawności.