Metoda Reluarii

17
Metoda Metoda Reluarii Reluarii

description

Metoda Reluarii(informatica)

Transcript of Metoda Reluarii

Page 1: Metoda Reluarii

Metoda ReluariiMetoda Reluarii

Page 2: Metoda 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

Page 3: Metoda Reluarii

Schema generala a algoritmului Schema generala a algoritmului GreedyGreedy

while ExistaElemente do

begin

AlegeUnElement(x);

IncludeElementul(x);

end

Page 4: Metoda Reluarii

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};};

Page 5: Metoda Reluarii

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. .

Page 6: Metoda Reluarii

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.

Page 7: Metoda Reluarii

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

Page 8: Metoda Reluarii

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}

Page 9: Metoda Reluarii

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.

Page 10: Metoda Reluarii

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.

Page 11: Metoda Reluarii

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;

Page 12: Metoda Reluarii

Function PrimulElementFunction PrimulElement

function PrimulElement(k : integer) : Natural;

begin

PrimulElement:=1;

end; {PrimulElement }

Page 13: Metoda Reluarii

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 }

Page 14: Metoda Reluarii

Funciton ExistaSuccesorFunciton ExistaSuccesor

function ExistaSuccesor(k : integer) : boolean;

begin

ExistaSuccesor:=(X[k]<M[k]);

end; { ExistaSuccesor }

Page 15: Metoda Reluarii

function ExistaSuccesor(k : integer) : boolean;

begin

ExistaSuccesor:=(X[k]<M[k]);

end; { ExistaSuccesor }

Page 16: Metoda Reluarii

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 }

Page 17: Metoda Reluarii

Va multumesc pentru atentie!!!Va multumesc pentru atentie!!!