You are on page 1of 17

Aspecte teoretice

Metoda Backtracking este o metodă de elaborare a algoritmilor.


Ea se aplică problemelor în care soluţia se poate reprezenta sub
forma unui vector, X=(x1,x2,...xm), care aparţine lui S=S1xS2x...Sm

- S=S1xS2x...Sm se numeşte spaţiul soluţiilor posibile


- Pentru fiecare problemă în parte se dau anumite condiţii între
componentele vectorului soluţie care se numesc condiţii
interne
- Soluţiile posibile care verifică condiţiile interne se
numesc soluţii rezultat
- Metoda Backtracking îşi propune să genereze toate soluţiile
rezultat
O metodă simplă de a genera soluţiile
rezultat constă în a genera într-un mod
oarecare toate soluţiile posibile şi de a
alege dintre acestea doar pe cele care
verifică condiţiile interne. Dezavantajul
constă în faptul că timpul cerut este
foarte mare.
Metoda Backtracking urmăreşte să evite generarea
tuturor soluţiilor posibile. Pentru aceasta elementele
vectorului x primesc pe rând valori în sensul că lui xk i se
atribuie o valoare doar dacă componentele din faţa sa x1,
x2,...xk-1 au primit valori.
Dacă lui xk i s-a atribuit o valoare, nu se trece direct la
atribuirea de valori lui xk+1, ci se verifică nişte condiţii de
continuare, referitoare la x1, x2,...xk-1 xk. Dacă condiţiile
de continuare au fost satisfăcute, se trece la calculul lui
xk+1. Neîndeplinirea lor exprimă faptul că oricum s-ar alege
xk+1,...,xn, nu se va ajunge la o soluţie rezultat. Evident,
ca în cazul neîndeplinirii condiţiilor de continuare va trebui
să se facă o altă alegere pentru xk. Sau dacă Sk a fost
epuizat, să se micşoreze k cu o unitate, încercând să se
facă o nouă alegere pentru xk.
Exemplu pentru înţelegerea
metodei
Pentru a înţelege mai uşor prezentăm următorul exemplu:
Presupunem că dorim să ne îmbrăcăm de la un magazin
pentru o festivitate şi dorim să cumpărăm: pantofi, ciorapi,
pantaloni, cămaşă şi cravata astfel încât acestea să se
asorteze între ele, să se genereze toate modalităţile de a ne
îmbrăca.

Magazinul are:
5 etaje
La etajul 1 are 10 raioane cu pantofi
La etajul 2 are 10 raioane cu ciorapi
La etajul 3 are 10 raioane cu pantaloni
La etajul 4 are 10 raioane cu cămăşi
La etajul 5 are 10 raioane cu cravate
Deoarece soluţia are mai multe componente, 5 – câte etaje
are magazinul, putem folosi metoda Backtracking. Pentru
rezolvare vom folosi:
k : variabilă întreagă care reprezintă etajul pe care ne
găsim
x : vector care are 5 componente întregi, adică exact câte
etaje are magazinul cu proprietatea că xk reprezintă numărul
raionului de la care s-a cumpărat pe etajul k. În cazul de faţă
xk {1,...,10} unde k{1,...,5}
as este o variabilă întreagă care primeşte valoarea 1 dacă
pe etajul k mai sunt raioane nevizitate şi primeşte valoarea
0 dacă pe etajul k nu mai sunt raioane nevizitate.
ev este o variabilă întreagă care primeşte valoarea 1 dacă ce
este la raionul xk convine şi primeşte valoarea 0 dacă ce este
la raionul xk nu convine.
IMPLEMENTAREA METODEI BACKTRACKING

Forma generală a unei funcţii backtracking


Implementarea recursivă a algoritmului furnizat de metoda backtracking,
este mai naturală şi deci mai uşoară.
IMPLEMENTAREA METODEI BACKTRACKING

Pentru exemplificare vom utiliza generarea permutarilor.


