Sunteți pe pagina 1din 23

Informatica.

Clasa a 11-a

Metoda relurii

Anatol Gremalschi, 2004

Ne amintim mai nti tehnica Greedy


Datele iniiale:
mulimea A {a1 , a2 , , an } Soluia problemei: vectorul

X ( x1 , x2 , , xk ),

x A

Ideia tehnicii Greedy: alegem cte un element din mulimea A i l includem n vectorul X
Anatol Gremalschi, 2004 2

Schema general a algoritmului Greedy

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

Anatol Gremalschi, 2004

Datele iniiale n metoda relurii

Mulimile:

A1 {a11 , a12, , a1m1 };


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

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

Soluia n metoda relurii

Spaiul soluiilor:

S A1 A2 An
Soluia:

X ( x1 , x2 , , xn ),
unde

x1 A1 ; x2 A2 ; ..., xn An .
Anatol Gremalschi, 2004 5

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, 2004 6

Cutarea soluiei prin metoda relurii


k:=1

a1,1 0 k:=k+1 a2,1 1

a1,2

A1

a2,2 1 k:=k+1

A2
k:=k-1

k:=k+1 a3,1 0 0

a3,2

1 0

a3,3

A3

Anatol Gremalschi, 2004

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, 2004 8

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, 2004 9

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, 2004

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, 2004

11

Function PrimulElement

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

Anatol Gremalschi, 2004

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, 2004

13

Function ExistaSuccesor

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

Anatol Gremalschi, 2004

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, 2004 15

Exemplul 2. Labirintul (pag. 42)

1 2 3 ... 1 2 3
...

... m

i
...

C
Anatol Gremalschi, 2004 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, 2004 17

Exemplul 3. Domino

Piesele iniiale

Tren format din 3 piese

Anatol Gremalschi, 2004

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, 2004

19

Exemplul 4. Speologie

IESIRE STALACTITE

INTRARE

IZVOARE

STALAGMITE

LILIECI

Anatol Gremalschi, 2004

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, 2004

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, 2004 22

V mulumesc pentru atenie !

Anatol Gremalschi, 2004

23