metoda reluarii.ppt

20
1

Transcript of metoda reluarii.ppt

Page 1: metoda reluarii.ppt

1

Page 2: metoda reluarii.ppt

2

Page 3: metoda reluarii.ppt

3

Această metodă generală de programare se aplică problemelor în care soluţia se poate reprezenta sub forma unui vector X = (x1, ..., xn)ÎS unde S = S1 x ... x Sn , unde mulţimile S1, ...,Sn

sunt mulţimi finite având |Si| = si elemente. Pentru fiecare problemă concretă sunt date anumite relaţii între componentele x1 , ... xn ale vectorului X, numite condiţii interne.

Page 4: metoda reluarii.ppt

4

};,,{11,12111 maaaA

};,,{22,22212 maaaA

...

}.,,{ ,21 nnmnnn aaaA

Page 5: metoda reluarii.ppt

5

nAAAS 21

),,,,( 21 nxxxX

unde ;11 Ax ;22 Ax ..., .nn Ax

Page 6: metoda reluarii.ppt

6

1. Presupunem că la pasul k am calculat deja valorile:),,,( 21 kxxx

2. Selectăm din mulţimea Ak+1 valoarea xk+1:),,,,( 121 kk xxxx

3. Dacă ),,,,( 121 kk xxxx satisface condiţiileproblemei, trecem la pasul k+2.

În caz contrar revenim la pasul k şi alegem alt xk.

Page 7: metoda reluarii.ppt

7

01

1

10

k := 1

k k:= + 1

a 1 ,1

a 2 ,1

a 1 2,

a 2 ,2

a 3 ,1 a 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.ppt

8

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

9

1. Mulţimile A1, A2, ..., An sînt cunoscute.

3. Elementele din care sînt formate mulţimile A1, A2, ..., An şi numărul n sînt necunoscute.

2. Sînt cunoscute elementele din care sînt formate mulţimile A1, A2, ..., An, numărul n fiind necunoscut.

Page 10: metoda reluarii.ppt

10

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

11

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

12

function PrimulElement(k : integer) : Natural;begin PrimulElement:=1;end; {PrimulElement }

Page 13: metoda reluarii.ppt

13

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

14

function ExistaSuccesor(k : integer) : boolean;begin ExistaSuccesor:=(X[k]<M[k]);end; { ExistaSuccesor }

Page 15: metoda reluarii.ppt

15

procedure 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 16: metoda reluarii.ppt

16

123

j

iC

12

......

3B

n

1 2 31 2 ... m...

Page 17: metoda reluarii.ppt

17

},,,{1 StîngaJosDreaptaSusA },,,{2 StîngaJosDreaptaSusA

...

},,,,,,,,,,{

JosJosJosJosDreaptaDreaptaDreaptaJosDreaptaDreaptaDreaptaX

},,,{3 StîngaJosDreaptaSusA

Page 18: metoda reluarii.ppt

18

Piesele iniţiale “Tren” format din 3 piese

Page 19: metoda reluarii.ppt

)}6,6(),0,3(),5,3(),6,3{(1 A

19

)}6,6(),0,3(),5,3{(2 A

)}0,3(),5,3{(3 A

Page 20: metoda reluarii.ppt

20