Sunteți pe pagina 1din 12

Metoda greedy euristic

Prezentarea metodei
Implementri sugerate
Probleme propuse
Soluiile problemelor

Capitolul

3.1. Euristica greedy


Metoda greedy o aplicm n cazul n care se caut un optim. Dac n cazul unei probleme aceast metod gsete optimul pentru anumite date de test, iar pentru alte date fie nu
gsete soluia (raporteaz c nu exist soluie), fie ofer o soluie care nu este optim,
spunem c metoda este euristic. Chiar dac originea cuvntului face trimitere la descoperire, s-ar putea ca metoda s ne dezamgeasc n cazul anumitor probleme.
Totui, n cazul acelor probleme pentru care rezultatul exact este furnizat de o metod de complexitate mrit, cum ar fi metoda backtracking, s-ar putea s ne mulumeasc
i rezultatele gsite de o euristic de tip greedy.
Exemplu
Fie o problem clasic din aceast clas de probleme. Un vnztor trebuie s dea
rest unui client S lei. El are la dispoziie bancnote avnd valorile b1, b2, , bn, n numr nelimitat. Trebuie s afim o modalitate de a da rest, tiind c vnztorul dorete
s foloseasc ct mai puine bancnote.
Avnd n vedere cerina problemei de a folosi bancnote ct mai puine, vom ncerca
s alegem pentru nceput bancnota cea mai mare. n acest fel se acoper din sum o
cantitate mare, cu bancnote puine. Pentru suma rmas de pltit vom proceda la fel, la
fiecare pas alegnd bancnota cea mai mare posibil, n numr maxim. Dac S este suma rmas de descompus la un moment dat i cea mai mare bancnot disponibil (mai
mic sau egal cu S) este bi, atunci se vor alege [S / bi] bancnote de acest fel.
n aceast problem este mai util forma modificat a algoritmului Greedy. Vom
ordona descresctor irul bancnotelor, dup care vom face selecia lor. Vom memora
soluia n irul xi, i = 1, 2, , n, unde xi reprezint numrul bancnotelor avnd valoare
bi, i = 1, 2,, n astfel nct s avem: S = b1*x1 + b2*x2 ++ bn*xn.
Subalgoritm Selecie-Greedy():

3. Euristica greedy

91

Ord_Desc(n,b)
i 0
ct timp (S > 0) i (i < n) execut
i i+1
xi [S/bi]
nrb nrb+xi
S S -xi*nrb
sfrit ct timp
dac S = 0 atunci
scrie x1, ..., xi
altfel
scrie 'Nu s-a gasit solutie.'
sfrit dac
sfrit subalgoritm

Acest algoritm nu furnizeaz ntotdeauna o soluie. De exemplu, dac avem la dispoziie bancnote de 10, 5 i 3 lei i S = 39, coninutul irului x va fi (3, 1, 1), dar acesta
nu constituie soluie a problemei, deoarece mai rmne de descompus suma 1 pentru
care nu sunt bancnote.
Analiznd exemplul, observm c problema, totui, are soluie. Aceasta corespunde
urmtoarei descompuneri: 3 10 + 0 5+ 3 3 = 39.
Rezolvarea exact a problemei se poate face ncercnd toate combinrile posibile
de bancnote, folosind metoda backtracking.
Observaii
1. Dac bn = 1, algoritmul furnizeaz ntotdeauna o soluie.
2. n situaia n care exist bancnote de b0, b1, b2,bn uniti, disponibile n numr
nelimitat, prin aplicarea metodei greedy se obine ntotdeauna soluia optim.
Concluzie
O metod euristic greedy presupune folosirea unui algoritm greedy care nu determin ntotdeauna soluia optim a unei probleme. Dar exist situaii, n special n practic, unde este mulumitoare i o soluie aproximativ a unei probleme. De cele mai
multe ori ea se obine repede i se implementeaz uor. O soluie exact care s-ar obine cu metoda backtracking, practic, este imposibil de obinut, din cauza timpului de
execuie exponenial.
Multe dintre problemele care se rezolv cu metoda backtracking trebuie s minimizeze o funcie. Avem posibilitatea unei optimizri dac, nainte de a intra n backtracking aplicm o metod euristic. n timpul construciei unei soluii cu backtracking, se verific dac din soluia parial gsit se poate obine una mai bun dect cea
obinut cu metoda euristic. n caz afirmativ se continu construirea soluiei.

