Sunteți pe pagina 1din 8

METODA BACKTRACKING

Stiva este acea form de organizare a datelor (structur de date) cu proprietatea c operaiile de introducere i scoatere a datelor se fac n vrful ei. Stivele se pot simula utiliznd vectori. Fie ST(i) un vector. ST(1), ST(2), ..., ST(n) pot reine numai litere sau numai cifre. O variabil ! indic "n permanent vrful stivei. #$emplific m, "n continuare, modul de lucru cu stiva%
' + '

&n stiva iniial vid se introduce litera ', vrful stivei va fi la nivelul 1 (()1)*

introducem "n stiv litera +, deci ( va lua valoarea 2*

'

scoatem din stiv pe + (' nu poate fi scos)* scoatem din stiv pe '* stiva r mne vid

&n mod practic la scoaterea unei variabile din stiv , scade cu 1 valoarea variabilei ce indic vrful stivei, iar atunci cnd scriem ceva "n stiv , o eventual valoare rezidual se pierde% ,e un anumit nivel se retine, de re-ul , o sin-ur informaie (liter sau cifr ), "ns este posibil* a.a cum va rezulta din e$emplele, prezentate "n lucrare, s avem mai multe informaii, caz "n care avem de a face cu stive duble, triple, etc. &ntrea-a teorie a recursivit ii se bazeaz pe structura de tip stiv .

Prezentarea tehnicii Bac trac ing


'ceast te/nic se folose.te "n rezolvarea problemelor care "ndeplinesc simultan urm toarele condiii% ) soluia lor poate fi pus sub forma unui vector S0$1,$2, ...,$n, cu $1 1 '1, $2 1 '2 2,$n 1 'n

) mulimile '1, '2 , 2., 'n sunt mulimi finite, iar elementele lor se consider c se afl "ntr)o relaie de ordine bine stabilit * ) nu se dispune de o alt metod de rezolvare, mai rapid ) $1 $2 2, $n pot fi la rndul lor vectori* ) '1, '2 2, 'n pot coincide. 3a "ntlnirea unei astfel de probleme, dac nu cunoa.tem aceast te/nic , suntem tentai s -ener m toate elementele produsului cartezian ' 1,'2 2,'n si fiecare element s fie testat dac este soluie. 4ezolvnd problema "n acest mod, timpul de e$ecuie este att de mare, "nct poate fi considerat infinit, al-oritmul neavnd nici o valoare practic . 5e e$emplu, dac dorim s -ener m toate permut rile unei mulimi finite ', nu are rost s -ener m produsul cartezian '$'$.....$', pentru ca apoi, s test m, pentru fiecare element al acestuia, dac este sau nu permutare (nu are rost s -ener m 1.1,1.......1, pentru ca apoi s constat m c nu am obinut o permutare, cnd de la a doua cifr 1 ne puteam da seama c cifrele nu sunt distincte). Te/nica Bac trac ing are la baz un principiu e$trem de simplu% ) se construie.te soluia pas cu pas% $1, $2 2,$n ) dac se constat c , pentru o valoare aleas , nu avem cum s a6un-em la soluie, se renun la acea valoare .i se reia c utarea din punctul "n care am r mas.

!oncret"
) se ale-e primul element $, ce aparine lui '* ) presupunnd -enerate elementele $1,$2 2,$( , aparinnd mulimilor '1, '2 2,'( , se ale-e (dac e$ist ) $(71 , primul element disponibil din mulimea '(71 , apar dou posibilit i % 1) 8u s)a - sit un astfel de element, caz "n care caz "n care se reia c utarea considernd -enerate elementele $1,$2 2,$(71 , iar aceasta se reia de la urm torul element al mulimii '( r mas netestat* 2) ' fost - sit, caz "n care se testeaz dac acesta "ndepline.te anumite condiii de continuare ap rnd astfel dou posibilit i% ) "ndepline.te, caz "n care se testeaz dac s)a a6uns la soluie si apar din nou dou posibilit i ) s)a a6uns la soluie, se tip re.te soluia si se reia al-oritmul considernd -enerate elementele $1,$2 2,$( , (se caut "n continuare, un alt element al mulimii '( , r mas netestat)* ) nu s)a a6uns la soluie, caz "n care se reia al-oritmul considernd -enerate elementele $1,$2 2,$( , si se caut un prim element $(72 1 '(. ) nu le "ndepline.te caz "n care se reia al-oritmul considernd -enerate elementele $1,$2 2,$( , iar elementul $()1 se caut "ntre elementele mulimii ', r mase netestate.
2

