Sunteți pe pagina 1din 1

Backtracking este numele unui algoritm general de descoperire a tuturor soluiilor unei probleme de

calcul, algoritm ce se bazeaz pe construirea incremental de soluii-candidat, abandonnd fiecare candidat


parial imediat ce devine clar c acesta nu are anse s devin o soluie valid.
Exemplul de baz folosit n numeroase manuale de liceu i de nivel universitar este problema reginelor, care
cere s se gseasc toate modurile n care pot fi aezate pe o tabl de ah opt regine astfel nct s nu se
atace. n abordarea backtracking, candidatele pariale sunt aranjamente de cte k regine pe primele k rnduri
ale tablei, toate pe rnduri i coloane diferite. Orice soluie parial ce conine dou regine care se atac
poate fi abandonat, deoarece n mod clar restul de regine nu pot fi aezate ntr-o soluie valid.
Tehnica backtracking se poate aplica doar pentru probleme ce admit conceptul de candidat parial de
soluie i ofer un test relativ rapid asupra posibilitii ca un astfel de candidat s fie completat ctre o
soluie valid. Cnd se poate aplica, ns, backtrackingul este adesea mult mai rapid dect cutarea prin
metoda forei brute prin toi candidaii, ntruct este capabil s elimine dintr-un singur test un mare numr
de candidai.
Aceasta tehnica se foloseste in rezolvarea problemelor care indeplinesc simultan urmatoarele conditii:
solutia lor poate fi pusa sub forma unui vector S=x1,x2,x3xn cu
x1A1,x2A2,.....,xnAn;
multimile A1,A2,A3An sunt multimi finite ,iar elementele lor se
ordine bine stabilita
nu se dispune de o alta metoda de rezolvare ,mai rapida.

considera ca se afla intr-o relatie de

Tehnica Backtracking are la baza un principiu extrem de simplu:


se construieste solutia pas cu pas:x1x2x3xn;
daca se constata ca,pentru o valoare aleasa,nu avem cum sa ajungem la solutie ,se renunta la acea
valoare si se reia cautarea din punctul in care am ramas
Pentru usurarea intelegerii metodei,vom prezenta o rutina unica aplicabila oricarei probleme,rutina
care utilizeaza notiunea de stiva.Rutina va apela proceduri si functii care au totdeauna acelasi nume si
parametri si care din punct de vedere al metodei realizeaza acelasi lucru.Sarcina rezolvitorului este de a
scrie explicit pentru fiecare problema in parte procedurile si functiile apelate de Backtraking.Evident,o
astfel de abordare conduce la programe lungi.Nimeni nu ne opreste,ca dupa intelegerea metodei sa scriem
programe scurte specifice fiecarei probleme in parte(de exemplu scurtam substantial textul doar daca
renuntam la utilizarea procedurilor si functiilor)
Prezentam in continuare rutina Backtracking:
k:=1;init(1,st);
while k>0 do
begin
repeat
succesor(as,st,k);
if as then valid(ev,st,k);
until (not as) or (as and ev );
if as then
if solutie(k) then
tipar
else
begin
k:=k+1;
init(k,st);
end
else
k:=k-1;
end;

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