Algorytmy zachłanne (Greedy Algorithms): kiedy działają, a kiedy zawodzą? Przykłady zastosowań
⚙️ Algorytmy zachłanne (Greedy Algorithms): kiedy działają, a kiedy zawodzą? Przykłady zastosowań
📌 Wprowadzenie
Algorytmy zachłanne to jedno z najprostszych, ale i najbardziej fascynujących podejść do rozwiązywania problemów algorytmicznych. Wybierają one lokalnie najlepszą decyzję w każdej iteracji, licząc, że prowadzi to do globalnego optimum.
🎯 W tym artykule:
- Co to są algorytmy zachłanne?
- Kiedy są skuteczne?
- Kiedy zawodzą i dlaczego?
- Przykłady praktycznych zastosowań.
🧠 Czym są algorytmy zachłanne?
Algorytm zachłanny (greedy) działa na zasadzie wybierania w każdej chwili najlepszego rozwiązania lokalnego z nadzieją, że doprowadzi ono do optymalnego rozwiązania globalnego.
🔁 Schemat działania:
- Wybierz możliwą opcję, która wydaje się najlepsza w danym momencie.
- Wykonaj ją.
- Powtórz aż do osiągnięcia końca problemu.
✅ Zalety algorytmów zachłannych
- 🚀 Bardzo szybkie (często O(n log n) lub O(n)),
- 🧩 Łatwe do implementacji,
- 📉 Zużywają mało pamięci (nie wymagają przeszukiwania przestrzeni stanów).

❌ Wady algorytmów zachłannych
- ❗ Nie zawsze dają optymalne rozwiązanie,
- ⚠️ Wymagają dowodu, że lokalna decyzja prowadzi do globalnego optimum,
- 🚫 Czasem trzeba użyć algorytmów dynamicznych lub przeszukiwania z nawrotem (backtracking), jeśli zachłanne podejście zawodzi.
🧪 Klasyczne problemy rozwiązywalne algorytmami zachłannymi
1. 📦 Problem plecakowy (Knapsack problem – wersja 0/1 vs. ciągła)
| Rodzaj problemu | Działa algorytm zachłanny? |
|---|---|
| 🧳 Ciągły (Fractional Knapsack) | ✅ Tak |
| 🧳 0/1 Knapsack | ❌ Nie (potrzebna programowanie dynamiczne) |
🔹 Opis: Dla wersji ciągłej wybieramy przedmioty o największym stosunku wartości do wagi.
2. 🕒 Problem aktywności (Activity Selection)
🎯 Wybierz maksymalną liczbę niepokrywających się zadań z listy o określonym czasie rozpoczęcia i zakończenia.
📌 Działa zachłannie: Sortujemy zadania po czasie zakończenia i wybieramy kolejne możliwe.
✅ Rozwiązanie optymalne.
3. 💰 Problem wydawania reszty (Coin Change Problem)
- Działa tylko w przypadku „europejskiego” systemu monetarnego (np. 1, 2, 5, 10…).
- ❌ Nie działa dla dowolnych nominałów.
🔍 Przykład błędu zachłannego: Monety: 1, 3, 4
Kwota: 6
Greedy wybierze: 4 + 1 + 1 = 3 monety
Optymalne: 3 + 3 = 2 monety
4. 🌐 Minimalne drzewa rozpinające (Minimum Spanning Tree)
- 📌 Dwa algorytmy zachłanne: Prim i Kruskal
- Działają optymalnie w grafach nieskierowanych i spójnych
🧭 Zastosowanie: sieci komputerowe, połączenia drogowe, telekomunikacja.
5. 📡 Algorytm Dijkstry
✅ Zachłanny algorytm do znajdowania najkrótszych ścieżek z jednego wierzchołka w grafie z nieujemnymi wagami krawędzi.
⚠️ Przykłady, gdzie algorytmy zachłanne zawodzą
❌ Problem komiwojażera (TSP)
Greedy wybiera najbliższe miasto na każdym kroku — nie daje rozwiązania optymalnego w większości przypadków.
❌ Problem kolorowania grafu
Greedy może używać więcej kolorów niż potrzeba. Nie zawsze znajduje minimalne kolorowanie.
📊 Tabela: Podsumowanie skuteczności
| Problem | Algorytm zachłanny | Rozwiązanie optymalne? |
|---|---|---|
| Fractional Knapsack | ✅ Tak | ✅ Tak |
| 0/1 Knapsack | ✅ Częściowo | ❌ Nie |
| Activity Selection | ✅ Tak | ✅ Tak |
| Coin Change (standardowe monety) | ✅ Tak | ✅ Tak |
| Coin Change (niestandardowe monety) | ✅ Częściowo | ❌ Nie |
| TSP | ✅ Częściowo | ❌ Nie |
| MST (Kruskal/Prim) | ✅ Tak | ✅ Tak |
| Dijkstra | ✅ Tak | ✅ Tak |
🧰 Wskazówki do projektowania algorytmów zachłannych
- 🎯 Określ funkcję zachłanności – co znaczy „najlepszy wybór” w danym kroku?
- ✅ Udowodnij poprawność – użyj dowodu zachłanności (np. indukcja).
- 🔄 Sprawdź inne podejścia – dynamiczne, rekurencyjne – dla porównania.
🏗️ Praktyczne zastosowania
- 📶 Kompresja danych (Huffman coding),
- 🛣️ Wyznaczanie tras w GPS,
- 🧠 Harmonogramowanie zadań w systemach operacyjnych,
- 📡 Budowa sieci telekomunikacyjnych (MST),
- 🛍️ Rekomendacje i filtrowanie (np. wybór najlepszych ofert).
🏁 Podsumowanie
Algorytmy zachłanne są szybkie, eleganckie i często bardzo skuteczne. Jednak ich stosowanie wymaga rozwagi – nie zawsze prowadzą do najlepszego rozwiązania.
✅ Stosuj je, gdy:
- Można udowodnić poprawność strategii zachłannej,
- Problem jest odpowiednio prosty lub strukturalnie „zachłanny”,
- Czas obliczeń jest kluczowy.
⚠️ Unikaj, gdy:
- Istnieje ryzyko lokalnego optimum,
- Problem wymaga uwzględnienia wielu scenariuszy naraz.





