Algorytm zachłanny

Algorytm zachłanny

Algorytm zachłanny (ang. greedy algorithm) to metoda, która w każdym kroku przy wyznaczaniu rozwiązania dokonuje wyboru, który na dany moment wydaje się najkorzystniejszy, nie analizując dalszych konsekwencji tego działania. W praktyce oznacza to, że algorytm ten podejmuje decyzje lokalnie optymalne, wybierając rozwiązanie, które w danej chwili wydaje się najlepsze, kontynuując rozwiązywanie podproblemu wynikającego z tej decyzji.

Typowe zadania rozwiązywane przy użyciu metody zachłannej mają charakter optymalizacyjny, jednak nie zawsze prowadzą do uzyskania optymalnego rozwiązania.

Zbiór rozwiązań

Niech C będzie skończonym zbiorem, w którym wszystkie możliwe rozwiązania problemu P są podzbiorami zbioru C.

Ważne jest, aby istniało kryterium oceny jakości rozwiązania.

Przykład

Rozważmy problem znalezienia trasy podróży z Madrytu do Moskwy. Można go przedstawić jako problem z zakresu teorii grafów, gdzie wierzchołki grafu reprezentują punkty podróży (np. miasta, lotniska, stacje kolejowe, skrzyżowania dróg), a krawędzie odpowiadają możliwym trasom (autostrady, trasy przelotów, przejazdy pociągów itp.). Wagi krawędzi odpowiadają kosztom podróży (np. odległości, ceny biletów). Celem jest odnalezienie minimalnej ścieżki łączącej wierzchołki reprezentujące Madryt i Moskwę. Zbiór wszystkich rozwiązań C składa się zarówno z rozwiązań optymalnych, jak i nieoptymalnych tras, takich jak Madryt – Rzym – Moskwa czy Madryt – Rzym – Tel Awiw-Jafa – Hongkong – Moskwa.

Rozwiązanie zachłanne

Algorytm zachłanny konstruuje rozwiązanie, dodając do zbioru R (zazwyczaj początkowo pustego) elementy ze zbioru C. Wybiera z C element, nazwijmy go c, i sprawdza, czy dodanie go do zbioru R zgodnie z lokalnym kryterium optymalności jest optymalnym rozwiązaniem.

W obu przypadkach element c jest usuwany ze zbioru C.

Istnieje wiele problemów, w których można udowodnić, że rozwiązania zachłanne zawsze są optymalne, np. podczas znajdowania minimalnego drzewa rozpinającego czy najkrótszej ścieżki między dwoma punktami w grafie. W innych przypadkach algorytm zachłanny może przynieść dobre rezultaty jedynie w specyficznych sytuacjach.

Problem wydawania reszty

Algorytm wydawania reszty jest rozwiązaniem zachłannym w przypadku niektórych zestawów monet, takich jak systemy europejskie (1/2/5 € lub zł) czy amerykański. W innych sytuacjach algorytm nie działa poprawnie.

Na przykład, mając dwa rodzaje monet: 2 zł i 5 zł, musimy obliczyć, jaką ilość oraz jakie monety należy wydać, aby reszta wynosiła 6 zł.

Jeżeli algorytm za pierwszą monetę wybierze „piątkę”, to:

1 ⋅ 5 zł jest bliżej osiągnięcia wyniku końcowego (jest to lokalnie lepsze rozwiązanie) niż 1 ⋅ 2 zł. Jednak w kolejnym kroku okaże się, że droga zachłanna była błędna. Wybierając inne monety, docieramy do prawidłowego i optymalnego rozwiązania.

Poprawność rozwiązania zachłannego

Nie ma uniwersalnej metody dowodzenia, czy dla danego problemu rozwiązanie zachłanne zawsze prowadzi do poprawnego (i optymalnego) wyniku. Istnieją jednak kryteria, które mogą wskazywać, że dla danego problemu zastosowanie metody zachłannej jest możliwe.

Własność zachłannego wyboru

Dzięki lokalnie optymalnym wyborom można uzyskać optymalne rozwiązanie całego zadania.

Własność optymalnej podstruktury

Optymalne rozwiązanie całego problemu można osiągnąć jedynie przy założeniu, że podproblemy również mają optymalne rozwiązania.

Przykłady algorytmów zachłannych

  • Algorytm Dijkstry
  • Algorytm Kruskala
  • Algorytm Prima
  • Algorytm szeregowania zadań

Zobacz też

Przypisy

Bibliografia

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Wprowadzenie do algorytmów. Warszawa: Wydawnictwa Naukowo-Techniczne, 2007. ISBN 978-83-204-3328-9.

Przeczytaj u przyjaciół: