Sunteți pe pagina 1din 4

Greedy Lectia 1

Metoda Greedy
Metoda de programare Greedy se aplică problemelor de optimizare.
Aceasta metoda constă în faptul că se construieşte soluția optimă pas cu pas,
la fiecare pas fiind selectat în soluție elementul care pare „cel mai bun/cel
mai optim” la momentul respectiv, în speranța că această alegere locală va
conduce la optimul global.
Algoritmii Greedy sunt foarte eficienți, dar nu conduc în mod necesar la
o soluție optimă.
Şi nici nu este posibilă formularea unui criteriu general conform căruia să
putem stabili exact dacă metoda Greedy rezolvă sau nu o anumită problemă
de optimizare. Din acest motiv, orice algoritm Greedy trebuie însoțit de o
demonstrație a corectitudinii sale . Demonstrația faptului că o anumită
problemă are proprietatea alegerii Greedy se face de obicei prin inducție
matematică.
Metoda Greedy se aplică problemelor pentru care se dă o mulţime A
cu n elemente şi pentru care trebuie determinată o submulţime a sa, S cu m
elemente, care îndeplinesc anumite condiţii, numite si condiții de optim.
Algoritmul în limbaj natural al metodei de programare Greedy are
următoarea structură:

Algoritm Greedy:

se dă o mulţime A

se cere o submulţime S din mulțimea A care să:

îndeplinească anumite condiţii interne (să fie acceptabilă)

fie optimală (să realizeze un maxim sau un
minim). Principiul metodei Greedy:

se iniţializează mulţimea soluţiilor S cu mulţimea vidă, S=Ø

la fiecare pas se alege un anumit element x∈A (cel mai promiţător
element la momentul respectiv) care poate conduce la o soluţie optimă

se verifică dacă elementul ales poate fi adăugat la mulţimea soluţiilor:

dacă da atunci

va fi adăugat şi mulţimea soluţiilor devine S=S𝖴{x} - un
element introdus în mulţimea S nu va mai putea fi eliminat

altfel

el nu se mai testează ulterior

procedeul continuă, până când au fost determinate toate
elementele din mulţimea soluţiilor
Principiul metodei Greedy:
• se iniţializează mulţimea soluţiilor S cu mulţimea vidă, S=Ø
• la fiecare pas se alege un anumit element x∈A (cel mai promiţător
element la momentul respectiv) care poate conduce la o soluţie optimă
• se verifică dacă elementul ales poate fi adăugat la mulţimea soluţiilor:
- dacă da, atunci va fi adăugat şi mulţimea soluţiilor devine S=S𝖴{x}
- un element introdus în mulţimea S nu va mai putea fi eliminat
- dacă nu, el nu se mai testează ulterior
• procedeul continuă, până când au fost determinate toate elementele
din mulţimea soluţiilor

Algoritmul metodei Greedy:

S=
cât timp !Solutie(S) și A≠ execută
Alege(A,x)
Elimină(A,x)
dacă Posibil(S,x) atunci
Adauga(S,x)

dacă Solutie(S) atunci


scrie S
altfel
scrie ”Nu există soluție”

unde: Solutie(S) testează dacă S soluție


optimă

Alege(A,x) extrage cel mai promițător


element x din A

Posibil(S,x) testează dacă este posibil să se


obțină o soluție
#91 Masini
În curtea unui atelier de reparaţii auto, sunt n maşini care trebuie sa fie reparate. Deoarece nu
sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.

Cerinţa
Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează
numărul maxim de maşini care pot fi reparate într-un interval de timp T.

Date de intrare
Pe prima linie a fişierului masini.in se găsesc două numere naturale n şi T separate printr-un
singur spaţiu, reprezentând numărul de maşini din curtea atelierului auto şi timpul total în care
se va lucra.
Pe linia a doua, separate prin câte un spaţiu, se găsesc n numere naturale t , t , …, t ,
1 2 n

reprezentând timpii necesari pentru repararea fiecărei maşini.

Date de ieşire
Pe prima linie a fişierului masini.out se va găsi un număr natural k, reprezentând numărul
maxim de maşini care pot fi reparate.

Restricţii şi precizări
 1 < n, T <= 1000
 numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu 100

Exemplu
masini.in

5 10
6 2 4 8 2

masini.out

Explicație
Se vor repara masinile 2, 3 şi 5, cu timpii de reparaţie 2, 4 şi 2.
Prof I. Maftei

S-ar putea să vă placă și