Algorytm zachłanny (ang. greedy algorithm) – algorytm, który w celu wyznaczenia rozwiązania w każdym kroku dokonuje zachłannego, tj. najlepiej rokującego w danym momencie wyboru rozwiązania częściowego. Innymi słowy algorytm zachłanny nie patrzy czy w kolejnych krokach jest sens wykonywać dane działanie, dokonuje decyzji lokalnie optymalnej, dokonuje on wyboru wydającego się w danej chwili najlepszym, kontynuując rozwiązanie podproblemu wynikającego z podjętej decyzji. Typowe zadanie rozwiązywane metodą zachłanną ma charakter optymalizacyjny. W dziedzinie sztucznej inteligencji zachłanna odmiana przeszukiwania lokalnego jest nazywana "podchodzeniem pod wzgórze".
Zbiór rozwiązań
Niech C będzie zbiorem skończonym, takim, że wszystkie możliwe rozwiązania dylematu P są podzbiorami C.
Musi być znane kryterium pozwalające oceniać jakość rozwiązania
Przykład
Dany jest problem znalezienia trasy podróży z Madrytu do Moskwy. Można na niego spojrzeć jako problem z dziedziny teorii grafów – jeżeli z wierzchołkami grafu utożsami się punkty podróży (miasta, lotniska, stacje kolejowe, skrzyżowania dróg itp.) a z krawędziami możliwe trasy przebiegu (autostrady, trasy przelotu samolotów, przejazdu pociągów itp.), z wagami odpowiadającymi kosztom podróży (odległości, ceny biletów itp.) to zadanie sprowadza się do odnalezienia minimalnej ścieżki łączącej wierzchołki opowiadające Madrytowi oraz Moskwie, a zbiór wszystkich rozwiązań C składa się z rozwiązań zarówno optymalnych jak oraz propozycji tras typu Madryt–Rzym–Moskwa czy nawet tak nieoptymalnych jak Madryt–Rzym–Tel Awiw–Hongkong–Moskwa
Rozwiązanie zachłanne
Algorytm zachłanny buduje zadanie dodając do zbioru R (najczęściej pustego na początku) elementy z C, tj. wybiera z C element, powiedzmy c, oraz sprawdza czy wedle lokalnego (zachłannego) kryterium optymalności
jest optymalnym rozwiązaniem. W obu przypadkach element c jest usuwany ze zbioru C.
Istnieje wiele problemów, dla których udowodnić można, że rozwiązanie zachłanne jest stale optymalne - pomiędzy innymi znajdowanie minimalnego drzewa rozpinającego, czy znajdowanie najkrótszej ścieżki między dwoma punktami w grafie. W przypadku innych problemów zachłanność może opłacać się zaledwie w szczególnych przypadkach.
Problem wydawania reszty
-
Algorytm wydawania reszty w przypadku poniektórych zestawów monet jest rozwiązywalny na sposób zachłanny - pomiędzy innymi w przypadku systemów europejskich (1/2/5 € albo zł), albo systemu amerykańskiego. W innych przypadkach jednak algorytm się nie sprawdzi.
Przykładowo, dane są dwa rodzaje monet: 2 zł oraz 5 zł. Należy obliczyć ile, oraz jakich monet trzeba wydać, by reszta wynosiła 6 zł.
Gdy dobór pierwszej monety będzie zachłanny (tj. algorytm wybierze jedną "piątkę", bo
jest bliżej wyniku ostatecznego (jest lokalnie lepszym rozwiązaniem), niż
. Jednak już w następnym kroku okaże się, że droga zachłanna była w tym przypadku drogą ślepą. Postępując niezachłannie ostatecznie dochodzimy do prawidłowego oraz optymalnego wyniku.
Poprawność rozwiązania zachłannego
Nie istnieje ogólna metoda dowodzenia, czy dla danego dylematu rozwiązanie zachłanne (zawsze) odnajduje poprawny (i optymalny) wynik. Istnieją jednak stosujące się do samego dylematu kryteria, pozwalające sądzić, iż dla owego dylematu istnieje rozwiązanie zachłanne.
Własność zachłannego wyboru
- za pomocą lokalnie optymalnych (zachłannych) wyborów da się uzyskać optymalne rozwiązanie całego zadania
Własność optymalnej podstruktury
-
- optymalne rozwiązanie całego dylematu jest możliwe tylko przy optymalnym rozwiązaniu podproblemów
Przykłady algorytmów zachłannych
Sprawdź też