Sunteți pe pagina 1din 2

METODA BACKTRACKING ( ITERATIV SAU RECURSIV )

Prezentare general
Metoda backtracking se aplic problemelor pentru care soluia se poate reprezenta sub forma
unui vector X = ( x 1 , x 2 , ... , x n ) S. S este mulimea soluiilor posibile ale problemei.
S=S 1
S 2 ... S n, unde S i sunt mulimi finite, avnd s i elemente i x i S i , pentru i = 1 ... n.
Pentru fiecare problem se dau anumite relaii ntre componentele vectorului X, numite
condiii interne. Soluiile posibile care satisfac condiiile interne se numesc soluii rezultat.
Metoda de generare a tuturor soluiilor posibile i apoi de determinare a soluiilor rezultat
prin verificarea ndeplinirii condiiilor interne este mare consumatoare de timp. Metoda backtracking
evit aceast generare i este deci mai eficient.
Elementele vectorului X primesc pe rnd valori, n ordinea cresctoare a indicilor lor ( lui x k i
se atribuie o valoare numai dac au fost atribuite valori elementelor x 1 , x 2 , ... , x k1 ). La atribuirea
valorii lui x k se verific ndeplinirea unor condiii de continuare, referitoare la x 1 , x 2 , ... , x k1.
Nendeplinirea acestor condiii la pasul k exprim faptul c oricum s-ar alege valorile x k + 1 , ... , x n
nu se va putea ajunge la o soluie rezultat.
Metoda backtracking construiete un vector soluie n mod progresiv, ncepnd cu prima
component a vectorului i mergnd spre ultima, cu eventuale reveniri asupra valorilor atribuite
anterior.
Metoda se aplic astfel :
se alege prima valoare din S1 i i se atribuie lui x 1
se presupun generate elementele x 1 , x 2 , ... , x k1 , cu valori din S 1 , S 2 , ... , S k 1 ; pentru
generarea elementului x k se alege primul element disponibil din S k ; pentru valoarea aleas se
testeaz ndeplinirea condiiilor de continuare; pot apare urmtoarele situaii :
x k ndeplinete condiiile de continuare; se verific dac s-a ajuns la soluia final ( k = n )
i n caz afirmativ se tiprete soluia obinut; dac nu s-a ajuns la soluia final se trece la generarea
elementului urmtor ( x k+1 )
x k nu ndeplinete condiiile de continuare; se ncearc urmtoarea valoare disponibil din S
k ; dac nu exist nici o valoare n S k care s ndeplineasc condiiile de continuare se revine la
elementul x k1 i se reia algoritmul pentru o nou valoare a acestuia.
algoritmul se ncheie cnd au fost luate n consideraie toate elementele mulimii S 1.
Problemele rezolvate prin backtracking necesit timp mare de execuie. Din acest motiv este
bine s se utilizeze metoda numai dac nu exist alt algoritm la dispoziie.
Dac mulimile S 1 , S 2 , ... , S n au toate acelai numr k de elemente, timpul necesar
execuiei algoritmului backtracking este k n. Dac mulimile S 1 , S 2 , ... , S n nu au toate acelai
numr de elemente, atunci se consider m = min { | S 1 | , | S 2 | , ... , | S n | } i M = max { | S 1 | , | S
n
n
2 | , ... , | S n | }. Timpul necesar execuiei este cuprins ntre m i M . Metoda backtracking are deci
complexitate exponenial, fiind n cele mai multe cazuri ineficient. Ea ns nu poate fi nlocuit cu
alte variante de rezolvare mai rapide n situaia n care se cere determinarea tuturor soluiilor unei
probleme.
Probleme care se rezolv prin backtracking sunt: problema damelor, problema colorrii unei
hri, generarea elementelor combinatoriale etc.
Procedura general backtracking este:
k=1
x[k]=0
// configuraia iniial
while(k>0)
// nu s-a ajuns la configuraia final
{ while(Sk)
// nu s-au epuizat toate valorile din Sk
{ xkcel mai mic element din Sk
Sk=Sk-{xk}
if cc(k)
// testeaz dac xk ndeplinete
// condiiile de continuare
if(k==n) afisare()
// afieaz soluia generat
// complet

else { k=k+1;
xk=0; }
}
k=k-1;

// avans la poziia urmtoare


// iniializare element urmtor
// revenire la poziia anterioar }

}
Funcia cc verific dac valorile primelor k componente ale vectorului X ndeplinesc
condiiile de continuare impuse de problem.