o Observatii o Tehnica o Aspecte generale o Algoritmul metodei o Structura rezolvarii o Procedura backtracking o Concluzii Observatii!
• O metoda ineficienta este sa generam
toate combinatiile posibile de valori in rezolvarea unei probleme si sa le alegem pe cele convenabile. • Metoda backtracking se aplica in cadrul problemelor in care solutia este de forma x=x1, x2, … , xn • Metoda backtracking oferã toate solutiile Tehnica n Tehnica backtraking propune generarea solutiilor prin completarea vectorului x in ordinea x1, x2, …, xn astfel: dacã avem o combinatie partiala de forma A1, A2, …, Ak- 1, ne propunem sa alegem pentru xk o valoare Ak astfel incat combinatia rezultatã sã ne permitã sa ajungem la o solutie. Dacã aceasta nu ne conduce la o solutie se renunta la acea valoare si se incearca o alta (dintre cele netestate) Aspecte generale • Presupunem ca s-au gasit A1, A2, …, Ak-1 valori pentru x1, x2, …,xk-1, ne vom ocupa de xk • Algoritmul incepe prin stabilirea unei valori pentru x1 si se incheie când pentru x1 am testat toate valorile posibile Algoritmul metodei • 1) Nu s-a testat nici o valoare • 2) Se verifica daca exista valori netestate pentru xk, daca da, se trece la pasul trei, daca nu, se reia aflarea valorii pentru xk-1, reluând pasul 2 • 3) Se alege prima valoare A dintre cele netestate încã pentru xk • 4) Se verifica dacã aceasta combinatie partiala nu ne conduce la un rezultat. Daca da, trecem la pasul 5, daca nu, se reia pasul 2 pentru k • 5) Se verifica dacã s-a gãsit o solutie, dacã da, se tipareste si se rãmâne la componenta xk, reluându-se pasul 2. Daca nu se reia algoritmul de la pasul 1 pentru k+1 Structura rezolvarii • Conditiile interne – conditiile fiecãrei probleme în parte dintre componentele vectorului solutie • Solutii rezultat – solutii posibile ce verificã conditiile interne • Vectorul solutie – vectorul ce are atâtea componente câte ne permit generarea unei solutii • Conditiile de continuitate – conditiile pentru ca valoarea xk sã fie acceptatã Procedura Backtracking l Procedure Bktr; Begin k:=1;x[k]:=0; while k>0 do if x[k]<n then begin x[k]:=x[k]+1; if cond[k] then if k=n then begin tipar(k); writeln; end; else begin k:=k+1; x[k]:=0; end; end; else k:=k-1; END. Concluzii! l Problemele rezolvate prin aceasta metoda necesitã un timp îndelungat. Din acest motiv, este bine sa utilizam metoda backtracking numai atunci cand nu avem la dispozitie un alt algoritm mai eficient l Exista probleme pentru care nu se cunosc algoritmi eficienti de rezolvare, deci metoda backtracking este indicata