Sunteți pe pagina 1din 13

Problema rucsacului lacom

Realizatori: Chiril Snziana Simion Andra Prof. coordonator: Vrg Liliana Maftei Ionel

Enun
Se d un rucsac de o anumit
capacitate, greutate i un numar de n

obiecte specificandu-se masa obiectelor.


Se cere un program care s determine variant de introducere a obiectelor n rucsac astfel nct s ncap ct mai multe obiecte.
Problema rucsacului

Exemplu
N = 5; Greutatea disponibil = 15 kg;
1
Obiect

Greutatea obiectelor
Problema rucsacului

3kg

2kg

5kg

7kg 4kg

Metoda Greedy

Propune o strategie de rezolvare a problemelor de optim n care se poate obine optimul global prin alegeri succesive ale optimului local, ceea ce permite rezolvarea problemei fr a mai reveni la deciziile deja luate. Specificul acestei metode const n faptul c se construiete soluia optim pas cu pas, la fiecare pas fiind selectat n soluie elementul care pare "cel mai bun" la momentul respectiv, n sperana c aceast va duce ctre soluia optim global.

Problema rucsacului

Sortarea obiectelor
1
Obiect

Greutatea obiectelor

3kg

2kg

5kg

7kg

4kg

Problema rucsacului

Metoda Greedy:

se iniializeaz mulimea soluiilor (B) la mulimea vid (B=) se consider la fiecare pas cte un element x A; la fiecare pas se ia o decizie:

dac elementul x face parte din soluia optim, elementul este adugat la mulimea soluiilor (B=B{x}). dac elementul x considerat, mpreun cu elementele ce fac parte din soluia optim parial construit nu d o soluie posibil, atunci x nu este adugat la soluia optim.

Problema rucsacului

adugarea elementului x la mulimea soluiilor se realizeaz fie prin luarea elementelor din A ntr-o ordine determinat care depinde de problem, n ordine cresctoare; procedeul continu astfel, repetitiv, pn cnd au fost determinate toate elementele din mulimea soluiilor.

Obiect1 3 kg

Obiect2 2 kg

Obiect3 5 kg

Obiect4 7 kg

Obiect5 4kg

Greutatea disponibil a rucsacului este:

Problema rucsacului

Greutatea obiectului este prea mare

Algoritm de rezolvare:
Pas 1: Citirea greutii fiecarui obiect, Citirea capacitii rucsacului. Pas 2: Iniializm obiectele. Pas 3: Se ordoneaz obiectele cresctor n funcie de greutatea lor. Pas 4: Se inializeaz volumul disponibil cu volumul obiectului. Pas5 : Se verific dac fiecare obiect ncape n rucsac astfel: Dac volumul obiectului e mai mic sau egal dect volumul disponibil al rucsacului atunci acesta ncape n rucsac i din volumul disponibil al rucsacului scdem volumul obiectului. Pas 6: Dac a rmas o zon din rucsac neocupat atunci afim volumul rmas neocupat, n caz contrar nseamn c nu am putut introduce nici un obiect n rucsac. Problema rucsacului

Implementare
max_ob numrul maxim de obiecte care pot fi puse n rucsac N - numrul de obiecte disponibile. v_dis - volumul rmas disponibil din rucsac. O - obiectele pe care vreau s le iau. Greutate - greutatea fiecarui obiect.
Problema rucsacului

program rucsac;
Var g:array [1..10] of integer; i,n,Gm,R, aux : integer; ok:boolean;

begin writeln('nr obiecte'); readln(n); writeln(capacitate rucsac'); readln(R); writeln(' Obiectele de luat n rucsac:' ); for i:=1 to n do read (g[i]);

Problema rucsacului

{ sortarea vectorului }
ok:=false; while(ok=false) do begin ok:=true; for i:=1 to n-1 do if g[i]>g[i+1] then begin aux:=g[i]; g[i]:=g[i+1]; g[i+1]:=aux; ok:=false; end; Problema rucsacului end;

{ verific dac fiecare obiect ncape n rucsac }

writeln; for i:=1 to n do write( g[i], '*'); Gm:=0 ; i:=1;


while ( Gm +g[i]<=R ) do begin Gm:=Gm+g[i]; i:=i+1; end; writeln('sunt ,i-1, obiecte cu greutate , Gm,) ; writeln ( a ramas , R-Gm, loc liber ) ;
Problema rucsacului

Bibliografie:

Nicolesco, Basarab, Transdisciplinaritatea, Polirom, Iai, 2001, p.72. Mioara, Gheoghe, Elemente de programare, Corint, Bucureti, 2003, p. 80

Problema rucsacului

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