Sunteți pe pagina 1din 2

Metoda BACKTRACKING

Prezentarea metodei
1. Când se utilizează metoda backtracking ?

Metoda backtracking se foloseşte în rezolvarea problemelor care îndeplinesc simultan


următoarele condiţii:
soluţia lor poate fi pusă sub forma unui vector S=x1,x2,...,xn, cu x1∈A1, x2∈A2, ...,
xn∈An;
mulţimile A1, A2, ..., An sunt mulţimi finite, iar elementele lor se consideră că se află într-
o relaţie de ordine bine stabilită;
nu se dispune de o altă metodă de rezolvare, mai rapidă.

În continuare, este prezentat un exemplu de problemă care poate fi rezolvat prin utilizarea
tehnicii backtracking.
Generarea permutărilor. Se citeşte un număr natural n. Să se genereze toate permutările
mulţimii {1,2,...,n}. De exemplu, pentru n=3, permutările mulţimii {1,2,3} sunt
prezentate alăturat.
123
132
213
231
312
321
Pentru această problemă, A1=A2=A3={1,2,3}. Fie permutarea 213. Ea este scrisă sub
formă de vector, unde 2∈A1, 1∈A2 şi 3∈A3.
2. Principiul care stă la baza metodei backtracking

Principiul care stă la baza metodei backtracking va fi prezentat printr-un exemplu, acela al
generării permutărilor. Cum se poate rezolva această problemă?
O primă soluţie ar fi să generăm toate elementele produsului cartezian:
{1,2,3}×{1,2,3}×{1,2,3}={11, 12, 13, 21, 22, 23, 31, 32, 33}
×{1,2,3}= {111, 112, 113, 121, 122, 123, 131, 132, 133, 211, 212,
213, 221, 222, 223, 231, 232, 233, 311, 312, 313, 321, 322, 323,
331, 332, 333}.

Apoi, urmează să vedem care dintre elementele acestui produs cartezian sunt permutări,
adică să conţină numai numere distincte. Astfel, 111, 112… nu sunt permutări, dar 123
este permutare, ş.a.m.d. Produsul cartezian are 27 de elemente şi dintre ele, doar 6 sunt
permutări. În general, produsul cartezian are nn elemente, din care permutări sunt doar n!.
Vă daţi seama că un astfel de algoritm de generare a permutărilor este ineficient…
Întrebarea este dacă problema nu se poate rezolva eficient? Să observăm că nu are rost
să generăm un element al produsului cartezian pentru ca apoi, să ne dăm seama că nu
este permutare, deoarece nu este alcătuit din numere distincte. De exemplu, dacă la un
pas al algoritmului am generat 22, e clar că nu se poate obţine o permutare, oricare ar fi
numărul care urmează pe poziţia 3.

Principiul metodei

Metoda backtracking are la bază un principiu simplu: dacă în procesul de generare a


unui vector soluţie S=x1x2,...,xn, pentru componenta k, atunci când am generat deja
x1x2,...,xk, constatăm că valoarea xk nu este bine aleasă (păstrând-o nu se va ajunge
la o soluţie), nu trecem componenta k+1 ci reluăm căutarea pentru altă valoare pentru
componenta k, iar dacă această valoare nu există, reluăm căutarea pentru componenta k-
1.

Observaţi faptul că după ce am analizat posibilele valori pe care le poate lua componenta
k, avem două posibilităţi: ori trecem la componenta k+1 (facem pasul înainte), ori
mergem la componenta k-1 (facem pasul înapoi).

Trecem la exemplificarea algoritmului pentru generarea permutărilor, în cazul în care n=3.

Componenta 1 va memora numărul 1. Întrucât există permutări care încep cu 1,


trecem la elementul 2 – facem pasul înainte.
1
Componenta 2 va memora numărul 1. 1 1

Nu există permutări care încep cu 1,1, motiv pentru care, pentru aceeaşi componentă,
vom reţine valoarea următoare,
adică 2. Întrucât există permutări care încep cu 1,2, vom trece la elementul 3 (înainte).

Componenta 3 va memora numărul 1. 1 2

1 2 1

Nu există permutări care sunt de forma 1,2,1, motiv pentru care aceeaşi componentă
va reţine numărul următor, 2.
1 2 2

Nu există permutări care sunt de forma 1,2,2, motiv pentru care aceeaşi componentă
va memora numărul următor, adică 3. Am obţinut deja o primă soluţie şi o afişăm.

1 2 3
Pentru componenta 3, nu există o altă valoare pe care o putem utiliza. Din acest motiv,
vom trece la elementul 2, (înapoi). Componenta 2 are deja memorată valoarea 2. Alegem
valoarea următoare, 3. Întrucât există permutări care încep cu 1,3, vom trece la elementul
următor, 3 (înainte).
1 3

1 3 1
1 3 2
Prima valoare care poate fi memorată este 1. Întrucât nu există permutări de forma
1,3,1 trecem la valoarea
următoare 2. Dar 1,3,2 este soluţie şi o afişăm.

...
Algoritmul continuă până când se ajunge la componenta de indice 0. În acel moment,
au fost deja afişate toate permutările.