92

3. Euristica greedy

3.2. Implementri sugerate


Pentru a v familiariza cu modul n care se abordeaz problemele n care poate fi aplicat o metod euristic greedy, v sugerm s implementai algoritmi pentru:
1. plata sumei cu numr minim de bancnote;
2. mpachetarea unui rucsac, astfel nct valoarea obiectelor mpachetate s fie ct
mai mare posibil (problema discret a rucsacului);
3. problema submarinului (determinarea numrului minim de submarine necesare
pentru distrugerea a N vapoare);
4. determinarea ordinii n care M lucrri independente ale cror timpi de executare se
cunosc, se vor executa de ctre N procesoare care pot lucra n paralel, astfel nct
durata total s fie minim;
5. repartiia, pe baza unor liste de preferine, a N apartamente la N persoane, astfel nct satisfacerea cerinelor s fie maxim.

3.3. Probleme propuse


3.3.1. Rucsac1
Un ho d o spargere la un magazin, gsind n obiecte. Fiecare obiect are o greutate i o
valoare. tiind c n rucsac nu poate pune obiecte a cror greutate total s depeasc
valoarea G, s se precizeze ce obiecte trebuie s ia houl pentru a avea un ctig maxim. Houl nu poate s ia fraciuni din obiecte.
Date de intrare
Considerm obiectele numerotate cu numere naturale de la 1 la n. Prima linie a fiierului de intrare RUCSAC.IN conine numrul n al obiectelor disponibile i numrul real
G, reprezentnd capacitatea rucsacului. Linia a doua conine n numere ntregi separate
prin cte un spaiu, reprezentnd greutile celor n obiecte. Linia a treia conine n numere ntregi, care reprezint valorile celor n obiecte.
Date de ieire
Fiierul RUCSAC.OUT va conine dou linii. Pe prima linie se va scrie valoarea total a
obiectelor selectate (numr real cu dou zecimale exacte), iar pe linia a doua se vor
scrie numerele de ordine ale obiectelor alese. Ele vor fi separate prin cte un spaiu.
Restricii i precizri
1 n 100;
Dac problema admite mai multe soluii, n fiier se va scrie una singur.
1

Problema discret (0-1) a rucsacului

3. Euristica greedy

93

Exemplu
RUCSAC.IN
5 10
1 4 3 5
1 8 3 15

RUCSAC.OUT
24
4 2 1

3.3.2. Expoziie
ntr-o sal de expoziie pavilioanele sunt dispuse conform unui caroiaj de dimensiuni
m n. O firm de paz a ncheiat contracte cu o parte din firmele participante, pentru a
le supraveghea pavilioanele pe toat durata trgului. Organizatorii pun la dispoziia
firmei de paz foioare care se pot monta deasupra pavilioanelor.
Dintr-un foior se poate supraveghea un pavilion dac acesta este situat pe aceeai
linie sau pe aceeai coloan cu foiorul i dac ntre pavilion i foior nu mai exist alt
pavilion. De asemenea, dintr-un foior nu se poate supraveghea pavilionul deasupra
cruia este instalat.
Ajutai directorul firmei de paz s instaleze ct mai puine foioare care s supravegheze toate pavilioanele contractate.
Date de intrare
Prima linie a fiierului de intrare EXPO.IN conine numerele naturale m i n desprite
de un spaiu. Pe urmtoarele m linii se afl cte n numere ntregi, separate prin cte un
spaiu, de valori 0 sau 1 avnd semnificaia:
valoarea 1 corespunde unui pavilion care trebuie pzit;
valoarea 0 corespunde unui pavilion care nu trebuie pzit.
Date de ieire
Fiierul EXPO.OUT va conine pe prima linie un numr k, reprezentnd numrul minim
de foioare care trebuie instalate. Pe urmtoarele k linii se vor scrie perechi de numere
care reprezint coordonatele foioarelor. Numerele vor fi separate prin cte un spaiu.
Restricii i precizri
1 m, n 100;
Dac exist mai multe soluii, n fiier se va scrie una singur.
Exemplu
EXPO.IN
5 5
1 1 1 0
0 1 0 0
0 0 1 0
0 1 0 0
0 1 0 0

