Pe scurt
Metoda greedy construiește soluția prin alegeri locale considerate cele mai bune la momentul respectiv. Ea este corectă numai când se poate demonstra că aceste alegeri duc la o soluție optimă globală. De exemplu, la selectarea unui număr maxim de intervale care nu se suprapun, alegerea intervalului ce se termină cel mai devreme permite loc pentru cât mai multe intervale ulterioare.
În detaliu
Metoda greedy construiește soluția în pași succesivi; la fiecare pas alege, dintre candidații disponibili, pe cel considerat cel mai bun după un criteriu local și nu mai revine asupra alegerii. Ea este rapidă, dar este corectă numai pentru problemele la care se poate demonstra că alegerile locale duc la un optim global. Pentru a folosi metoda se identifică criteriul de alegere, ordinea de examinare a candidaților (adesea sortarea lor după acel criteriu) și condiția de acceptare a unui candidat. Dacă pentru o problemă criteriul nu este demonstrat, algoritmul poate da un rezultat care este valid, dar nu optim.
Exemplul 1 — selectarea intervalelor compatibile. Se cere numărul maxim de intervale care nu se suprapun, dintre intervalele , , , , , . Criteriul corect este să se aleagă mereu intervalul care se termină cel mai devreme. Intervalele se sortează crescător după capătul drept: , , , , , . Se examinează în ordine:
- se alege, iar ultimul capăt devine 2.
- începe la 3, după capătul 2, deci se alege; ultimul capăt este 4.
- începe la 2, înaintea lui 4, deci se respinge.
- începe la 4, adică chiar la capătul precedent; dacă atingerea la capăt este permisă, se alege, iar ultimul capăt este 6.
- începe la 5, înaintea lui 6, deci se respinge.
- începe la 6 și se alege.
Se aleg patru intervale: , , și . Alegerea după intervalul cel mai scurt sau după începutul cel mai devreme nu garantează același optim.
#include <iostream>
using namespace std;
int main() {
int st[] = {1, 3, 2, 4, 5, 6}, dr[] = {2, 4, 5, 6, 7, 8};
int ultim = -1, nr = 0;
for (int i = 0; i < 6; ++i)
if (st[i] >= ultim) {
++nr;
ultim = dr[i];
}
cout << nr;
return 0;
}
Intervalele sunt deja ordonate după capătul drept, iar programul afișează 4.
Exemplul 2 — restul în monede. Pentru monedele 1, 5, 10 și 50 și suma 87, greedy ia mereu cea mai mare monedă care încape: 50, apoi 10, 10, 10, apoi 5, apoi 1 și 1. Sunt 7 monede și acesta este optimul pentru acest sistem de monede.
Exemplul 3 — când greedy nu merge. Pentru monedele 1, 3 și 4 și suma 6, greedy ia 4, apoi 1 și 1, adică 3 monede. Optimul este însă 3 + 3, doar 2 monede. Alegerea locală cea mai bună (moneda cea mai mare) nu duce la optimul global. Pentru astfel de sisteme de monede se folosește programarea dinamică. Concluzia este că o soluție greedy cere o demonstrație pentru problema respectivă sau un contraexemplu care arată că nu merge.
Contraexemplu pentru criteriul „cel mai scurt interval”: din , și cel mai scurt este , iar alegerea lui le respinge pe celelalte două, deci rezultă un singur interval. Criteriul capătului drept ia și apoi , adică două intervale.
Greșeli frecvente
- Greșit: metoda greedy dă mereu soluția optimă.Corect: dă optimul numai când alegerea locală este demonstrat corectă pentru problemă.
- Greșit: pentru selectarea intervalelor se alege intervalul cel mai scurt.Corect: criteriul corect este capătul drept cel mai mic.
- Greșit: la monede, cea mai mare monedă care încape duce la numărul minim de monede pentru orice sistem.Corect: pentru monedele 1, 3, 4 și suma 6 nu merge.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI intensiv; rocnee.eu
Documente consultate
- OMECI 5099/2009, anexa 5, Informatică XII mate-info, p. 4–5
- Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programele școlare noi de informatică pentru clasele X–XII (OMEC 4370/2026, MO 591 bis/20.07.2026), CNCE; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform OMECI 5099/2009, Informatică XII; informatica.isj-db.ro