'l-oritmii se termin atunci cnd nu e$ist nici un element $1 1 '1 netestat. #$servaie% te/nica Bac trac ing are ca rezultat obinerea tuturor soluiilor problemei. &n cazul "n care se cere o si-ur soluie se poate fora oprirea, atunci cnd a fost - sit . 'm ar tat c orice soluie se -enereaz sub form de vector. 9om considera c -enerarea soluiilor se face intr)o stiv . 'stfel, $ 1 1 '1, se va - si pe primul nivel al stivei, $2 1 '2 se va - si pe al doilea nivel al stivei,... $( 1 '( se va - si pe nivelul ( al stivei. &n acest fel, stiva (notat ST) va ar ta astfel% ... $(
2

ST
2

$2 8ivelul (71 al stivei trebuie $ iniializat (pentru a ale-e, "n ordine, 1 elementele mulimii (71 ). :niializarea trebuie f cut cu o valoare aflat ("n relaia de ordine considerat , pentru mulimea ' (71 ) "naintea tuturor valorilor posibile din mulime. 5e e$emplu, pentru -enerarea permut rilor mulimii ;1,2.....n<, orice nivel al stivei va lua valori de la 1 la n. :niializarea unui nivel (oarecare) se face cu valoarea =. ,rocedura de iniializare o vom numi INIT .i va avea doi parametri% ( (nivelul care trebuie iniializat si ST (stiva)). > sirea urm torului element al mulimii '( (element care a fost netestat) se face cu a6utorul procedurii SUCCESOR ('S,ST,!). ,arametrul 'S (am succesor) este o variabil boolean . &n situaia "n care am - sit elementul, acesta este pus "n stiv .i 'S ia valoarea TRUE, contrar (nu a r mas un element netestat) 'S ia valoarea F'3S#.. Odat ales un element, trebuie v zut dac acesta "ndepline.te condiiile de continuare (altfel spus, dac elementul este valid). 'cest test se face cu a6utorul procedurii %&'() (#9,ST,!). Testul dac s)a a6uns sau nu la soluia final se face cu a6utorul funciei SOLUTIE(() iar o soluie se tip re.te cu a6utorul procedurii TIPAR. ,rezent m "n continuare rutina Bac trac ing% (%01* init(1,st)* ?/ile (@= do be-in repeat succesor (as, st, () * . if as t/en valid(ev,st,()
A

until (not as) or (as and ev) * if as t/en if solutie(() t/en tipar else be-in (%0(7l* init ( (, st )* end* else (%0()1 end* #$servaie" ,roblemele rezolvate prin aceast metod necesit un timp "ndelun-at. 5in acest motiv, este bine s utiliz m metoda numai atunci cnd nu avem la dispoziie un alt al-oritm mai eficient. Bu toate c e$ist probleme pentru care nu se pot elabora ali al-oritmi mai eficieni, te/nica $ac trac ing trebuie aplicat numai "n ultim instan . Fiind dat o tabl de .a/, de dimensiune n, $n, se cer toate soluiile de aran6are a n dame, astfel "nct s nu se afle dou dame pe aceea.i linie, coloan sau dia-onal (dame s nu se atace reciproc). Exemplu: ,resupunnd c dispunem de o tabl de dimensiune C$C, o soluie ar fi urm toarea% 5 5 5 5

Observ m c o dam trebuie s fie plasat sin-ur pe linie. ,las m prima dam pe linia 1, coloana 1. 5

' doua dam nu poate fi a.ezat dect "n coloana A.


C

5 5

Observ m c a treia dam nu poate fi plasat "n linia A. &ncerc m atunci plasarea celei de)a doua dame "n coloana C. 5 5

' treia dam nu poate fi plasat dect "n coloana 2. 5 5 5

&n aceast situaie dama a patra nu mai poate fi a.ezat . &ncercnd s avans m cu dama a treia, observ m c nu este posibil s o plas m nici "n coloana A, nici "n coloana C, deci o vom scoate de pe tabl . 5ama a doua nu mai poate avansa, deci .i ea este scoas de pe tabl . 'vans m cu prima dam "n coloana 2.

' doua dam nu poate fi a.ezat dect "n coloana C. 5 5

5ama a treia se a.eaz "n prima coloan . 5 5 5

'cum este posibil s plas m a patra dam "n coloana A si astfel am obinut o soluie a problemei. 5 5 5 5

'l-oritmul continu "n acest mod pn cnd trebuie scoas de pe tabl prima dam . ,entru reprezentarea unei soluii putem folosi un vector cu n componente (avnd "n vedere c pe fiecare linie se - se.te o sin-ur dam ). #$emplu pentru soluia - sit avem vectorul ST ce poate fi asimilat unei stive. 5ou dame se - sesc pe aceea.i dia-onal dac si numai dac este "ndeplinit condiia% Fst(i))st(6)F0Fi)6F ( diferena, "n modul, "ntre linii si coloane este aceea.i). A ST(C) 1 C 2 ST(A) &n -eneral ST(i)0( semnific faptul c pe linia i dama ocup poziia (. ST(2) ST(1) Exemplu% "n tabla C $C avem situaia% st(1)0 1 i 0 1 5 5 5 5 st(A)0 A 6 0 A Fst(1) ) st(A)F 0 F1 G AF 0 2 Fi G 6F 0 F1 G AF 0 2 sau situaia 5 5 5 5 st(A) 0 1 6 0 A Fst(i) ) st(6)F 0 FA G 1F 0 2 Fi G 6F 0 F1 G AF 0 2 &ntruct doua dame nu se pot - si "n aceea.i coloan , rezult c o soluie este sub form de permutare. O prim idee ne conduce la -enerarea tuturor st(1) 0 A i 0 1

permut rilor si la e$tra-erea soluiilor pentru problema ca dou dame s nu fie plasate "n aceea.i dia-onal . ' proceda astfel, "nseamn c lucr m conform strate-iei $ac trac ing. 'ceasta presupune ca imediat ce am - sit dou dame care se atac , s relu m c utarea. lat al-oritmul, conform strate-iei -enerate de $ac trac ing% ) &n prima poziie a stivei se "ncarc valoarea 1, cu semnificaia c "n linia unu se a.eaz prima dam "n coloan . ) 3inia 2 se "ncearc a.ezarea damei "n coloana 1, acest lucru nefiind posibil "ntruct avem doua dame pe aceea.i coloan . ) &n linia 2 se "ncearc a.ezarea damei "n coloana 2 , "ns acest lucru nu este posibil, pentru c damele se - sesc pe aceia.i dia-onal (Fst(1))st(2)F0F1)2F)* ) '.ezarea damei 2 "n coloana A este posibil . ) 8u se poate plasa dama A "n coloana 1, "ntruct "n liniile 1)A damele ocupa acela.i coloan . ) Ii aceast "ncercare e.ueaz "ntruct damele de pe 2 .i A sunt pe aceea.i dia-onal . ) 5amele de pe 2)A se - sesc pe aceea.i coloan . ) 5amele de pe 2)A se - sesc pe aceea.i dia-onal . ) 'm cobort "n stiv mutnd dama de pe linia 2 .i coloana A "n coloana C. 'l-oritmul se "nc/eie atunci cnd stiva este vid . Semnificaia procedurilor utilizate este urm toarea% INIT ) nivelul ( al stivei este iniializat cu =* SUCCESOR ) m re.te cu 1 valoarea aflat pe nivelul ( al stivei "n situaia "n care aceasta este mai mic dect n .i atribuie variabilei #9 valoarea T4J#, "n caz contrar, atribuie variabilei #9 valoarea F'3S#* VALID ) valideaz valoarea pus pe nivelul ( al stivei, verificnd dac nu avem dou dame pe aceea.i linie (st(()0st(i)), sau dac nu avem dou dame pe aceea.i dia-onal (st(())st(i)0F()iF)caz "n care variabilei #9 i se atribuie F'3S#* "n caz contrar, variabilei #9 i se atribuie T4J#* SOLUTIE ) verific dac stiva a fost completat pn la nivelul n inclusiv* TIPAR ) tip re.te o soluie.

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