Documente Academic
Documente Profesional
Documente Cultură
Prezentarea metodei
Implementri sugerate
Probleme propuse
Soluiile problemelor
Capitolul
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. 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
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. Euristica greedy
97
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
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.
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
3. Euristica greedy
101
Problema se poate rezolva mai economic din punct de vedere al memoriei, folosind
alocarea dinamic (vezi capitolul 9).