0
0
0
1
1

EXPO.OUT
5
1 2
1 1
4 3
5 3

94

3. Euristica greedy

3.3.3. Sportivi
Mai muli sportivi de performan trebuie s se antreneze pe aparate identice ntr-o
sal de sport. n funcie de nivelul de pregtire, fiecare sportiv se antreneaz un anumit
timp ti, stabilit dinainte. Un sportiv se antreneaz fr ntrerupere i fr s i schimbe
aparatul la care ncepe antrenamentul. Dup ce fiecare sportiv i termin antrenamentul, i numai atunci, toi sportivii au voie s mearg, mpreun, la Festivalul Toamnei, care tocmai a nceput n ora. tiind c sunt m sportivi i n aparate, repartizai
sportivii la aparate, astfel nct s poat pleca la festival ct mai repede.
Date de intrare
Prima linie a fiierului de intrare SPORTIVI.IN conine dou numere naturale n i m,
reprezentnd numrul aparatelor, respectiv numrul sportivilor. Urmtoarea linie conine m numere ntregi, reprezentnd durata antrenamentului fiecrui sportiv. Aceste
numere vor fi separate prin cte un spaiu.
Date de ieire
Fiierul de ieire SPORTIVI.OUT va conine n + 1 linii. Pe prima linie se va scrie un
numr ntreg care reprezint timpul scurs de la nceperea antrenamentelor pn cnd
termin i ultimul exerciiile i sportivii pot pleca la festival. Urmtoarele n linii vor
conine duratele antrenamentelor pe aparate, adic pe linia i + 1 se vor scrie duratele
antrenamentelor sportivilor crora li s-a repartizat aparatul i.
Restricii i precizri
1 n, m 1000;
1 ti 1000, unde ti reprezint duratele antrenamentelor, i = 1, 2, , m.
Exemplu
SPORTIV.IN
3 6
6 5 1 3 4 7

SPORTIV.OUT
9
1 7
3 6
4 5

3.3.4. Rsplata
Elevii care au fost premiai la Olimpiadele Naionale sunt rspltii cu ajutorul mai
multor agenii de turism. Pentru cei n elevi premiani se adun n oferte de excursii n
ar i strintate. Excursiile, numerotate de la 1 la n sunt diferite ca destinaie sau durat. Pentru a putea repartiza elevii, acestora li se cere o list de preferine. Elevii vor
specifica excursiile n care doresc s mearg, ncepnd cu excursia care i atrage cel
mai mult.
Determinai o repartizare a elevilor, astfel nct s fie mulumii ct mai muli elevi.

3. Euristica greedy

95

Date de intrare
Prima linie a fiierului RASPLATA.IN conine un numr natural n, reprezentnd numrul elevilor i numrul excursiilor. Urmtoarele n linii conin opiunile elevilor, n ordinea numerotrii lor. Pe linia i + 1 va fi o list cu opiunile elevului i: mai nti numrul nr de opiuni, urmat de nr numere, reprezentnd numerele de ordine ale excursiilor.
Date de ieire
Pentru a putea selecta excursiile conform cerinei problemei, vom asocia nite
punctaje excursiilor de pe liste: prima excursie va avea n puncte, a doua n 1 puncte,
a treia n 2 etc. Vom ntocmi un punctaj general Total i n cazul n care se repartizeaz unui elev o excursie aflat pe poziia k pe lista lui de preferine, vom aduga la
Total valoarea n k + 1. Dac unui elev nu i se poate repartiza nici o excursie dorit
de acesta, Total nu se va modifica.
Fiierul de ieire RASPLATA.OUT va conine trei linii: pe prima linie se scrie valoarea Total, valoare care reflect gradul de mulumire a elevilor. Pe a doua linie se vor
scrie elevii, n ordinea n care au fost repartizai. Pe a treia linie se vor scrie numerele
de ordine ale excursiilor n conformitate cu linia anterioar.
Restricii i precizri
1 n 100.
Exemplu
RASPLATA.IN
4
4 3 1 2 4
2 3 2
3 4 1 2
4 2 3 4 1

