Sunteți pe pagina 1din 2

Metoda Backtracking

Se poate folosi pentru problemele in care trebuie sa se genereze toate valorile . o soluție a problemei
putând fi data de un vector S=Ăx1,x2,…,xnÎ (care coincide fizic cu valorile stivei), elementele vectorului
aparțin fiecare unei mulțimi finite Ai (xi ͼ Ai) iar asupra elementelor unei soluții există anumite restricții

Ex: Să se genereze toate permutările mulțimii {1,2,3}.

Elementele care alcătuiesc o soluție sunt numerele din mulțimea {1,2,3} cu condiția ca ele să fie
distincte ( condiția internă a soluției). O soluție a cestei probleme este un vector cu trei componente
S={x1,x2,x3}, în care elementele xi reprezintă numărul care se va gasi, în permutare, pe pozitia i.

Mulțimie Ai coincid. Ele au eceleași 3 elemente, fiecare element reprezentând un număr

Ai={ 1,2,3 } = A

Dacă s-ar rezolva classic această problem ar însemna să se genereze toate elementele produsului
cartezian A1 X A2 X A3=A3, adică mulțime

{ (1,1,1), (1,1,2), (1,1,3), (1,2,1), ….., (3,3,2), (3,3,3)} după care se va verifica fiecare element al mulțimii
dacă este o soluție a problemei, adică dacă cele 3 numere dintr-o soluție sunt distincte. Soluțiile sunt:

{ (1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1) }

Observație: Metoda clasică de rezolvare a acestui tip de problem necesită foarte multe operații

Metoda backtracking construiește progrsiv vectorul soluției, pronind de la primul element și adăugându-
se în vector următoarele elemente – cu revenire la elementul antrerior din vector – în caz de insucces.
Elementul care trebuie adăugat se caută în mulțime, printer elementele care respectă condițiile interne.

Prin metoda backtracking se obțin toate soluțiile problemei.

Exemplu de implementare pentru problema permutării de n elemente

Pas1: Se alege primul element al soluției ca fiind primul element din mulțimea A. Ex: x1 = 1

Pas2: Se caută al doilea element al soluției (x2). Pentru a-l găsi se aprcurg pe rând elementele mulțimii A.
Se verifică dacă respectă condițiile interne. (în exemplu se găsește elemental x1=2)

Pas3: Se caută al 3 lea element al soluției (x3). Căutarea va folosi același algoritm ca la pasul2 (În
exemplu se caută numărul din poziția a 3 a din permutare. Se gasește x3=3)

Pas4: Presupunând că s-au găsit primele k elemente ale soluției x1,x2,x3,…,xk se trece la căutarea celui
de-al k+1 lea element al soluției, Xk+1. Căutarea se va face astfel: se atribuie pe rând, lui Xk+1,
elementele mulțimii A , până se găsește primul element I care îndeplinește condiția internă (În exenplu,
numărul de pe poziția k+1 a permutării diferite de numerele din pozițiile anterioare ale lui k+1. Pot să
apară 2 situații:

a) Există un element i, în mulțimea A astfel încât Xk+1=I să fie element al soluției problemei. În
acest caz, se atribuie elementului Xk+1 al soluției aloarea i, după care se verifică dacă Xk verifică
condițiile interne. Dacă k =n. (dacă s-a gasit soluția problemei, atunci se afișează soluția, altfel se
caută următorul element al soluției, reluându-se operațiile de la pasul 4.
b) S-au parcurs toate elementele mulțimii A și nu s-a găsit niciun element I care să fie elemental
Xk+1 al soluției problemei. Rezultă că trebuie să revenim la elemental k al soluției Xk. Deci, se
consederă generate primele k-1 elemente ale soluției: X1, X2, ….., Xk-1 și pentru elemental Xk al
soluției, se reia căutarea cu următorul element din mulțimea A, adică se reiau operațiile de la
Pasul4

Pas5

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