Metoda relurii Anatol Gremalschi, 2004 2 Ne amintim mai nti tehnica Greedy Datele iniiale: } , , , { 2 1 n a a a A Soluia problemei: A x x x x X k ), , , , ( 2 1
Ideia tehnicii Greedy: alegem cte un element din mulimea A i l includem n vectorul X mulimea vectorul Anatol Gremalschi, 2004 3 Schema general a algoritmului Greedy while ExistaElemente do begin AlegeUnElement(x); IncludeElementul(x); end Anatol Gremalschi, 2004 4 Datele iniiale n metoda relurii Mulimile: }; , , { 1 1 , 12 11 1 m a a a A }; , , { 2 2 , 22 21 2 m a a a A ... }. , , { , 2 1 n nm n n n a a a A Anatol Gremalschi, 2004 5 Soluia n metoda relurii Spaiul soluiilor: n A A A S 2 1 Soluia: ), , , , ( 2 1 n x x x X unde ; 1 1 A x ; 2 2 A x ..., . n n A x Anatol Gremalschi, 2004 6 Ideia metodei relurii 1. Presupunem c la pasul k am calculat deja valorile: ) , , , ( 2 1 k x x x 2. Selectm din mulimea A k+1 valoarea x k+1 : ) , , , , ( 1 2 1 k k x x x x 3. Dac ) , , , , ( 1 2 1 k k x x x x satisface condiiile problemei, trecem la pasul k+2. n caz contrar revenim la pasul k i alegem alt x k . Anatol Gremalschi, 2004 7 Cutarea soluiei prin metoda relurii 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,3 0 k k := +1 k k- := 1 k k := +1 1 A 1 A 2 A 3 0 0 Anatol Gremalschi, 2004 8 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 9 Clasificarea problemelor 1. Mulimile A 1 , A 2 , ..., A n snt cunoscute. 3. Elementele din care snt formate mulimile A 1 , A 2 , ..., A n i numrul n snt necunoscute. 2. Snt cunoscute elementele din care snt formate mulimile A 1 , A 2 , ..., A n , numrul n fiind necunoscut. Anatol Gremalschi, 2004 10 Exemplul 1. Problema din manual, pag. 39 Se consider mulimile A 1 , A 2 , ..., A n , fiecare mulime fiind format din m k numere naturale. Selectai din fiecare mulime cte un numr n aa mod nct suma lor s fie egal cu q. Anatol Gremalschi, 2004 11 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 12 Function PrimulElement function PrimulElement(k : integer) : Natural; begin PrimulElement:=1; end; {PrimulElement } Anatol Gremalschi, 2004 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 Anatol Gremalschi, 2004 14 function ExistaSuccesor(k : integer) : boolean; begin ExistaSuccesor:=(X[k]<M[k]); end; { ExistaSuccesor } Function ExistaSuccesor Anatol Gremalschi, 2004 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 Anatol Gremalschi, 2004 16 1 2 3 j i C 1 2 . . . . . . 3 B n 1 2 3 1 2 ... m ... Exemplul 2. Labirintul (pag. 42) Anatol Gremalschi, 2004 17 Labirintul. Formularea matematic Mulimile: } , , , { 1 Stnga Jos Dreapta Sus A } , , , { 2 Stnga Jos Dreapta Sus A ... Soluia: } , , , , , , , , , , { Jos Jos Jos Jos Dreapta Dreapta Dreapta Jos Dreapta Dreapta Dreapta X } , , , { 3 Stnga Jos Dreapta Sus A Anatol Gremalschi, 2004 18 Exemplul 3. Domino Piesele iniiale Tren format din 3 piese Anatol Gremalschi, 2004 19 Calculul mulimilor A 1 , A 2 , ..., A n )} 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 Anatol Gremalschi, 2004 20 Exemplul 4. Speologie IZVOARE STALACTITE LILIECI IESIRE STALAGMITE INTRARE Anatol Gremalschi, 2004 21 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. LILIECI: STALAGMITE IZVOARE LILIECI LILIECI Exemplu: Anatol Gremalschi, 2004 22 Calculul mulimilor A 1 , A 2 , ..., A n A 1 petera INTRARE: A 1 = {STALACTITE, STALAGMITE} A 3 petera IZVOARE: A 2 = {STALACTITE, IESIRE, LILIECI} A 2 petera STALACTITE: A 2 = {INTRARE, IZVOARE} Anatol Gremalschi, 2004 23 V mulumesc pentru atenie !