Sunteți pe pagina 1din 1

Backtracking este o metod de parcurgere sistematic a spaiului soluiilor posibile al unei

probleme. Este o metod general de programare, i poate fi adapt pentru orice problem pentru
care dorim s obinem toate soluiile posibile, sau s selectm o soluie optim, din mulimea
soluiilor posibile. Backtracking este ns i cea mai costisitoare metod din punct de vedere al
timpului de execuie. Aceast tehnic poate fi utilizat pentru rezolvarea problemelor de cutare.
Cutarea efectuat este exhaustiv, putnd fi folosit pentru generarea tuturor soluiilor posibile.
Se folosete n rezolvarea problemelor care ndeplinesc simultan urmtoarele condiii: Soluia lor
poate fi pus sub forma unui vector V = x1x2x3 . xn, cu x1A1 . Xn An Mulimile A1, A2,
An sunt mulimi finite, iar elementele lor se afl ntr-o
ordine bine stabilit Nu se dispune de o metod de rezolvare mai rapid La ntlnirea unei astfel
de probleme suntem tentai s generm toate elementele produsului cartezian A1 A2 . An.
Aceasta nu este totui o rezolvare foarte
rezonabil. Timpul de execuie este att de mare, nct poate fi considerat infinit. Dac de exemplu
dorim s generm toate permutrile unei mulimi, genernd produsul cartezian, am putea obine
1,1,1,.1, pentru ca apoi s constatm c nu am
obinut o permutare (cifrele nu sunt distincte), dei chiar de la a 2-a cifr se poate observa c
cifrele nu sunt distincte.
Tehnica Backtracking are la baz un principiu extrem de simplu: se construiete soluia pas cu pas.
Dac se constat c pentru o anumit valoare nu se poate ajunge la soluie, se renun la acea
valoare i se reia cutarea din punctul unde am rmas. Prezentarea algoritmului Pentru uurarea
nelegerii metodei vom prezenta o rutin unic, aplicabil oricrei
probleme, rutin care utilizeaz noiunea de stiv. se alege primul element x1, ce aparine lui A1;
presupunnd generate elementele x1xk, vom avea 2 posibiliti: o nu s-a gsit un astfel de
element, caz n care se reia cutarea, considernd
generate elementele x1 xk-1, iar aceasta se reia de la urmtorul element Ak, rmas netestat. o a
fost gsit, caz n care se testeaz dac acesta ndeplinete anumite condiii (rspunsul poate fi
verificat de o funcie Validare care returneaz true sau false). o dac le ndeplinete, se testeaz
dac s-a ajuns la soluie (se utilizeaz funcia Soluie, care returneaz true dac s-a ajuns la soluie)
dac s-a ajuns la soluie, se tiprete i se continu algoritmul pentru gsirea unei alte soluii,
considerndu-se generate x1xk, iar elementul xk+1 se caut printre elementele mulimii Ak+1
rmase netestate dac nu s-a ajuns la soluie se reia algoritmul considerndu-se generate
elementele x1, xk, xk+1 o dac nu le ndeplinete se reia algoritmul considernd generate x1
xk, iar elementul xk+1 se caut printre elementele mulimii Ak+1 rmase netestate
Algoritmul lui Kruskal este un algoritm n teoria grafurilor care gsete arborele parial de cost minim pentru
un graf conex ponderat. Cu alte cuvinte, gsete submulimea muchiilor care formeaz un arbore care include
toate vrfurile i care este minimizat din punct de vedere al costului. Dac graful nu este conex, atunci algoritmul
gsete o pdure parial de cost minim (un arbore parial de cost minim pentru fiecare component conex).
Algoritmul lui Kruskal este un exemplu de algoritm greedy.Algoritmul funcioneaz n felul urmtor:creeaz o
pdure F (o mulime de arbori), unde fiecare vrf din graf este un arbore separatcreeaz o mulime S care
conine toate muchiile din grafatt timp ct S este nevidelimin o muchie de cost minim din Sdac acea muchie
conecteaz doi arbori distinci, atunci adaug muchia n pdure, combinnd cei doi arbori ntr-unul singur
altfel, ignor muchiaLa sfritul algoritmului, pdurea are doar o component care reprezint un arbore parial de
cost minim al grafului.determinarea unui arbore partial minim al unui graf ponderat conex
G=(V,E,w)
Algoritm:Verificarea conditiei ca muchia selectata sa nu formeze niciun ciclu cu muchiile selectate
la etapele precedente este realizata prin utilizarea unui vector numit TATA. Pentru fiecare varf i
(varfurile grafului fiind numerotate de la 1 la n), elementul TATA[i] este:predecesorul varfului i in
arborele construit pana la momentul curent, daca i nu este radacina arborelui respectiv numarul
de varfuri ale arborelui de radacina i , daca varful i este radacina.La inceput, nu e construit niciun
arbore (E0= multimea vida), fiecare varf este radacina unui arbore format dintr-un singur nod, deci
elementele vectorului TATA se initializeaza cu -1.Adaugare muchie noua:se alege muchia de cost
minim e=v1v2 dintre muchiile neanalizate anterior. Daca varfurile v1 si v2 nu apartin aceluiasi
arbore, atunci propritatea de aciclicitate este respectata si muchia e poate fi adaugata la structura
curenta.Adaugarea muchiei selectate este realizata prin reunirea arborilor din care fac parte v1 si
v2, de radacini r1 si r2. Arborele cu mai putine noduri este legat la arborele cu mai multe noduri,
radacina celui din urma ramanand radacina pentru noul arbore format. Numarul de noduri din
fiecare arbore este inscris in elementul corespunzator din vectorul TATA.Daca TATA[r1]<TATA[r2]
=> arborele rezultat prin reunirea celor doi arbori are ca radacina varful r1, iar varful r2 devine fiu
al lui r1.Altfel, radacina arborelui rezultat prin reunire este r2, iar r1 devine fiu al lui r2.
Calculul se incheie dupa ce au fost adaugate n-1 muchii

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