Problema Rucsacului
-
Upload
dragu-stelian -
Category
Documents
-
view
47 -
download
6
description
Transcript of Problema Rucsacului
-
Algoritmica - Curs 12 1
CURS 11:
Programare dinamic- II -
-
Algoritmica - Curs 12 2
Structura
Ce este programarea dinamic ?
Aplicaie: problema discret a rucsacului
Funcii de memorie (memoizare)
Aplicaie: nmulirea optimal a matricilor
Aplicaie: nchiderea tranzitiv a unei relaii binare
-
Algoritmica - Curs 12 3
Ce este programarea dinamic ?
Este o tehnic de rezolvare a problemelor care pot fi descompusen subprobleme care se suprapun poate fi aplicat problemelorce au proprietatea de substructur optim
Particularitatea programrii dinamice const n faptul c rezolvfiecare subproblem o singur dat i stocheaz soluiilesubproblemelor ntr-o structur tabelar
-
Algoritmica - Curs 12 4
Ce este programarea dinamic ?
Etapele principale:
Analiza structurii unei soluii: se stabilete legatura dintre soluiaproblemei i soluiile subproblemelor (este echivalent cu verificarea proprietii de substructur optim). In aceasta etapse identific problema generic i subproblemelecorespunztoare.
Determinarea relaiei de recuren dintre valoarea (criteriul de optim) corespunztoare soluiei problemei i valorilecorespunztoare soluiilor subproblemelor.
Dezvoltarea (n manier ascendent) a relaiei de recuren icompletarea structurii tabelare utile n construirea soluiei.
Construirea soluiei (utiliznd informaiile completate n etapaanterioar)
-
Algoritmica - Curs 12 5
Aplicaie: problema rucsacului
Considerm un set de n obiecte, fiecare fiind caracterizat de o dimensiune d i de o valoare v, i un rucsac de capacitate C. Sse selecteze un subset de obiecte astfel incat dimensiunea totala obiectelor selectate s fie mai mica dect C iar valoarea total a obiectelor selectate s fie maxim.
Variante:(i) Varianta continu (fracionara): pot fi selectate obiecte in
ntregime sau fraciuni ale obiectelor.(ii) Varianta discret(0-1): obiectele pot fi transferate doar n
ntregime
-
Algoritmica - Curs 12 6
Aplicaie: problema rucsacului
Ipoteza (varianta simplificat): Capacitatea rucsacului (C ) i dimensiunile obiectelor d1,,dn sunt
numere naturale
Problema rucsacului poate fi reformulat astfel:se caut (s1,s2,,sn) cu si in {0,1} astfel nct:
s1d1 ++ sndn
-
Algoritmica - Curs 12 7
Aplicaie: problema rucsacului
Exemplu: n=3, C=5, d1=1, d2=2, d3=3v1=6, v2=10, v3=12
Valoare relativa: vri=vi/di
vr1=6, vr2=5, vr3=4
Ideea tehnicii greedy: Se sorteaz lista de obiecte
descresctor dup valoarearelativ (vri=vi/di)
Se selecteaz obiectele n aceast ordine pn cnd nu maincap elemente in rucsac
Soluia greedy: (1,1,0)Valoarea total: V=16
Obs: aceasta nu este soluia optim; soluia (0,1,1) este mai bun ntruct V=22
-
Algoritmica - Curs 12 8
Aplicaie: problema rucsacului
1. Analiza structurii unei soluii optimeFie P(i,j) problema generic a seleciei din setul de obiecte {o1,,oi}
pentru a umple optimal un rucsac de capacitate j.Obs: P(n,C) este problema initiala Daca i se ajunge la subproblema P(i-1,j) i dac s(i,j) este optim pt pb. P(i,j) atunci i s(i-1,j) trebuie sfie solutie optim pentru subproblem
Deci problema rucsacului are proprietatea de substructur optim
-
Algoritmica - Curs 12 9
Aplicaie: problema rucsacului
2. Stabilirea relaiei de recuren
Fie V(i,j) valoarea corespunztoare soluiei a problemei P(i,j)
0 dac i=0 sau j=0 (multimea de obiecte este vida saucapacitatea disponibil n rucsac e 0)
V(i,j) = V(i-1,j) daca di>j sau V(i-1,j)>V(i-1,j-di)+ vi(obiectul i nu incape in rucsac sau prin selectia lui s-arobtine o solutie mai putin buna decat daca obiectulnu s-ar selecta)
V(i-1,j-di)+vi in celelalte cazuri
-
Algoritmica - Curs 12 10
Aplicaie: problema rucsacului
Relaia de recuren poate fi descris i astfel:
0 daca i=0 sau j=0
V(i,j) = V(i-1,j) daca di>j
max{V(i-1,j), V(i-1,j-di)+ vi } daca di
-
Algoritmica - Curs 12 11
Aplicaie: problema rucsacului
Exemplu:
0 daca i=0 sau j=0
V(i,j) = V(i-1,j) daca di>j
max{V(i-1,j), V(i-1,j-di)+ vi } if di
-
Algoritmica - Curs 12 12
Aplicaie: problema rucsacului
3. Dezvoltarea relaiei de recurenta
0 daca i=0 sau j=0
V(i,j) = V(i-1,j) if di>j
max{V(i-1,j), V(i-1,j-di)+ vi } if di
-
Algoritmica - Curs 12 13
Aplicaie: problema rucsacului
4. Construirea solutiei
Exemplu:
0 1 2 3 4 50 0 0 0 0 0 0
1 0 6 6 6 6 6
2 0 6 10 16 16 16
3 0 6 10 16 18 22
Etape:
Compar V[3,5] cu V[2,5]. Intruct valorile sunt diferite inseamn c o3 esteselectat
Se trece la V[2,5-d3]=V[2,2]=10 i se compar cu V[1,2]=6. Intruct valorilesunt diferite inseamn c o2 este de asemenea selectat
Se trece la V[1,2-d2]=V[1,0]=0. Intruct s-a ajuns la 0 rezult c s-a ajuns la soluie
Soluia obinut este{o2,o3} adic s=(0,1,1)Obs: se presupune ca cel puin un obiect are
dimensiunea mai mic dect capacitatearucsacului
-
Algoritmica - Curs 12 14
Aplicaie: problema rucsacului
4. Construirea soluiei
Exemplu:
0 1 2 3 4 50 0 0 0 0 0 0
1 0 6 6 6 6 6
2 0 6 10 16 16 16
3 0 6 10 16 18 22
Algoritm:
Construct(V[0..n,0..C],d[1..n])FOR i1,n DO s[i] 0 ENDFORin; jCWHILE V[i,j]>0 DO
IF V[i,j]=V[i-1,j]THEN ii-1
ELSEs[i] 1jj-d[i]ii-1
ENDIFENDWHILERETURN s[1..n]
-
Algoritmica - Curs 12 15
Aplicaie: problema rucsacului
Obs
0 1 2 3 4 50 0 0 0 0 0 0
1 0 6 6 6 6 6
2 0 6 10 16 16 16
3 0 6 10 16 18 22
Pt a construi soluia sunt suficiente doarvalorile marcate
Numrul calculelor poate fi redus dacse calculeaz doar valorilenecesare construciei solutiei
Acest lucru se poate realiza prinmbinarea abordrii descendentecu cea ascendent (cu reinereavalorilor calculate)
Aceasta este denumita tehnicamemoizrii (engleza: memoization)
-
Algoritmica - Curs 12 16
Tehnica memoizrii
Scop: se rezolva doar subproblemele a cror soluie intervine in soluia problemei initiale (in plus o subproblem este rezolvato singur dat)
Idee: se combin abordarea descendent (top down) cu ceaascendent (bottom up)
Motivatie: Abordarea descendent clasic rezolv doar subproblemele ce
contribuie la solutia problemei insa o subproblema este rezolvatade cate ori apare (din acest motiv implementarea recursiva estein general ineficienta)
Abordarea ascendenta clasica rezolva toate subproblemele (chiarsi cele care nu contribuie la solutia optima) insa fiecare problemaeste rezolvata o singura data
Tehnica memoizarii rezolva o singura data doar subproblemele cecontribuie la solutia problemei
-
Algoritmica - Curs 12 17
Tehnica memoizriiEtape in aplicarea tehnicii
memoizarii: Se initializeaza tabelul cu o
valoare virtuala (aceasta valoare trebuie sa fie diferita de orice valoare s-ar obtine prin dezvoltarea relatiei de recurenta)
Se calculeaza valoarea tinta (ex: V[n,C]) in maniera recursiva insa toate valorile intermediare se stocheaza si se utilizeaza atunci cand e necesar
Initializare cu valoarea virtuala:FOR i0,n DOFOR j0,C DO V[i,j] -1 ENDFOR
ENDFORImplementare recursiva:comp(i,j)IF i=0 OR j=0 THEN V[i,j] 0; RETURN V[i,j]ELSE
IF V[i,j]-1 THEN RETURN V[i,j]ELSEIF j
-
Algoritmica - Curs 12 18
Aplicaie: nmulirea optimal a matricilor
Se dau n matrici A1, A2, , An si se urmrete calculul produsuluiA1*A2** An . S se determine o modalitate de grupare a matricilor
factor astfel nct numrul produselor de elemente sa fie minim
Obs:
1. Dimensiunile matricilor sunt compatibile. Presupunem cdimensiunile matricilor sunt: p0,p1,,pn Matricea Ai are pi-1 liniisi pi coloane
2. Diferitele grupri ale factorilor conduc la acelai rezultat (intruct nmulirea matricilor este asociativ) ins pot conduce la valoridiferite ale numrului de inmuliri de elemente
-
Algoritmica - Curs 12 19
Aplicaie: nmulirea optimal a matricilor
Exemplu: Fie A1, A2 si A3 trei matrici avnd dimensiunile: (2,20), (20,5) si (5,10)
p0=2 p1=20 p2=5 p3=10
Considerm urmtoarele grupri:
(A1*A2)*A3 - aceasta necesita (2*20*5)+2*5*10=300 inmultiriscalare (la nivel de element)
A1*(A2*A3) aceasta necesita (20*5*10)+2*20*10=1400 inmultiriscalare
Obs: pentru valori mari ale lui n numarul de grupari posibile poate fifoarte mare
-
Algoritmica - Curs 12 20
Aplicatie: inmultirea optimala a matricilor
Gruparea factorilor are, in cazul general, un caracter ierarhic:
Primul nivel al gruparii corespunde ultimei inmultiri efectuate Celelalte nivele corespund gruparilor factorilor ramasi
Gruparea este identificata prin pozitia ultimei inmultiri. De exemplu gruparea
(A1**Ak)*(Ak+1**An)este specificata prin indicele de grupare k
La primul nivel exista (n-1) grupari posibile (1
-
Algoritmica - Curs 12 21
Aplicatie: inmultirea optimala a matricilor
Numarul de grupari pentru un produs cu n factori este:
1 n2
Obs:K(n)=C(n-1) unde C(0),C(1) sunt numerele lui Catalan:
C(n)=Comb(2n, n)/(n+1)
Ordinul de marime al lui K(n) este 4n-1/(n-1)3/2Tehnica fortei brute este inaplicabila!
-
Algoritmica - Curs 12 22
Aplicatie: inmultirea optimala a matricilor
1. Analiza structurii unei solutii optime
Fie A(i..j) produsul Ai*Ai+1**Aj (i
-
Algoritmica - Curs 12 23
Aplicaie: nmulirea optimal a matricilor
2. Identificarea relaiei de recuren
Fie c(i,j) numrul de nmuliri scalare necesare pentru a calcula A(i..j).
0 daca i=jc(i,j)=
min{c(i,k)+c(k+1,j)+pi-1pkpj | i
-
Algoritmica - Curs 12 24
Aplicaie: nmulirea optimal a matricilor
3. Dezvoltarea relaiei de recuren
0 if i=jc(i,j)=
min{c(i,k)+c(k+1,j)+pi-1pkpj | i
-
Algoritmica - Curs 12 25
Aplicaie: nmulirea optimal a matricilor
3. Dezvoltarea relaiei de recuren
0 if i=jc(i,j)=
min{c(i,k)+c(k+1,j)+pi-1pkpj | i
-
Algoritmica - Curs 12 26
Aplicaie: nmulirea optimal a matricilor
Analiza complexitii:
Dimensiunea problemei: n
Operaie dominant: inmultirescalara
Ordin complexitate: (n3)
AlgoritmCompute(p[0..n])FOR i1,n DO c[i,i] 0 ENDFORFOR q 1,n-1 DO
FOR i 1,n-q DOj i+qc[i,j] c[i,i]+c[i+1,j]+p[i-1]*p[i]*p[j]s[i,j] iFOR k i+1,j-1 DO
r c[i,k]+c[k+1,j]+p[i-1]*p[k]*p[j] IF c[i,j]>r THEN c[i,j] r
s[i,j] kENDIF
ENDFORENDFOR ENDFOR
RETURN c[1..n,1..n],s[1..n,1..n]
-
Algoritmica - Curs 12 27
Aplicaie: nmulirea optimal a matricilor
4. Construirea solutiei
Variante ale problemei:
Determinarea numarului minim de inmultiri scalareSolutie: este data de c(1,n)
Calcul A(1..n) in maniera optimalaSolutie: algoritm recursiv (opt_mul)
Identificarea gruparii optimale a factorilor (plasarea parantezelor)Solutie: algoritm recursiv (opt_group)
-
Algoritmica - Curs 12 28
Aplicatie: inmultirea optimala a matricilor
Calculul lui A(1..n) in maniera optimala
Ipoteze: A[1..n] un tablou global avand elemente de tip matrice (A[i] este
matricea Ai) s[1..n,1..n] este o variabila globala iar classic_mul este o functie
pentru calculul produsului a doua matrici
opt_mul(i,j)IF i=j THEN RETURN A[i]ELSE
X opt_mul(i,s[i,j]) Y opt_mul(s[i,j]+1,j)Z classic_mul(X,Y)RETURN Z
ENDIF
-
Algoritmica - Curs 12 29
Aplicatie: inmultirea optimala a matricilor
Afisarea gruparii optimale (pozitiile unde se plaseaza parantezele)
opt_group(i,j)IF ij THEN
opt_group(i,s[i,j])WRITE i-1, s[i,j], jopt_group(s[i,j]+1,j)
ENDIF
-
Algoritmica - Curs 12 30
Aplicatie: inchiderea tranzitiva a unei relatii binare
Fie R {1,2,,n}x{1,2,,n} o relatie binara. Inchiderea sa tranzitiva este cea mai mica (in sensul relatiei de incluziune) relatie R* care este tranzitiva si include pe R
R* are urmatoarele proprietati:
daca i si j sunt din {1,,n} si exista i1,i2,.im in {1,2,,n} astfel incat (i1,i2) in R, ., (im-1,im ) in R i1=i si im=jatunci (i,j) in R
Exemple: a) R={(1,2),(2,3)} R*={(1,2),(2,3),(1,3)}
b) R={(1,2),(2,3),(3,1)} R*={(1,2),(2,3),(3,1),(1,3),(1,1),(2,1),(2,2),(3,2),(3,3)}
-
Algoritmica - Curs 12 31
Aplicatie: inchiderea tranzitiva a unei relatii binare
R* este construita succesiv pornind de la R0=R si utilizand R1, R2,Rn=R*
Relatiile intermediare Rk (k=1..n) sunt definite prin:
(i,j) in Rk < = > (i,j) in Rk-1 sau (i,k) Rk-1 si (k,j) in Rk-1
Exemplu:R={(1,2),(2,3)} R1=RR2={(1,2),(2,3),(1,3)} R*=R3 ={(1,2),(2,3),(1,3)}
-
Algoritmica - Curs 12 32
Aplicatie: inchiderea tranzitiva a unei relatii binare
Reprezentarea relatiilor binare:
Presupunem ca o relatie binara este specificata printr-o matrice n*n ale carei elemente sunt definite astfel:
1 daca (i,j) in R r(i,j) =
0 daca (i,j) nu apartine lui R
Exemplu: R ={(1,2),(2,3)} 0 1 0
r= 0 0 10 0 0
-
Algoritmica - Curs 12 33
Aplicatie: inchiderea tranzitiva a unei relatii binare
Relatia de recurenta pentru matrici:
1 if rk-1(i,j)=1 OR (rk-1(i,k)=1 AND rk-1(k,j)=1)rk(i,j) =
0 altfel
Exemplu:0 1 0 0 1 0 0 1 1 0 1 1
r= 0 0 1 r1= 0 0 1 r2= 0 0 1 r3= 0 0 10 0 0 0 0 0 0 0 0 0 0 0
-
Algoritmica - Curs 12 34
Aplicatie: inchiderea tranzitiva a unei relatii binare
Algoritm Warshall
Dezvolta relatia de recurenta folosind doua matrici aditionale r1 si r2
Closure(r[1..n,1..n])r2[1..n,1..n] r[1..n,1..n]FOR k 1,n DO
r1[1..n,1..n] r2[1..n,1..n]FOR i 1,n DOFOR j 1,n DOIF r1[i,j]=0 OR r1[i,k]=1 AND r1[k,j]=1
THEN r2[i,j] 1ELSE r2[i,j] 0
ENDIFENDFOR
ENDFORENDFORRETURN r2[1..n,1..n]
-
Algoritmica - Curs 12 35
Cursul urmator va fi despre
Backtracking
si aplicatii
Slide Number 1StructuraCe este programarea dinamic ?Ce este programarea dinamic ?Aplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiAplicaie: problema rucsaculuiTehnica memoizriiTehnica memoizriiAplicaie: nmulirea optimal a matricilorAplicaie: nmulirea optimal a matricilorAplicatie: inmultirea optimala a matricilorAplicatie: inmultirea optimala a matricilorAplicatie: inmultirea optimala a matricilorAplicaie: nmulirea optimal a matricilorAplicaie: nmulirea optimal a matricilorAplicaie: nmulirea optimal a matricilorAplicaie: nmulirea optimal a matricilorAplicaie: nmulirea optimal a matricilorAplicatie: inmultirea optimala a matricilorAplicatie: inmultirea optimala a matricilorAplicatie: inchiderea tranzitiva a unei relatii binareAplicatie: inchiderea tranzitiva a unei relatii binareAplicatie: inchiderea tranzitiva a unei relatii binareAplicatie: inchiderea tranzitiva a unei relatii binareAplicatie: inchiderea tranzitiva a unei relatii binareCursul urmator va fi despre