Sunteți pe pagina 1din 2

METODA BACKTRACKING

De multe ori, n aplicaii apar probleme n care se cere gsirea unor


soluii de forma x=x1x2xn, unde xiAi, i=1,,n, n care x1...xn trebuie s
ndeplineasc anumite condiii. Am putea s generm toate combinaiile
posibile de valori i apoi s le alegem doar pe cele convenabile.
Considernd mulimile Ai={ai,1, ai,2,,ai,n(i)}, aceste combinaii s-ar putea
construi astfel: pentru fiecare valoare posibil fixat pentru componenta x i, vom
alege toate valorile posibile pentru componenta x i+1 i pentru fiecare astfel de
valoare fixat pentru xi+1 vom alege toate valorile posibile pentru componenta
xi+2 etc.
Rezolvnd problema n acest mod, deci genernd toate elementele
produsului cartezian A1xA2x...An i verificnd abia apoi dac fiecare combinaie
este o soluie, eficiena este sczut.
Astfel, dac de exemplu ne propunem s generm toate cuvintele
formate cu literele a, b, c, aa nct fiecare liter s apar o singur dat,
combinaiile posibile sunt n numr de 27, dintre care convin doar 6.
Tehnica Backtracking propune generarea soluiei prin completarea
vectorului x n ordinea x1x2...xn i are la baz un principiu de bun sim: dac se
constat c avnd o combinaie parial de forma v 1v2...vk-1 (unde v1, ..., vk-1 sunt
valori deja fixate), dac alegem pentru x k o valoare vk i combinaia rezultat nu
ne permite s ajungem la o soluie, se renun la aceast valoare i se
ncearc o alta (dintre cele netestate n aceast etap). ntr-adevr, oricum am
alege celelalte valori, dac una nu corespunde nu putem avea o soluie. []

nainte de a scrie programul care ne va obine soluiile, trebuie s


stabilim unele detalii cu privire la: vectorul soluie (cte componente are, ce
menine fiecare component), mulimea de valori posibile pentru fiecare
component (sunt foarte importante limitele acestei mulimi), condiiile de
continuare (condiiile ca o valoare x[k] s fie acceptat), condiia ca ansamblul
de valori generat s fie soluie.

Procesare de texte

Pe baza acestor date vom scrie apoi procedurile i funciile pe care le


vom apela n algoritmul general al metodei []. Aceste proceduri i funcii au o
semnificaie comun, prezentnd ns particulariti n funcie de fiecare
problem n parte.
Astfel, se va nota cu x vectorul care va conine soluia; x[k]=v va avea
ca semnificaie faptul c elementul al v-lea din mulimea de valori posibile A k a
fost selectat pentru componenta x k. Dac mulimea Ak are m elemente,
a1a2...am, pentru uurin, ne vom referi la ele prin indicii lor, 1, 2, ..., m.
Observaie: De obicei valorile posibile sunt chiar succesive i n acest
caz se poate considera c x[k]=v are semnificaia c pentru componenta x k s-a
ales chiar valoarea v. []
Exerciii i probleme []
1. Dac pentru nivelul k oarecare al vectorului soluie am
verificat toate valorile posibile:
a) algoritmul se ncheie;
b) se revine pe nivelul anterior;
c) se trece pe nivelul urmtor.
2. Dup ce s-a gsit o valoare convenabil pentru componenta
k, urmtorul pas este:
a) se trece la componenta urmtoare, k+1 (dac nu s-a
ajuns la soluie);
b) se rmne la componenta k, cutnd n continuare o
alt valoare convenabil;
c) se revine la componenta k-1.
3. n ce condiii se revine la componenta anterioar?
a) dup ce am gsit o valoare convenabil pentru
componenta k;
b) dac valoarea testat pentru componenta k nu
convine;
c) dac am testat toate valorile posibile pentru
componenta k.
Fiecrei situaii din prima coloan i corespund una sau mai multe
operaii din coloana a doua realizai asocierile corecte.

Nr.crt

Situaie

Operaie

Se revine de la componenta k+1


la k
Se trece de la componenta k-1
la k
Se rmne pe nivelul k

Iniializare pentru x[k]

2
3

Se testeaz urmtoarea valoare


posibil pentru x[k]
Se tiprete o soluie

(Adaptat dup Manualul de Informatic, clasa a X-a, Livia oca, AndreeaRuxanda Demco, Cristian Opincaru, Adrian Sindile)

Procesare de texte