You are on page 1of 23

Informatica.

Clasa a 11-a

Metoda relurii

Anatol Gremalschi, 2

Ne amintim mai nti tehnica Greedy


Datele iniiale:
mulimea
Soluia problemei:
vectorul

A {a1 , a2 , , an }
X ( x1 , x2 , , xk ), x A

Ideia tehnicii Greedy:


alegem cte un element din mulimea A i l
includem n vectorul X
Anatol Gremalschi, 2

Schema general a algoritmului Greedy

while ExistaElemente do
begin
AlegeUnElement(x);
IncludeElementul(x);
end

Anatol Gremalschi, 2

Datele iniiale n metoda relurii

Mulimile:

A1 {a11 , a12, , a1m1 };


A2 {a21 , a22, , a2 m2 };
...

An {an1 , an 2, , anmn }.
Anatol Gremalschi, 2

Soluia n metoda relurii

Spaiul soluiilor:

S A1 A2 An
Soluia:

X ( x1 , x2 , , xn ),
unde

x1 A1 ; x2 A2 ; ..., xn An .
Anatol Gremalschi, 2

Ideia metodei relurii


1. Presupunem c la pasul k am calculat deja valorile:

( x1 , x2 , , xk )
2. Selectm din mulimea Ak+1 valoarea xk+1:

( x1 , x2 , , xk , xk 1 )
3. Dac

( x1 , x2 , , xk , xk 1 ) satisface condiiile

problemei, trecem la pasul k+2.


n caz contrar revenim la pasul k i alegem alt xk.
Anatol Gremalschi, 2

Cutarea soluiei prin metoda relurii


k := 1

1 ,1

1 ,2

2 ,2

k := k + 1
a

2 ,1

1
k := k + 1

k := k -1

k := k + 1
a

0
3 ,1

a 3 ,2

0
0

Anatol Gremalschi, 2

a 3 ,3

Schema general a algoritmului recursiv


bazat pe metoda relurii
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}

Anatol Gremalschi, 2

Clasificarea problemelor

1. Mulimile A1, A2, ..., An snt cunoscute.


2. Snt cunoscute elementele din care snt formate
mulimile A1, A2, ..., An, numrul n fiind
necunoscut.
3. Elementele din care snt formate mulimile A1,
A2, ..., An i numrul n snt necunoscute.
Anatol Gremalschi, 2

Exemplul 1. Problema din manual, pag. 39

Se consider mulimile A1, A2, ..., An, fiecare mulime


fiind format din mk numere naturale. Selectai din
fiecare mulime cte un numr n aa mod nct suma lor
s fie egal cu q.

Anatol Gremalschi, 2

10

Exemplul 1. Reprezentarea datelor

const mmax=50; { numrul maximal de mulimi }


nmax=50; { numrul maximal de elemente }
type Natural = 0..MaxInt;
Multime = array[1..nmax] of Natural;
var

A : array[1..nmax] of Multime;
n : 1..nmax;
{ numrul de mulimi }
M : array[1..nmax] of 1..mmax; { cardinalul mulimii S[k] }
X : array[1..nmax] of 1..mmax; { indicii elementelor selectate }
q : Natural;
k, j : integer;
Indicator : boolean;

Anatol Gremalschi, 2

11

Function PrimulElement

function PrimulElement(k : integer) : Natural;


begin
PrimulElement:=1;
end; {PrimulElement }

Anatol Gremalschi, 2

12

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

Anatol Gremalschi, 2

13

Function ExistaSuccesor

function ExistaSuccesor(k : integer) : boolean;


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

Anatol Gremalschi, 2

14

Procedure Reluare

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 }

Anatol Gremalschi, 2

15

Exemplul 2. Labirintul (pag. 42)

1
1
2
3

2 3 ...

... m

i
C
n
Anatol Gremalschi, 2

16

Labirintul. Formularea matematic

Mulimile:

A1 {Sus, Dreapta , Jos, Stnga}


A2 {Sus, Dreapta , Jos, Stnga}
A3 {Sus, Dreapta , Jos, Stnga}

...
Soluia:

X {Dreapta , Dreapta , Dreapta , Jos, Dreapta ,


Dreapta , Dreapta , Jos, Jos, Jos, Jos}
Anatol Gremalschi, 2

17

Exemplul 3. Domino

Piesele iniiale

Tren format din 3 piese

Anatol Gremalschi, 2

18

Calculul mulimilor A1, A2, ..., An

A1 {(3, 6), (3, 5), (3, 0), (6, 6)}


Includem (3, 6) n tren.

A2 {(3, 5), (3, 0), (6, 6)}


Includem (6, 6) n tren.

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


Anatol Gremalschi, 2

19

Exemplul 4. Speologie

IE S IR E

S T A L A C T IT E

IZ V O A R E

IN T R A R E

S T A L A G M IT E

L IL IE C I

Anatol Gremalschi, 2

20

Exemplul 4. Speologie
(planul labirintului este necunoscut)
function UndeMaAflu : string
returneaz un ir de caractere ce conine
denumirea peterii n care n prezent se afl
speologul, dou puncte i denumirile de intrri de
galerii, separate prin spaiu.
Exemplu:
LILIECI: STALAGMITE IZVOARE LILIECI LILIECI
Anatol Gremalschi, 2

21

Calculul mulimilor A1, A2, ..., An

A1 petera INTRARE:
A1 = {STALACTITE, STALAGMITE}
A2 petera STALACTITE:
A2 = {INTRARE, IZVOARE}
A3 petera IZVOARE:
A2 = {STALACTITE, IESIRE, LILIECI}
Anatol Gremalschi, 2

22

V mulumesc pentru atenie !

Anatol Gremalschi, 2

23

You might also like