Sunteți pe pagina 1din 6

• Problema rucsacului

• Aplicaţii
– restul (cât mai puţine monede şi bancnote)
– planificarea unor activităţi, prin maximizarea randamentului
– codare Huffman (0, 101, 100, 111, 1101,1100)
– routare
– Selecţie Greedy în algoritmul lui Dijkstra

08.12.21 Curs 6 – Greedy 1


Curs 6 - Greedy
• avem o mulţime A de elemente
• dorim să alegem o submulţime a acesteia astfel încât să
fie îndeplinite anumite condiţii

• sortare
• verificăm faptul că soluţia este optimă
• complexitate polinomială
• rapidă

08.12.21 Curs 6 – Greedy 2


Curs 6 - Greedy
• Problema rucsacului
– produse descrise de greutate şi valoare
– dorim să umplem sacul cât mai eficient (să obţinem satisfacţia maximă)
_______________________
- pentru fiecare obiect calculăm un scor: pret/greutate
- sortăm obiectele după acest scor, descrescător  lista obiecte
- i = 0;//luam primul obiect din sac
- j = 0;//nu avem nici un obiect in sac (vectorul obiecteSelectate e vid)
- greutateCurenta = 0;//sacul este gol
- while((mai exista obiecte)&&(mai este loc in sac)) do{
if((greutateCurenta+greutate(obiect(i))) < greutateSac)
{//obiectul incape in sac
obiecteSelectate(j) = i; //il adaugam in vectorul solutie;
greutateCurenta = greutateCurenta+greutate(obiect(i));
j++;}
i++;
}

08.12.21 Curs 6 – Greedy 3


Curs 6 - Greedy
• Problema rucsacului
– greutate rucsac: 14 kg
– obiecteSelectate = [ ];

Nr.crt. 1 2 3 4 5 6
Greutat 5 3 4 2 6 7
e
Pret 4 2 3 1 5 6
Scor 0.8 0.66 0.75 0.5 0.83 0.85

Nr.crt. 6 5 1 3 2 4
Greutat 7 6 5 4 3 2
e
Pret 6 5 4 3 2 1
Scor 0.85 0.83 0.8 0.75 0.66 0.5

08.12.21 Curs 6 – Greedy 4


Curs 6 - Greedy
Nr.crt. 6 5 1 3 2 4
• Problema rucsacului
– greutateSac: 14 kg Greutate 7 6 5 4 3 2
– obiecteSelectate = [ ]; Pret 6 5 4 3 2 1
– greutateCurenta = 0;
– i = 0;//analizam primul obiect Scor 0.85 0.83 0.8 0.75 0.66 0.5
I. i < 6 si greutateCurenta < greutateSac
- primul obiect incape  obiecteSelectate = [6], greutateCurenta = 7,
satisfactieTotala = 0.85, i++
II. i < 6 si greutateCurenta < greutateSac
– al doilea obiect incape  obiecteSelectate = [6, 5], greutateCurenta = 13,
satisfactieTotala = 1.68, i++
III. i < 6 si greutateCurenta < greutateSac
– al 3-lea obiect nu incape, i++
IV. i < 6 si greutateCurenta < greutateSac
– al 4-lea obiect nu incape, i++
V. i < 6 si greutateCurenta < greutateSac
– al 5-lea obiect nu incape, i++
VI. i < 6 si greutateCurenta < greutateSac
– al 6-lea obiect nu incape, i++
VII. i > 6 !!!stop //nu mai exista obiecte
08.12.21 in lista secventiala sortata
Curs 6 – Greedy 5
Curs 6 - Greedy
Nr.crt. 6 5 1 3 2 4
• Problema rucsacului
Greutate 7 6 5 4 3 2
– greutateSac: 14 kg
– obiecteSelectate = [ ]; Pret 6 5 4 3 2 1
– greutateCurenta = 0; Scor 0.85 0.83 0.8 0.75 0.66 0.5
– i = 0;//analizam primul obiect
Greedy: GreutateCurenta = 13, satisfactieTotala = 1.68
Pt obiecteSelectate = [4, 2, 3, 1] avem:
- greutateCurenta = 2 + 3 + 4 + 5 = 14 = greutateSac
- satisfactieTotala = 0.5 + 0.66 + 0.75 + 0.8 = 2.74 !!!!!!!!

08.12.21 Curs 6 – Greedy 6

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