Metoda Reluarii
-
Upload
olga-dabija -
Category
Documents
-
view
95 -
download
0
description
Transcript of Metoda Reluarii
Metoda ReluariiMetoda Reluarii
Tehnica Tehnica GreedyGreedy
Datele initiale:Datele initiale:
multimea A={amultimea A={a11,a,a22,...,a,...,ann};}; Solutia problemei:Solutia problemei:
vectorul X=(xvectorul X=(x11,x,x22,...x,...xnn), x~A), x~A Ideia tehnicii Ideia tehnicii Greedy:Greedy:
alegem cite un element din multimea A si alegem cite un element din multimea A si il includem in vectorul Xil includem in vectorul X
Schema generala a algoritmului Schema generala a algoritmului GreedyGreedy
while ExistaElemente do
begin
AlegeUnElement(x);
IncludeElementul(x);
end
Datele initiale in Datele initiale in metoda reluariimetoda reluarii
Multimele:Multimele:
A1={aA1={a1111,a,a1212,...,a,...,a1m1m11};};
A2={aA2={a2121,a,a2222,...,a,...,a2m2m22};};
......
An={aAn={an1n1,a,an2n2,...,a,...,anmnmnn};};
Solutia in Solutia in metoda reluariimetoda reluarii
Spatiul solutiilor: Spatiul solutiilor:
S=AS=A11*A*A22*...*A*...*Ann Solutia:Solutia:
X=(xX=(x11,x,x22,...,x,...,xnn), ),
unde xunde x11~A~A11,a,a22~A~A22,...,x,...,xnn~A~Ann. .
Ideia metodii reluariiIdeia metodii reluarii
1.Presupunem că la pasul k am calculat deja valorile:
(x1,x2,...,xk)
2. Selectăm din mulţimea Ak+1 valoarea xk+1:
(x1,x2,...,xk,xk+1)
3.Daca (x1,x2,...,xk,xk+1) satisface conditiile ,trecem la pasul k+2. In caz contrar revenim la pasul k si alegem alt xk.
Cautarea solutiei prin metoda reluariiCautarea solutiei prin metoda reluarii
01
1
10
k := 1
k k:= + 1
a 1 ,1
a 2 ,1
a 1 2,
a 2 ,2
a 3 ,1a 3 ,2 a 3 ,30
k k:= + 1 k k-:= 1k k:= + 1
1
A 1
A 2
A 3
0 0
Schema generala a algoritmului recursiv Schema generala a algoritmului recursiv bazat pe metoda reluariibazat pe metoda reluarii
procedure Reluare(k:integer);begin if k<=n then begin X[k]:=PrimulElement(k); if Continuare(k) then Reluare(k+1); while ExistaSuccesor(k) do begin X[k]:=Succesor(k); if Continuare(k) then Reluare(k+1) end; { while } end { then } else PrelucrareaSolutiei;end; {Reluare}
Clasificare problemelorClasificare problemelor
1.Multimele A1.Multimele A11,A,A22,...,A,...,Ann sint cunoscute. sint cunoscute.
2. 2. Sînt cunoscute elementele din care sînt formate mulţimile A A11,A,A22,...,A,...,Ann, , numărul n fiind necunoscut.
3. Elementele din care sînt formate mulţimile A1, A2, ..., An si numărul n sînt necunoscute.
Exemplul 1Exemplul 1
Se consideră mulţimile A1, A2, ..., An, fiecare mulţime fiind formată din mk numere naturale. Selectaţi din fiecare mulţime cîte un număr în aşa mod încît suma lor să fie egală cu q.
Exemplul 1.Reprezentarea datelorExemplul 1.Reprezentarea datelor
const mmax=50; { numărul maximal de mulţimi } nmax=50; { numărul maximal de elemente }
type Natural = 0..MaxInt; Multime = array[1..nmax] of Natural;
var A : array[1..nmax] of Multime; n : 1..nmax; { numărul de mulţimi } M : array[1..nmax] of 1..mmax; { cardinalul mulţimii S[k] } X : array[1..nmax] of 1..mmax; { indicii elementelor selectate } q : Natural; k, j : integer; Indicator : boolean;
Function PrimulElementFunction PrimulElement
function PrimulElement(k : integer) : Natural;
begin
PrimulElement:=1;
end; {PrimulElement }
Function ContinuareFunction Continuare
function Continuare(k : integer) : boolean;var j : integer; suma : Natural;begin suma:=0; for j:=1 to k do suma:=suma+A[j, X[j]]; if ((k<n) and (suma<q)) or ((k=n) and (suma=q)) then Continuare:=true else Continuare:=false;end; { Continuare }
Funciton ExistaSuccesorFunciton ExistaSuccesor
function ExistaSuccesor(k : integer) : boolean;
begin
ExistaSuccesor:=(X[k]<M[k]);
end; { ExistaSuccesor }
function ExistaSuccesor(k : integer) : boolean;
begin
ExistaSuccesor:=(X[k]<M[k]);
end; { ExistaSuccesor }
Procedure ReluareProcedure Reluareprocedure Reluare(k : integer); { Metoda reluarii - varianta recursiva }begin if k<=n then begin X[k]:=PrimulElement(k); if Continuare(k) then Reluare(k+1); while ExistaSuccesor(k) do begin X[k]:=Succesor(k); if Continuare(k) then Reluare(k+1); end { while } end { then } else PrelucrareaSolutiei;end; { Reluare }
Va multumesc pentru atentie!!!Va multumesc pentru atentie!!!