Documente Academic
Documente Profesional
Documente Cultură
Cursul 7
+
◼ Este folosită atunci cînd găsirea celei mai bune soluții este
prea costisitoare.
+ Greedy – metoda optimului local
◼ 𝑺 = 𝑺𝟏 × 𝑺𝟐 × ⋯ × 𝑺𝒏 = 𝒙 = 𝒙𝟏 , 𝒙𝟐 , … , 𝒙𝒏 | 𝒙𝒊 ∈ 𝑺𝒊
spațiul soluțiilor
◼ 𝑹 = 𝒙 ∈ 𝑺 | 𝝋 𝒙 = 𝒅𝒂 mulțimea soluțiilor
rezultat
◼ 𝝋 𝒙 = 𝒅𝒂 ⟺ 𝒙 ∈ 𝑹
◼ 𝐵 = 𝐵 ∪ {𝑥}
+ Greedy – metoda optimului local
◼ Algoritm general
While ExistaElemente do
AlegeUnElement(x);
IncludeElementul(x)
Endwhile.
+ Greedy – metoda optimului local
◼ Rezolvare
}
+ Greedy – metoda optimului local
◼ Fie A un vector ale cărui componente A(0) , A(1),…, A(n-1) sunt numere
naturale nenule. Să se determine suma componentelor care sunt
numere pare. Atunci când un număr par se repetă, el va fi luat în
consideraţie o singură dată.
Să luăm un exemplu concret , pe baza căruia vom ilustra cum se ‘’construieşte’’ soluţia.
Fie secvenţa : 5, 8, 7, 8, 4, 9, 7, 5, 5, 4, 8, 7, 5, 9.
Deoarece A (0) este 5, nefiind număr par se porneşte cu soluţia iniţială S:=0 (dacă A
(0) ar fi fost număr par, am fi pornit cu soluţia s:=A(0)).
S:=0
S:=0+8=8
S:=8+4=12
+ Greedy – metoda optimului local
◼ Un termen curent (fie acesta A(i)) contribuie la valoarea lui S dacă îndeplineşte
două condiţii :
◼ - este un număr par;
◼ - n-a mai fost utilizat.
◼ 4, 4, 5, 5, 5, 5, 7, 7, 7, 8, 8, 8, 9, 9
◼ şi astfel se observa mult mai uşor repetabilitatea unui numar par (faţă de situaţia
iniţială când pentru a constata dacă un număr par a fost sau nu utilizat trebuie să
parcurgem întreaga secvenţă de fiecare dată ).
+ Greedy – metoda optimului local
Pe baza afirmațiilor anterioare rezultă un model de rezolvare pentru
problema propusă, model care dă structura generală a metodei Greedy :
int Greedy1(int n, int a[], int b[], int *m)
{ int i,s;
*m = 0;
s = 0;
if (a[0] % 2 == 0)
{
s = a[0];
b[*m] = a[0];
(*m)++;
}
for (i = 1; i < n; i++)
if ((a[i] != a[i-1])&&(a[i]%2==0))
{
b[*m] = a[i];
s = s + b[*m];
(*m)++;
}
return s;
}
+ Greedy – metoda optimului local
Problema rucsacului
◼ Se consideră un set de n obiecte si un rucsac de capacitate dată
q. Pentru fiecare obiect k se cunoaste capacitatea c(k) si venitul
v(k) care poate fi obtinut prin transportarea acestuia cu rucsacul
până la o destinatie fixată.
◼ Să se determine o încărcare optimală a rucsacului, în ipoteza în
care orice obiect poate fi încărcat întreg în rucsac sau partial.
+ Greedy – metoda optimului local
Problema rucsacului
// I: nr. obiecte (n), capacitate ocupata (c), venit (v)
Dacă pentru orice obiect i putem să luăm doar o parte xi ∈[0,1] din el, atunci spunem că
avem problema continuă a rucsacului
+ Greedy – metoda optimului local
◼ Se doreste să se plătească o sumă s cu un număr minim
de bancnote cu valori date. Se consideră că din fiecare tip
de bancnotă se poate folosi un număr nelimitat de
bancnote, iar pentru ca problema să aibă soluţie, vom
considera că există şi bancnote cu valoarea 1.
+ Greedy – metoda optimului local
◼ Se doreste să se plătească o sumă s cu un număr minim de bancnote cu valori
date. Se consideră că din fiecare tip de bancnotă se poate folosi un număr
nelimitat de bancnote, iar pentru ca problema să aibă soluţie, vom considera că
există şi bancnote cu valoarea 1.