Date si structuri de date:
v – vectorul solutie
n – numarul de elemente
k – pozitia din vector care se completeaza
Functii:
valid() – verifica conditiile de continuare
solutie() – verifica daca s-a determinat o solutie
afisare() – afiseaza solutia
bk() – functia backtracking
Permutări
O permutare a unei mulţimi cu n elemente este un şir de
elemente obţinut prin schimbarea ordinii elementelor
mulţimii date sau chiar mulţimea însăşi.
Ne gândim la generarea permutărilor atunci când se dă o
mulţime cu n elemente ca date de intrare iar soluţia este sub
forma de vector, tot cu n elemente, ale cărui componente sunt
distincte şi aparţin mulţimii date.
Exemplu: Fie A={1,2,3}. Permutările mulţimii A sunt: (1,2,3),
(1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1).

Fie A={a1, a2,…,am} o mulţime cu elemente de tip întreg.


Trebuie determinate elementele mulţimii { y1, y2,…,ym }| ykA,
k=1,2,...,m, pentru yiyj pentru ij}.
Deci, x=( x1, x2,…,xm) unde x{1,...,m}, elementele vectorului
x trebuie să fie distincte.
IMPLEMENTAREA METODEI BACKTRACKING
IMPLEMENTAREA METODEI BACKTRACKING

 Problema generării permutărilor, este cea mai


reprezentativă pentru metoda backtracking, ea conţine
toate elementele specifice metodei.

 Probleme similare, care solicită determinarea tuturor


soluţiilor posibile, necesită doar adaptarea acestui algoritm
modificând fie modalitatea de selecţie a elementelor din
mulţimea Sk, fie condiţiile de continuare fie momentul
obţinerii unei soluţii
Aranjamente

Se dau două mulţimi A={1,2,…,p} şi


B={1,2,…,m} se cer toate funcţiile injective
definite pe A cu valori în B. O astfel de problemă
este una de generare a aranjamentelor de n luate
cate p (Anp).
Exemplu: p=2, n=3. Avem (1,2), (2,1), (1,3),
(3,1), (2,3), (3,2). De exemplu (2,1) este funcţia
f:A→B dată astfel f(1)=2, f(2)=1. Avem relaţiile:
=m(m-1)...(m-p+1).
Avem relaţiile:
m!
A p
= m(m-1)...(m-p+1).
(m  p)
n

Se citesc m şi p. Să se genereze toate aranjamentele de m


luate câte p.
Se observă că dacă se cunoaşte fiecare submulţime de p
elemente a mulţimii de m elemente, atunci aranjamentele se pot
obţine permutând în toate modurile posibile elementele unei
astfel de mulţimi.
O soluţie este de forma: x1,x2,...xp unde x1,x2,...xpB. În
plus x1,x2,...xp trebuie să fie distincte. O soluţie are p numere
din mulţimea B şi numerele trebuie să fie distincte.
De aici rezultă că algoritmul este acelaşi ca la permutări,
diferenţa fiind dată de faptul că soluţia are p numere, nu m ca în
cazul permutărilor.
GENERAREA ARANJAMENTELOR

 Se citesc n şi p numere naturale cu p<=n. Sa se genereze toate


aranjamentele de n elemente luate câte p.
Exemplu pentru n=3, p=2
(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)
 Vom genera pe rând soluţiile problemei în vectorul v=(v1,v2,v3,...,vn) ,
unde vk € Sk
 Conditia interna: elementele nu au voie sa se repete.
 Obţinem o soluţie în momentul în care completăm vectorul cu p elemente.
 In cadrul programului pentru generarea permutărilor trebuie modificata o
singură funcţie pentru a obtine generarea aranjamentelor şi anume
funcţia soluţie, astfel:
GENERAREA ARANJAMENTELOR
GENERAREA COMBINARILOR

Se citesc n şi p numere naturale cu p<=n. Să se genereze toate


combinările de n elemente luate câte p. Exemplu pentru n=3,
p=2. obţinem (1,2), (1,3), (2,3)

În cadrul unei combinări elementele nu au voie să se repete.

Să mai observăm şi faptul că dacă la un moment dat am generat


de exemplu soluţia (1,2), combinarea (2,1) nu mai poate fi luată
în considerare, ea nu mai reprezintă o soluţie. Din acest motiv
vom considera că elementele vectorului reprezintă o soluţie,
numai dacă se află în ordine strict crescătoare. Acestea
reprezintă condiţiile de continuare ale problemei.
GENERAREA COMBINARILOR

You might also like