RASPLATA.OUT
2 3 4 1
3 4 2 1
15

3.3.5. Reea liniar


ntr-un campus universitar s-au adus n calculatoare. Ele s-au dispus n diverse cldiri:
bibliotec, secretariat, cmine etc. Se hotrte legarea calculatoarelor ntr-o reea liniar: fiecare calculator va fi legat cu alte dou calculatoare, ntr-un lan, cu excepia
calculatoarelor de la capetele lui, care se vor conecta doar cu cte un singur calculator.
Cunoscndu-se coordonatele x i y ale fiecrui calculator, s se afieze o modalitate de
legare a calculatoarelor, astfel nct cablul folosit s aib lungime minim.
Date de intrare
Prima linie a fiierului de intrare RETEA.IN conine un numr natural n, reprezentnd
numrul calculatoarelor. Urmtoarele n linii conin perechi de numere reale strict pozitive x i y, reprezentnd coordonatele n plan ale calculatoarelor.

96

3. Euristica greedy

Date de ieire
Fiierul de ieire RETEA.OUT va conine dou linii: pe prima linie se va scrie un numr real cu dou zecimale exacte, reprezentnd lungimea cablului necesar interconectrii, iar pe a doua linie se scriu n numere ntregi, reprezentnd numerele de ordine ale
calculatoarelor, n ordinea n care apar de-a lungul reelei.
Restricii i precizri
1 n 100
Exemplu
RETEA.IN
4
1 1
2 1
1 2
3 1

RETEA.OUT
3.00
3 1 2 4

3.4. Soluiile problemelor


3.4.1. Rucsac
Deoarece obiectele nu pot fi luate dect ntregi, (nu se pot tia n buci), problema se
mai numete i problema 0-1 a rucsacului.
Aceast problem o vom rezolva folosind o metod euristic. Soluia gsit nu va fi
ntotdeauna optim, dar va fi apropiat de aceasta. Se va calcula rapid i va fi uor de
implementat. O soluie exact se poate afla pentru seturi de date relativ mici dac se
folosete metoda backtracking.
Vom sorta obiectele descresctor dup valoarea ctigului unitar i vom alege
obiecte pn se ntlnete una din urmtoarele situaii:
obiectele alese au o greutate total egal cu capacitatea rucsacului (soluie optim);
mai exist loc n rucsac, dar nu se mai pot selecta obiecte care s acopere greutatea
rmas (n unele situaii soluia poate fi optim, iar n altele, nu).
Algoritm Selecie-Greedy(gr,val,n,G):

{ ordonm obiectele descresctor dup valoarea ctigului }


Ordonare(n,gr,val)
i 0
ct timp (G > 0) i (i < n) execut:
i i + 1
dac gri G atunci
G G - gri

{ obiectul i se poate selecta }

3. Euristica greedy

97

ctig ctig + vali


k k + 1
xk i
sfrit dac
sfrit ct timp
scrie x1, ..., xk
sfrit algoritm

Exemple
1. Fie n = 5, G = 10.
1 2 3 4 5
Greutate 2 4 5 2 6
Valoare 4 20 1 3 3
Vom calcula, pentru fiecare obiect, valoarea pe unitatea de greutate.
Valoare/greutate 2 5 0.2 1.5 1.5
Vom selecta obiectele n ordine descresctoare a raportului valoare/greutate.
Se obine soluia 1, 2, 4 care este soluie optim a problemei.
2. n = 3, G=8
1 2 3
Greutate 5 4 4
Valoare 6 4 3
n acest caz soluia optim este format din obiectele 2 i 3, dar algoritmul construiete doar soluia format din primul obiect.
Algoritmul nu asigur obinerea soluiei optime, dar este foarte rapid.

