Algoritmii de tip greedy vor să construiască într-un mod cât mai rapid soluția unei probleme.Ei se caracterizează prin luarea unor decizii rapide care duc la găsirea unei soluții potențiale a problemei.
Este in înțeles de ce un astfel de algoritm se numeste “lacom” (greedy), deoarece la fiecare pas, funcția alege cel mai bun candidat la momentul respectiv, fără să-i pese de viitor și fără să revină asupra alegerii. Daca un candidat este inclus în soluție, el rămâne în soluție, iar dacă un candidat este exclus din soluție, el nu va mai fi niciodată reconsiderat.
Descrierea formală a algoritmului este următoarea:
function Greedy (C) //C = mulțimea candidaților //în S construim soluția S = ∅; while( !solutie(C) && C != ∅) x = un element din C care miniminează/maximizează select(x); C = C\(x); if( fezabil(S∪(x)) S = S∪(x); return S;
Se dau mai multe spectacole, prin timpii de start și timpii de final.
Se cere o planificare astfel încât o persoană să poată vedea cât mai multe spectacole.
Rezolvarea constă în sortarea spectacolelor crescător după timpii de final, apoi la fiecare pas se alege primul spectacol care are timpul de start mai mare decât ultimul timp de final. Timpul inițial de final este inițializat la infinit (Spectacolul care se termină cel mai devreme va fi mereu selectat, având timp de start mai mare decât timpul inițial)
Găsiți o mulțime de puncte de cardinal minim M astfel încât pentru orice interval [ai, bi] din cele N, să existe un punct x din M care să aparțină intervalului [ai, bi].
Exemplu:
Soluție:Se observă că dacă x este un punct din M care nu este capăt dreapta al nici unui interval, o translație a lui x la dreapta care îl duce în capătul dreapta cel mai apropiat nu va schimba intervalele care conțin punctul. Prin urmare,există o mulțime (M) de cardinal minim pentru care toate punctele x sunt capete dreapta.
Un rucsac ca poate transporta o greutate G, trebuie încărcat cu obiecte alese dintre 'n' obiecte, fiecare având o anumită greutate (g) și un anumit profit (importanță)(p) sau câștig. Se cere să se determine obiectele ce trebuie încărcate în rucsac astfel încât profitul (caștigul) să fie maxim.
Există posibilitatea ca obiectele să fie tăiate. În acest fel se poate obține o încărcare mai eficientă a rucsacului:
Un comis-voiajor stă într-un oraş (X1) şi vrea să viziteze toate cele N oraşe dintr-o regiune (X1, X2, …, XN), plecând dimineaţa de acasă (X1) şi întorcandu-se (tot în X1) la finalul zilei.
În mod ideal, el îşi doreşte să viziteze fiecare oraş exact o singură dată (excepţie făcând numai oraşul X1 unde se întoarce seara), iar drumul găsit să fie cât mai scurt.
Problema poate fi modelată cu grafuri (oraş = nod, drum între 2 oraşe = muchie) şi cerinţa devine găsirea unui Ciclu/Circuit Hamiltonian minim (un ciclu care conţine o singură dată fiecare nod, cu excepţia nodului de plecare care coincide doar cu nodul final, şi care este de cost minim).
Varianta Greedy + revenire: -la fel ca varianta Greedy (pură), dar permitem revenirea în cazul unui blocaj, respectând parcurgerea DFS (eliminăm nodul curent din soluţie, ne întoarcem la nodul găsit imediat înainte de nodul curent şi, din acel nod, alegem următoarea variantă).