|
|||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
Algorytm Prima lub algorytm Dijkstry-Prima – algorytm zachłanny wyznaczający tzw. minimalne drzewo rozpinające (MDR). Mając do dyspozycji graf nieskierowany i spójny, tzn. taki w którym krawędzie grafu nie mają ustalonego kierunku oraz dla każdych dwóch wierzchołków grafu istnieje droga pomiędzy nimi, algorytm oblicza o podzbiór E' zbioru krawędzi E, dla którego graf nadal pozostaje spójny, ale suma kosztów wszystkich krawędzi zbioru E' ma najmniejszą możliwą wartość. Grafy zawierające dużo krawędzi, w których dwa te same wierzchołki połączone są np. trzema krawędziami lub pomiędzy dwoma wierzchołkami istnieje np. 5 różnych dróg długości 2, raczej nie są "lubiane" przez algorytmy i często przekształcenie takiego skomplikowanego grafu w graf mu równoważny pod względem zachowania możliwych połączeń przynosi znaczące korzyści.
edytuj AlgorytmAlgorytm Prima wygląda tak:
edytuj Dowód poprawnościNiech dany będzie graf Zakładamy, że drugi algorytm, podobnie jak algorytm Prima pobiera kolejne gałęzie grafu wejściowego, dołączając je do początkowo pustego drzewa wynikowego (odpowiednio Tp i Topt). Załóżmy, że dla pierwszych i gałęzi algorytmy zadziałały tak samo, tj. krawędzie Niech Ponieważ wybór e był niezachłanny, to waga e jest nie większa niż waga f. Niech Wtedy
co jest sprzeczne z wyborem Podobne rozumowanie można przeprowadzić dla kolejnych dołączanych do drzew wynikowych krawędzi. Wniosek – nie może istnieć drzewo spinające o sumie wag mniejszej, niż drzewo odnalezione algorytmem Prima – algorytm Prima zawsze odnajduje minimalne drzewo spinające. edytuj Zobacz teżedytuj Linki zewnętrzne |
| All Right Reserved © 2007, Designed by Stylish Blog. |