1 / 13

Problema r ucsacului lacom

Problema r ucsacului lacom. Enun ţ. Se d ă un rucsac de o anumită c apacitate, greutate și un numar de n obiecte specificandu-se masa obiectelor.

Download Presentation

Problema r ucsacului lacom

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Problemarucsaculuilacom

  2. Enunţ Se dă un rucsac de o anumită capacitate,greutate și un numar de n obiectespecificandu-se masa obiectelor. Se cere un program care să determine variantă de introducere a obiectelor în rucsac astfel încât săîncapă cât mai multe obiecte.

  3. Exemplu N=5; Greutatea disponibilă =15 kg; 3kg 2kg 5kg 7kg 4kg

  4. Metoda Greedy • Propune o strategie de rezolvare a problemelor de optim în care se poate obţine optimul global prin alegeri succesive ale optimului local, ceea ce permite rezolvarea problemei fără a mai reveni la deciziile deja luate. • Specificul acestei metode 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" la momentul respectiv, în speranța că această va duce către soluția optimă globală.

  5. Sortarea obiectelor 3kg 2kg 5kg 7kg 4kg

  6. Metoda Greedy: • se iniţializează mulţimea soluţiilor (B) la mulţimea vidă (B=Φ) • se consideră la fiecare pas câte un element x ∈ A; • la fiecare pas se ia o decizie: • dacă elementul x face parte din soluţia optimă, elementul este adăugat la mulțimea soluțiilor (B=B∪{x}). • dacă elementul x considerat, împreună cu elementele ce fac parte din soluţia optimă parţială construită nu dă o soluţie posibilă, atunci x nu este adăugat la soluţia optimă. adăugarea elementului x la mulțimea soluțiilor se realizează fie prinluarea elementelor din A într-o ordine determinată care depinde de problemă, înordine crescătoare; • procedeul continuă astfel, repetitiv, până când au fost determinate toate elementele din mulţimea soluţiilor.

  7. Obiect1 3 kg Obiect2 2 kg Obiect3 5 kg Obiect4 7 kg Obiect5 4kg Greutatea disponibilă a rucsaculuieste: 15 13 10 6 1 Greutateaobiectuluiesteprea mare

  8. Algoritm de rezolvare: • Pas 1: Citirea greutății fiecarui obiect, Citirea capacității rucsacului. • Pas 2: Iniţializăm obiectele. • Pas3: Se ordonează obiectele crescător în funcție de greutatea lor. • Pas 4: Se inţializează volumul disponibil cu volumul obiectului. • Pas5 : Se verifică dacă fiecare obiect încape în rucsac astfel: • Dacă volumul obiectului e mai mic sau egal decât volumul disponibil al rucsacului atunci acesta încape în rucsac și din volumul disponibil al rucsacului scădem volumul obiectului. • Pas 6: Dacă a rămas o zonă din rucsac neocupată atunci afişăm volumul rămas neocupat, în caz contrar înseamnă că nu am putut introduce nici un obiect în rucsac.

  9. Implementare max_ob – numărul maxim de obiecte care pot fi puse în rucsac N -numărul de obiecte disponibile. v_dis - volumul rămas disponibil din rucsac. O - obiectele pe care vreau să le iau. Greutate - greutatea fiecarui obiect.

  10. 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]);

  11. { sortareavectorului } 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; end;

  12. { 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‘ ) ;

  13. Bibliografie: Nicolesco, Basarab, “Transdisciplinaritatea”, Polirom, Iaşi, 2001, p.72. Mioara, Gheoghe, “Elemente de programare”, Corint, București, 2003, p. 80

More Related