2. Ce presupune metoda reluării?
În metoda reluării se presupune că soluţia problemei pe care trebuie să
o rezolvăm poate fi reprezentată printr-un vector:
X = (x1, x2,…, xk,…, xn).
Fiecare componentă xk a vectorului X poate lua valori dintr-o anumită
mulţime Ak , k = 1, 2,..., n.
Se consideră că cele mk elemente ale fiecărei mulţimi Ak sînt ordonate
conform unui criteriu bine stabilit, de exemplu, în ordinea apariţiei lor
în memoria calculatorului. Deci, în metoda reluării componentele
vectorului X primesc valori pe rînd, în sensul că lui xk i se atribuie o
valoare numai dacă au fost deja atribuite valori lui x1, x2,…, xk-1 .
Anume micşorarea lui k dă nume metodei, cuvîntul ‘‘reluare’’
semnificînd revenirea la alte variante de alegere a varabilelor. Aceeaşi
semnificaţie o are şi denumirea engleză a metodei – backtracking
( back – înapoi , track – urmă ).
3. Schema generală
Schema generală a unui algoritm recursiv bazat pe metoda reluării este
redată cu ajutorul procedurii ce urmează:
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;
end
else PrelucrareaSolutiei;
end;
4. Procedura Reluare comunică cu programul apelant şi subprogramele apelate
prin variabilele globale ce reprezintă vectorul X şi mulţimile
A1, A2,...,An. Subprogramele apelate execută următoarele operaţii:
PrimulElement (k) – returnează primul element din mulţimea Ak ;
Continuare (k) – returnează valoare truetrue dacă elementele înscrise în primele
k componente ale vectorului X satisfac condiţiile de continu-
are şi false în caz contrar;
ExistaSuccesor (k) – returnează valoarea true dacă elementul memorat în
componenta xk are un succesor în mulţimea Ak şi false
în caz contrar;
Succesor (k) – returnează succesorul elementului memorat în componenta xk ;
PrelucrareaSolutiei – de obicei, în această procedură soluţia reţinută în
vectorul X este afişată la ecran;
5. Din analiza procedurii Reluare, complexitatea temporală a algoritmilor
bazaţi pe metoda reluării este, ca şi în cazul trierii, O(m*), unde
m=max(m1,m2,…,mn).
Timpul real de execuţie, cerut de un algoritm, depinde în mare măsură de
natura problemei, mai exact, de esenţa condiţiilor de continuare şi ordinea în
care apar elementele akj în mulţimile A1, A2,..., An.
****** În majoritatea problemelor mulţimile A1, A2,..., An nu sînt cunoscute
apriori, iar componentele vectorului X pot aparţine şi ele unor tipuri
structurate de date precum – tablouri, mulţimi sau articole.
Complexitatea temporală
6. Din analiza procedurii Reluare, complexitatea temporală a algoritmilor
bazaţi pe metoda reluării este, ca şi în cazul trierii, O(m*), unde
m=max(m1,m2,…,mn).
Timpul real de execuţie, cerut de un algoritm, depinde în mare măsură de
natura problemei, mai exact, de esenţa condiţiilor de continuare şi ordinea în
care apar elementele akj în mulţimile A1, A2,..., An.
****** În majoritatea problemelor mulţimile A1, A2,..., An nu sînt cunoscute
apriori, iar componentele vectorului X pot aparţine şi ele unor tipuri
structurate de date precum – tablouri, mulţimi sau articole.
Complexitatea temporală