3.4.2. Expoziie
Vom rezolva problema folosind o euristic greedy. Soluia gsit nu va fi ntotdeauna
optim, dar va fi apropiat de aceasta i va avea avantajul c se va calcula rapid i va fi
uor de implementat. O soluie exact se poate afla pentru seturi de date relativ mici
dac se folosete metoda backtracking.
Algoritmul transcrie, cu mici modificri, algoritmul general greedy.
Din mulimea A = { mulimea pavilioanelor de coordonate (i, j) din matrice } se va
construi o submulime B = { mulimea pavilioanelor n care se instaleaz foioare }.
Iniial B = . Treptat se adaug din A elementele cele mai promitoare. Un pavilion (i, j) este promitor, dac din foiorul corespunztor lui se supravegheaz un
numr maxim de pavilioane.

98

3. Euristica greedy

Algoritmul se termin cnd se asigur supravegherea tuturor pavilioanelor.


n algoritmul descris alegem de fiecare dat un optim local. Acest fapt nu asigur
optimalitatea global a soluiei.
Exemplu
Fie o hart de dimensiuni 2 10. Valorile 1 reprezint pavilioane care trebuie
supravegheate (obiective), iar valorile 0 reprezint pavilioane care nu trebuie pzite.
1000101001
1000010000
1.
2.
3.
4.

Se vor alege, n ordine, elementele mulimii B:


(1, 6) asigur supravegherea a 3 obiective: (1, 5), (1, 7) i (2, 6);
(1, 1) asigur supravegherea unui obiectiv: (2, 1);
(1, 7) asigur supravegherea unui obiectiv: (1, 10);
(2, 1) asigur supravegherea unui obiectiv: (1, 1).

Deci |B| = 4. Dar mulimea B' = {(1, 2), (1, 8), (2, 2)} are doar 3 elemente i este
soluia optim a problemei.
1.
2.
3.
4.

n algoritm se repet urmtorii pai pn la verificarea tuturor obiectivelor:


Se determin locul (i, j) n care trebuie instalat un foior care asigur supravegherea
unui numr maxim de obiective.
Se adaug (i, j) la soluie.
Se marcheaz obiectivele supravegheate din (i, j), pentru ca acestea s nu fie luate
n considerare n continuare.
Se actualizeaz numrul de obiective supravegheate.

3.4.3. Sportivi
Cele m numere care reprezint duratele antrenamentelor sportivilor trebuie mprite n
n grupe, astfel nct maximul sumelor elementelor din fiecare grup s aib valoare
minim.
Pentru aceast problem se poate obine rezultatul exact aplicnd metoda backtracking, dar pentru seturi mari de date ea este practic inutilizabil, avnd un timp de
execuie foarte mare.
n aceast situaie este mai util o metod euristic de rezolvare a problemei. Prin
aceasta vom obine o soluie care nu va fi ntotdeauna cea optim, dar va fi apropiat
de ea. Programul va fi uor de implementat i va avea un timp de execuie rapid. Vom
ncerca s dispunem sportivii la aparate, astfel nct timpii de ocupare ai fiecrui aparat s aib valori apropiate.

3. Euristica greedy

99

Subalgoritm Euristic_Greedy:
dac n m atunci
scrie Maximum(ti, i = 1, 2, , m)
pentru i=1,m execut:
scrie ti
sfrit pentru
altfel
ordoneaz descresctor irul t
pentru i=1,m execut:
repartizeaz pentru aparatul i (sportivul care se antreneaz) timpul ti
sfrit pentru
pentru i=m+1,n execut:
selecteaz aparat dintre cele disponibile (k)
repartizeaz pentru aparatul k (sportivul care se antreneaz) timpul ti
sfrit pentru
sfrit dac
sfrit subalgoritm

