Podejście zachłanne – jak wybierać najlepszy krok tu i teraz

1. Wstęp – co znaczy być „zachłannym”?

Na co dzień „zachłanny” oznacza kogoś, kto chce wszystko od razu.
W informatyce to nie wada, tylko strategia.
Podejście zachłanne (ang. greedy approach) polega na tym, że w każdej chwili wybieramy najlepsze rozwiązanie lokalne, licząc na to, że doprowadzi nas ono do najlepszego rozwiązania ogólnego.

Czyli: nie myślę o całym planie, tylko o tym, co teraz da mi najwięcej zysku.


2. Przykłady z życia codziennego

Żeby to zrozumieć, nie trzeba znać żadnego języka programowania.
Wystarczy pomyśleć o codziennych sytuacjach.

Przykład 1: Wybieranie drogi do szkoły
Masz kilka ulic i skrzyżowań.
Zamiast sprawdzać wszystkie możliwe trasy (jak GPS z programowaniem dynamicznym), skręcasz zawsze tam, gdzie ruch wygląda najmniejszy.
To decyzja zachłanna – nie analizujesz całości, tylko reagujesz na bieżąco.

Przykład 2: Łapanie cukierków
Na stole masz rozsypane cukierki.
Nie planujesz, które zebrać – sięgasz po najbliższy.
To też zachłanność: bierzesz to, co w danej chwili wygląda najlepiej.

Przykład 3: Wydawanie reszty w sklepie
Masz wydać klientowi 47 zł.
Zaczynasz od największego możliwego nominału: 20 + 20 + 5 + 2.
Nie kombinujesz z innymi układami – zawsze wybierasz największy banknot, który „pasuje”.
To właśnie klasyczny algorytm zachłanny.


3. Idea podejścia zachłannego

Wybieraj najlepsze rozwiązanie lokalne, mając nadzieję, że doprowadzi cię do najlepszego rozwiązania globalnego.

Czyli krok po kroku:

  1. Masz problem do rozwiązania.
  2. Wybierasz najbardziej opłacalny ruch w danym momencie.
  3. Zmieniasz sytuację na prostszą (pozostały mniejszy problem).
  4. Powtarzasz decyzję, aż nie zostanie nic do rozwiązania.

Nie analizujesz wszystkiego – tylko to, co przed tobą.


4. Podejście zachłanne a inne metody

MetodaJak działaPrzykład
RekurencjaDzieli problem na mniejsze części, rozwiązuje każdą osobnoSilnia, ciąg Fibonacciego
Programowanie dynamiczneZapamiętuje wcześniejsze wyniki, by nie liczyć ich ponownieNajkrótsza ścieżka, plecak 0/1
Podejście zachłanneWybiera najlepszy lokalny krok bez cofania sięWydawanie reszty, wybór najkrótszego odcinka

Zachłanność jest szybka, ale nie zawsze idealna — czasem „optymalne na teraz” nie znaczy „najlepsze na końcu”.


5. Klasyczny przykład – wydawanie reszty

Masz monety: 1, 2, 5, 10 zł.
Musisz wydać 47 zł, używając jak najmniejszej liczby monet.

Algorytm zachłanny:
zawsze wybierz największą monetę, która nie przekracza reszty.

def wydaj_reszte(kwota, monety):
    wynik = []
    for m in monety:
        while kwota >= m:
            kwota -= m
            wynik.append(m)
    return wynik

monety = [10, 5, 2, 1]  # od największej do najmniejszej
print(wydaj_reszte(47, monety))

Wynik:

[10, 10, 10, 10, 5, 2]

Czyli 47 zł wydane za pomocą sześciu monet – bez planowania, po prostu zachłannie.


6. Drugi przykład – pakowanie plecaka (wersja zachłanna)

Masz plecak, który pomieści 10 kg.
Każdy przedmiot ma wagę i wartość.
Zachłanny algorytm wybierze te o największym stosunku wartości do wagi, aż zapełni plecak.

przedmioty = [
    ("złoto", 3, 100),
    ("srebro", 4, 60),
    ("miedz", 5, 40),
]

pojemnosc = 7
posortowane = sorted(przedmioty, key=lambda x: x[2]/x[1], reverse=True)

waga = 0
wartosc = 0
for nazwa, w, v in posortowane:
    if waga + w <= pojemnosc:
        waga += w
        wartosc += v
        print(f"Biorę {nazwa}")

print("Suma wartości:", wartosc)

Wynik:

Biorę złoto
Biorę srebro
Suma wartości: 160

Algorytm nie szuka idealnego układu – bierze to, co się opłaca w danej chwili.


7. Kiedy podejście zachłanne działa dobrze

Zachłanne rozwiązania dają dobry wynik wtedy, gdy problem ma tzw. „własność zachłanności” – czyli najlepszy lokalny krok prowadzi do najlepszego globalnego wyniku.

Przykłady, gdzie to działa:

  • wydawanie reszty (jeśli nominały są dobrze dobrane),
  • wybieranie najkrótszego połączenia w sieci (algorytm Kruskala, Prima),
  • planowanie zadań z najkrótszym czasem wykonania.

Przykłady, gdzie to nie działa:

  • problem plecakowy 0/1 (czasem warto zrezygnować z droższej rzeczy dla lepszego układu),
  • niektóre labirynty (skręt w lewo nie zawsze skróci trasę).

8. Podejście zachłanne a człowiek

Człowiek też myśli zachłannie — często wybiera to, co daje natychmiastową nagrodę:

  • idzie krótszą drogą, zamiast sprawdzić, czy tam są korki,
  • kupuje coś na promocji, nie patrząc, czy naprawdę potrzebuje,
  • wybiera najłatwiejsze rozwiązanie, zamiast długofalowo lepszego.

W programowaniu – tak jak w życiu – czasem to działa, a czasem nie.


9. Schemat myślenia zachłannego

START

Wybierz to, co w danym momencie wygląda najlepiej

Zaktualizuj dane (zmniejsz problem)

Jeśli coś zostało do zrobienia → wróć do początku

KONIEC

10. Zadania dla uczniów

Zadanie 1 – Wydaj resztę
Napisz program, który wydaje resztę zachłannie.
Użytkownik podaje kwotę, a program pokazuje, jakimi monetami ją wydać.
Spróbuj dodać nominał 3 zł i sprawdź, czy wynik nadal jest idealny.

Zadanie 2 – Zachłanne zbieranie punktów
Masz listę punktów w grze o różnych wartościach i czasie dotarcia.
Wybieraj zawsze ten punkt, który daje najwięcej punktów za sekundę.
Czy to zawsze najlepsza strategia?

Zadanie 3 – Porównanie metod
Weź problem „wydawania reszty” i rozwiąż go dwoma sposobami:

  1. zachłannie,
  2. wszystkimi możliwymi kombinacjami (np. pętlą lub rekurencją).
    Porównaj wyniki i czas działania.

11. Podsumowanie

  • Podejście zachłanne to sposób rozwiązywania problemów, w którym w każdej chwili wybieramy najlepszą lokalną opcję.
  • Jest szybkie i proste, ale nie zawsze gwarantuje najlepszy wynik ogólny.
  • Działa świetnie w problemach, gdzie najlepszy lokalny wybór naprawdę prowadzi do najlepszego globalnego.
  • W życiu, matematyce i informatyce często trzeba wybrać między „mądrą zachłannością” a „cierpliwą analizą”.

12. Do zapamiętania

Zachłanny program nie planuje – reaguje.
Wybiera to, co wygląda najlepiej teraz, wierząc, że to doprowadzi go do celu.