Sunteți pe pagina 1din 10

Backtracking

Cuprins

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

S-ar putea să vă placă și