Documente Academic
Documente Profesional
Documente Cultură
Teorie Backtracking
Teorie Backtracking
Este o tehnic de programare aplicabil algoritmilor care ofer mai multe soluii i
are ca rezultat obinerea tuturor soluiilor problemei. Fiecare soluie se memoreaz ntr-o
structura de date de tip stiv implementat cu ajutorul unui vector. Deci fiecare soluie
poate fi pus sub forma unui vector.
ntr-un algoritm backtracking ne intereseaz toate soluiile posibile. Pentru a obine
fiecare soluie final se completeaz stiva nivel cu nivel trecnd astfel prin soluii
pariale. Astfel soluiile finale ct i cele pariale pentru a fi luate n considerare trebuie s
ndeplineasc anumite condiii numite condiii de validare. O soluie care ndeplinete o
astfel de condiie se numete soluie valid.
Toate configuraiile stivei ce reprezint soluii finale sunt alctuite din elementele
aceleiai mulimi bine definite pe care o numim mulimea soluiilor. Fiecare nou soluie
parial se obine prin completarea soluiei pariale precedente cu nc o nivel pe stiv. La
fiecare nivel se pun valori din mulimea soluiilor care nu au fost ncercate pn cnd se
obine o soluie valid. n acest moment se trece la nivelul urmtor n stiv pentru a
completa mai departe soluia relund ncercrile pe noul nivel.
La un moment dat pe un anumit nivel nu mai exist nici o valoare nencercat din
mulimea valorilor problemei. n acest caz se face un pas napoi n stiv la nivelul anterior
i se reia cutarea cu valorile rmase nencercate pe acest nivel anterior.
Respectivul nivel a mai fost vizitat dar l-am abandonat dup ce am pus o valoare care
a generat o soluie valid. Deci este posibil s fi rmas aici valori nencercate. Dac nici pe
acest nivel nu mai avem valori nencercate mai facem un pas napoi n stiv. Mecanismul
revenirilor a determinat denumirea de metoda backtracking.
Plecnd de la nivelul 1 i repetnd algoritmul pn cnd pe toate nivelele au fost
ncercate toate valorile din mulimea valorilor se obin soluii finale care se tipresc.
Vom implementa metoda backtracking iterativ folosind o rutin unic aplicabil
oricrei probleme. Rutina va apela funcii care au ntotdeauna acelai nume i care din
punct de vedere al metodei realizeaz acelai lucru.
Sarcina rezolvatorului este s scrie explicit - pentru fiecare problem funciile
aplicate de rutin:
1. Fiecare nivel al stivei trebuie iniializat cu o valoare aflat naintea tuturor valorilor
posibile din mulimea soluiilor. Aceast afiare se face cu funcia init().
2. Gsirea urmtorului element netestat de pe un nivel k al stivei St se face cu funcia
1, dac exist valoare netestat pentru nivelul k
. Dac exist valoare netestat
0, altfel
succesor ()
valid()
soluie ()
Probleme propuse
1. Generarea permutrilor
2. Generarea aranjamentelor
3. Generarea combinrilor
4. Generarea tuturor submulimilor
5. Generarea tuturor partiiilor unei mulimi
6. Generarea produsului cartezian al n mulimi
7. Problema celor n dame
8. Problema labirintului
9. Problema colorrii hrilor
10. Problema comis-voiajorului