Botnarenco Veronica 1
Metoda reluării
Botnarenco Veronica 2
Ne amintim mai întîi tehnica Greedy
Datele iniţiale:
},,,{ 21 naaaA =
Soluţia problemei:
AxxxxX k ∈= ),,,,( 21 
Ideia tehnicii Greedy:
alegem cîte un element din mulţimea A şi îl
includem în vectorul X
mulţimea
vectorul
Botnarenco Veronica 3
Schema generală a algoritmului Greedy
while ExistaElemente do
begin
AlegeUnElement(x);
IncludeElementul(x);
end
Botnarenco Veronica 4
Datele iniţiale în metoda reluării
Mulţimile:
};,,{ 11,12111 maaaA =
};,,{ 22,22212 maaaA =
...
}.,,{ ,21 nnmnnn aaaA =
Botnarenco Veronica 5
Soluţia în metoda reluării
Spaţiul soluţiilor:
nAAAS ×××= 21
Soluţia: ),,,,( 21 nxxxX =
unde ;11 Ax ∈ ;22 Ax ∈ ..., .nn Ax ∈
Botnarenco Veronica 6
Ideea metodei reluării
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ţiile
problemei, trecem la pasul k+2.
În caz contrar revenim la pasul k şi alegem alt xk.
Botnarenco Veronica 7
Căutarea soluţiei prin metoda reluării
0
1
1
1
0
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
Botnarenco Veronica 8
Schema generală a algoritmului recursiv
bazat pe metoda reluării
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}
Botnarenco Veronica 9
Clasificarea problemelor
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.
Botnarenco Veronica 10
Exemplul 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.
Botnarenco Veronica 11
Exemplul 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;
Botnarenco Veronica 12
Function PrimulElement
function PrimulElement(k : integer) : Natural;
begin
PrimulElement:=1;
end; {PrimulElement }
Botnarenco Veronica 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 }
Function Continuare
Botnarenco Veronica 14
function ExistaSuccesor(k : integer) : boolean;
begin
ExistaSuccesor:=(X[k]<M[k]);
end; { ExistaSuccesor }
Function ExistaSuccesor
Botnarenco Veronica 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 }
Procedure Reluare
Botnarenco Veronica 16
1
2
3
j
i
C
1
2
......
3
B
n
1 2 31 2 .. . m. ..
Exemplul 2. Labirintul
Botnarenco Veronica 17
Labirintul. Formularea matematică
Mulţimile:
},,,{1 StîngaJosDreaptaSusA =
},,,{2 StîngaJosDreaptaSusA =
...
Soluţia:
},,,,,
,,,,,{
JosJosJosJosDreaptaDreapta
DreaptaJosDreaptaDreaptaDreaptaX =
},,,{3 StîngaJosDreaptaSusA =
Botnarenco Veronica 18
Exemplul 3. Domino
Piesele iniţiale “Tren” format din 3 piese
Botnarenco Veronica 19
Calculul mulţimilor A1, A2, ..., An
)}6,6(),0,3(),5,3(),6,3{(1 =A
)}6,6(),0,3(),5,3{(2 =A
Includem (3, 6) în tren.
Includem (6, 6) în tren.
)}0,3(),5,3{(3 =A
Botnarenco Veronica 20
Exemplul 4. Speologie
I Z V O A R E
S T A L A C T I T E
L I L I E C I
I E S I R E
S T A L A G M I T E
I N T R A R E
Botnarenco Veronica 21
Exemplul 4. Speologie
(planul labirintului este necunoscut)
function UndeMaAflu : string –
returnează un şir de caractere ce conţine
denumirea peşterii în care în prezent se află
speologul, două puncte şi denumirile de intrări de
galerii, separate prin spaţiu.
LILIECI: STALAGMITE IZVOARE LILIECI LILIECI
Exemplu:
Botnarenco Veronica 22
Calculul mulţimilor A1, A2, ..., An
A1 – peştera INTRARE:
A1 = {STALACTITE, STALAGMITE}
A3 – peştera IZVOARE:
A2 = {STALACTITE, IESIRE, LILIECI}
A2 – peştera STALACTITE:
A2 = {INTRARE, IZVOARE}
Botnarenco Veronica 23
Vă mulţumesc pentru atenţie !

Informatica(1)

  • 1.
  • 2.
    Botnarenco Veronica 2 Neamintim mai întîi tehnica Greedy Datele iniţiale: },,,{ 21 naaaA = Soluţia problemei: AxxxxX k ∈= ),,,,( 21  Ideia tehnicii Greedy: alegem cîte un element din mulţimea A şi îl includem în vectorul X mulţimea vectorul
  • 3.
    Botnarenco Veronica 3 Schemagenerală a algoritmului Greedy while ExistaElemente do begin AlegeUnElement(x); IncludeElementul(x); end
  • 4.
    Botnarenco Veronica 4 Dateleiniţiale în metoda reluării Mulţimile: };,,{ 11,12111 maaaA = };,,{ 22,22212 maaaA = ... }.,,{ ,21 nnmnnn aaaA =
  • 5.
    Botnarenco Veronica 5 Soluţiaîn metoda reluării Spaţiul soluţiilor: nAAAS ×××= 21 Soluţia: ),,,,( 21 nxxxX = unde ;11 Ax ∈ ;22 Ax ∈ ..., .nn Ax ∈
  • 6.
    Botnarenco Veronica 6 Ideeametodei reluării 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ţiile problemei, trecem la pasul k+2. În caz contrar revenim la pasul k şi alegem alt xk.
  • 7.
    Botnarenco Veronica 7 Căutareasoluţiei prin metoda reluării 0 1 1 1 0 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
  • 8.
    Botnarenco Veronica 8 Schemagenerală a algoritmului recursiv bazat pe metoda reluării 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}
  • 9.
    Botnarenco Veronica 9 Clasificareaproblemelor 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.
  • 10.
    Botnarenco Veronica 10 Exemplul1 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.
  • 11.
    Botnarenco Veronica 11 Exemplul1. 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;
  • 12.
    Botnarenco Veronica 12 FunctionPrimulElement function PrimulElement(k : integer) : Natural; begin PrimulElement:=1; end; {PrimulElement }
  • 13.
    Botnarenco Veronica 13 functionContinuare(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 } Function Continuare
  • 14.
    Botnarenco Veronica 14 functionExistaSuccesor(k : integer) : boolean; begin ExistaSuccesor:=(X[k]<M[k]); end; { ExistaSuccesor } Function ExistaSuccesor
  • 15.
    Botnarenco Veronica 15 procedureReluare(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 } Procedure Reluare
  • 16.
    Botnarenco Veronica 16 1 2 3 j i C 1 2 ...... 3 B n 12 31 2 .. . m. .. Exemplul 2. Labirintul
  • 17.
    Botnarenco Veronica 17 Labirintul.Formularea matematică Mulţimile: },,,{1 StîngaJosDreaptaSusA = },,,{2 StîngaJosDreaptaSusA = ... Soluţia: },,,,, ,,,,,{ JosJosJosJosDreaptaDreapta DreaptaJosDreaptaDreaptaDreaptaX = },,,{3 StîngaJosDreaptaSusA =
  • 18.
    Botnarenco Veronica 18 Exemplul3. Domino Piesele iniţiale “Tren” format din 3 piese
  • 19.
    Botnarenco Veronica 19 Calcululmulţimilor A1, A2, ..., An )}6,6(),0,3(),5,3(),6,3{(1 =A )}6,6(),0,3(),5,3{(2 =A Includem (3, 6) în tren. Includem (6, 6) în tren. )}0,3(),5,3{(3 =A
  • 20.
    Botnarenco Veronica 20 Exemplul4. Speologie I Z V O A R E S T A L A C T I T E L I L I E C I I E S I R E S T A L A G M I T E I N T R A R E
  • 21.
    Botnarenco Veronica 21 Exemplul4. Speologie (planul labirintului este necunoscut) function UndeMaAflu : string – returnează un şir de caractere ce conţine denumirea peşterii în care în prezent se află speologul, două puncte şi denumirile de intrări de galerii, separate prin spaţiu. LILIECI: STALAGMITE IZVOARE LILIECI LILIECI Exemplu:
  • 22.
    Botnarenco Veronica 22 Calcululmulţimilor A1, A2, ..., An A1 – peştera INTRARE: A1 = {STALACTITE, STALAGMITE} A3 – peştera IZVOARE: A2 = {STALACTITE, IESIRE, LILIECI} A2 – peştera STALACTITE: A2 = {INTRARE, IZVOARE}
  • 23.
    Botnarenco Veronica 23 Vămulţumesc pentru atenţie !