Dac n m (numrul aparatelor este mai mare sau egal cu numrul sportivilor),
vom plasa din start cte un sportiv la un aparat. Timpul minim necesar terminrii tuturor antrenamentelor va fi egal cu valoarea elementului maxim din irul duratelor.
Dac n < m, vom sorta descresctor irul care memoreaz duratele de antrenament.
Parcurgem acest ir i repartizm sportivii (reordonai) dup cum urmeaz:
a) plasm primii n sportivi la aparate;
b) fiecare sportiv rmas l plasm la aparatul care devine disponibil cel mai repede.
n implementarea algoritmului memorm ntr-un tablou de nregistrri datele despre fiecare aparat:
timpul total de ocupare;
indicele unui sportiv x, care se antreneaz la acest aparat.
Lista sportivilor care se antreneaz la acelai aparat o reconstituim plecnd de la
sportivul x, folosind tabloul next, tiind c:
nextx = y dac la aparatul la care se antreneaz x, urmeaz y;
nextx = 0 dac la aparatul respectiv x este ultimul.
Pentru a afia timpul minim cerut, vom determina valoarea maxim a timpilor de
ocupare a fiecrui aparat.

3.4.4. Rsplata
Vom stabili criterii referitoare la ordinea n care vor fi selectai elevii. Aceste criterii le
vom verifica la fiecare pas, n urmtoarea ordine:
a) vom alege elevii cu numr minim de opiuni;
b) vom alege elevii pentru care prima opiune are punctaj maxim;

100

3. Euristica greedy

c) vom alege o opiune a crei apariii pe listele celorlalte persoane conduce la un


punctaj minim.
Exemplu
Fie n = 3 i listele de opiuni:
Persoana 1 3 opiuni 3 , 2, 1
Persoana 2 o opiune 3
Persoana 3 o opiune 2
La prima alegere, aplicm criteriul a). Vom avea de ales ntre elevii 2 i 3. Aplicm
criteriul b), dar pentru c ambele opiuni au punctaj maxim (3 puncte) aplicm criteriul
c). Alegerea elevului 2 cu excursia 3 duce la obinerea unui punctaj de 2 puncte. Alegerea elevului 3 cu excursia 2 duce la obinerea unui punctaj de 3 puncte. Deci vom
alege nti elevul 3 cu opiunea 2.
n continuare vom aplica din nou criteriile, pentru a doua alegere. n urma aplicrii
criteriului a) se va alege elevul al doilea, cu opiunea 3. Ultima dat se alege primul
elev, cu singura opiune posibil de ndeplinit n acest moment.
Vom avea un indice de mulumire a persoanelor Total = 3 + 3 +1 = 7 puncte.
Observaii
Vom memora opiunile elevilor ntr-o matrice x de dimensiuni n (n + 1) astfel:
n x[i, 0] memorm numrul de opiuni ale elevului i;
n x[i, 1], x[i, 2], memorm opiunile elevului i.
Cnd se rezolv un elev i, se codific x[i, 0] = n + 1.
Soluia se memoreaz n irurile y (elevii) i z (excursiile alese);
Subalgoritm Determin_elevi(n,x,total,y,z):
nr 0
total 0
repet
{ se alege elevul aplicnd criteriile pe rnd }
elev_ales alege_minim(opt)
nr nr + 1
y[nr] elev_ales
z[nr] x[elev_ales,opt]
{ se actualizeaz opiunile celorlali }
terge_opiuni(elev_ales,opt)
total total + n opt + 1 { se actualizeaz total n urma alegerii }
pn cnd nu mai exist elevi cu opiuni posibil de ndeplinit

{ se repartizeaz n excursiile rmase elevii care nu mai pot fi satisfcui deloc }


repartizeaz_restul
sfrit subalgoritm

3. Euristica greedy

101

Problema se poate rezolva mai economic din punct de vedere al memoriei, folosind
alocarea dinamic (vezi capitolul 9).

3.4.5. Reea liniar


Deoarece toi algoritmii de rezolvare a acestei probleme sunt exponeniali, vom rezolva problema folosind o metod euristic simpl.
Vom alege ca fiind unul din capetele lanului primul calculator. Pe acesta l vom lega de cel mai apropiat calculator. Vom repeta algoritmul, selectnd la fiecare pas dintre calculatoarele nelegate nc, pe cel mai apropiat de ultimul introdus n reeaua liniar.
Acest algoritm l vom repeta alegnd ca i calculator de start pe fiecare dintre calculatoarele existente. Se va reine lanul al crui lungime este minim.

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