Sunteți pe pagina 1din 3

METODA BACKTRACKING

DESCRIEREA GENERALA A METODEI


Rezolvarea unei probleme poate conduce la obţinerea unui număr foarte mare de soluţii posibile. Nu
întotdeauna ne interesează toate soluţiile, ci numai o parte dintre ele, care îndeplinesc anumite condiţii. Soluţia
unei probleme rezolvate cu metoda BKT se poate reprezenta sub forma unui vector: X=(x1, x2, x3,..,xn).
Fiecare componenta xi a vectorului poate lua valori într-o anumită mulţime Mi unde i=1,2,3,...,n.
Metoda backtracking construieste progresiv vectorul solutiei, pornind de la primul element si
adaugand la vector urmatoarele elemente, cu revenire la elementul anterior din vector, in caz de
insucces. Elementul care trebuie adaugat se cauta în multime, printre elementele care respecta
conditiile interne.
Principiul Backtraking: se construieste solutia pas cu pas daca se considera ca, pentru o valoare aleasa, nu
avem cum sa ajungem la solutie, se renunta la acea valoare si se reia cautarea din punctul in care am ramas.
Tehnica Backtraking se bazezaza pe structura de tip stiva.
Stiva este acea forma de organizare a datelor cu proprietatea ca operatiile de introducre si scoatere a datelor
se fac in varful ei. Metoda backtracking poate fi implementată iterativ sau recursiv.
Metode de generare a elementelor combinatoriale: permutări; combinări; aranjamente; submulţimi;
produs cartezian, partiile unui numar natural, partitiile unei multimi.

GENERAREA PERMUTARILOR
Enunţ: Se citeste de la tastatura un numar n natural nenul. Să se genereze toate permutările mulţimii
M={1,2,...,n}. Numărul de soluţii: n!
Permutările de n elemente sunt mulţimi ordonate ce conţin elementele mulţimii{1,2,...,n} în care fiecare
element apare o singură dată. Orice permutare este alcătuită din toate elementele mulţimii, elementele fiind
distincte.
Exemplu: n=3 M={1, 2, 3} numarul de solutii 3!=1*2*3=6
Solutiile sunt: {1,2,3}, {1.3,2}, {2,1,3}, {2,3,1}, {3,1,2}, {3,2,1}

Exemplificare:
K=3 0 1 2 3 0 1 2 3 0 1 2 3
K=2 0 1 2 2 2 2 2 2 3 3 3 3 3 3 0 1 1 1 1 1
K=1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2

K=3 0 1 2 3 0 2 3 0 1 2 3
K=2 1 2 3 3 3 3 3 3 0 1 1 1 1 1 2 2 2 2 2 2 3
K=1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
Descriere:
Avem o stiva, k reprezinta nivelul in stiva, pe fiecare nivel in stiva se pune o valoare care se afla inaintea tuturor valorilor
din multime, in cazul nostru 0, acest pas se numeste initializare, fiecare nivel va fi initializat cu 0 apoi se cauta
succesorul. Succesor de 0 este 1 care este prima valoare din multime, se apeleaza o functie care verifica nivelul k daca
este corect completat.
Urcam in stiva, k=2, se pune 0, se cauta succesor adica 1, se apeleaza functia care verifica daca 1 se mai afla in stiva. 1
nu este bun si se cauta alt succesor adica 2 nu se mai gaseste in stiva deci este bun atunci urcam in stiva k=3. Se
initializeaza nivelul 3 cu 0. Succesor de 0 este 1 dar nu este bun
Succesor de 1 este 2 care nu este bun. Succesor de 2 este 3, este bun deci am gasit solutia, se tipareste.
In contimuare se cauta succesor pt 3 dar elementele multimii sunt {1.2.3} atunci coboram in stiva la k=2, unde succesor
de 2 este 3 care este bun.
Urcam k=3, se initializeaza nivelul 3 cu 0, se cauta succesor de 0 este 1, care nu este bun, succesor de 1 este 2 care este
bun si am gasit solutia.
Succesor de 2 este 3 care nu este bun atunci coboram in stiva, k=2 unde avem val 3, succesor de 3 nu exista coboram in
stiva k=1, unde avem valaorea 1.
Succesor de 1 este 2 care este bun, urcam in stiva k=2, initializam cu 0, succesorul este 1 care este bun, urcam k=3.
Continuam pana cand stiva este vida si algoritmul se opreste.
1
GENERAREA COMBINĂRILOR

Enunţ: Se citesc de la tastatura doua numere naturale nenule n si p (p≤n). Să se genereze toate combinările
de p elemente ale mulţimii{1,2,...,n}.
𝑛!
Numărul de soluţii∶ 𝑝!(𝑛−𝑝)!: (atentie: 0!=1, daca n=p avem o singura solutie)
Combinările de n elemente luate câte p reprezintă o modalitate de a alege p elemente din cele n date, fără a
conta ordinea elementelor. Două mulţimi care au aceleaşi elemente, dar aşezate în altă ordine se consider
egale.
𝑛! 3! 6
Exemplu: n=3, p=2 M={1,2,3} Numărul de soluţii: 𝑝!(𝑛−𝑝)! = 2!(3−2)! = 2 = 3
Soluţiile: {1,2} {1,3} {2,3}
K=2 0 1 2 3 0 1 2 3 0 1 2 3

K=1 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3
x[k]≤x[k-1]

GENERAREA ARANJAMENTELOR

Enunţ: Se citesc de la tastatura doua numere naturale nenule n si p (p<n). Să se genereze toate aranjamentele
de p elemente ale mulţimii {1,2,...,n}.
𝑛!
Numărul de soluţii: (𝑛−𝑝)!
Aranjamentele de n elemente luate câte p reprezintă o modalitate de a selecta şi aranja p elemente din cele n
date. Două mulţimi care au aceleaşi elemente, dar aşezate în altă ordine se consideră distincte.
𝑛! 3! 6
Exemplu: n=3, p=2 M={1,2,3} Numărul de soluţii: (𝑛−𝑝)! = (3−2)! = 1 = 6
Soluţiile:
{1,2} {1,3}{2,1} {2,3} {3,1} {3,2}
K=2 0 1 2 3 0 1 2 3 0 1 2 3
K=1 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3

GENERAREA SUBMULTIMILOR

Submulţimile reprezintă o modalitate de generarea submultimilor a forma grupuri cu cel puţin un element
şi cel mult n elemente din cele n elemente ale unei mulţimi. Două submulţimi care au aceleaşi elemente, dar
aşezate în altă ordine se consider egale.
Exemplu: n=3 M={1,2,3} Numărul de soluţii: 23-1=7
Soluţiile:{1};{1,2};{1,2,3};{1,3};{2};{2,3};{3}

K=3 0 1 2 3 0 1 2 3 0 1 2 3
K=2 0 1 2 2 2 2 2 2 3 3 3 3 3 3 0 1 1 1 1 1 1 2
K=1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2

K=3 0 1 2 3
K=2 3 3 3 3 3
K=1 2 2 2 2 2 2 3

2
GENERAREA PRODUSULUI CARTEZIAN

Enunţ: Se dau n mulţimi M1, M2,……Mn. Să se genereze toate elementele produsului cartezian M1 x M2
x……x Mn.
Numărul de soluţii: n*n*…*n
Produsul cartezian a n mulţimi reprezintă o mulţime, numită şi mulţimea produs, formată din ansamblul tuturor
grupurilor de n elementele în care prima componenta aparţine mulţimii M1, a doua component aparţine
mulţimii M2,..., a n component aparţine mulţimii Mn.

Exemplu: n=3 M1={1,2,3}, M2={1,2,3}, M3={1,2,3} Numărul de soluţii: nn=33=27

Soluţiile:{1,1,1};{1,1,2};{1,1,3};{1,2,1};{1,2,2};{1,2,3};{1,3,1};{1,3,2};{1,3,3};
{2,1,1};{2,1,2};{2,1,3};{2,2,1};{2,2,2};{2,2,3};{2,3,1}{2,3,2};{2,3,3};
{3,1,1};{3,1,2};{3,1,3};{3,2,1};{3,2,2};{3,2,3};{3,3,1};{3,3,2};{3,3,3}

K=3 0 1 2 3 0 1 2 3 0 1 2 3
K=2 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 0 1
K=1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2

K=3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
K=2 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 0 1 1 1 1 1 1
K=1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3

K=3 0 1 2 3 0 1 2 3
K=2 2 2 2 2 2 2 3 3 3 3 3 3
K=1 3 3 3 3 3 3 3 3 3 3 3 3 3

GENERAREA PARTITIILOR UNUI NUMAR NATURAL

Se citeste de la tastatura un numar natural n>0. Se cere sa se tipareasca toate modurile de descompunere a lui
ca suma de numere naturale.
Exemplificarea functionarii algoritmului pentru n=4:

K=4 0 0 0 1 0 0 0
K=3 0 0 1 1 2 0 1 0 1 0
K=2 0 1 1 1 1 2 2 3 0 1 2 0 1
K=1 1 1 1 1 1 1 1 1 2 2 2 3 3 4
suma S=0 S=1 S=2 S=3 S=2 S=1 S=3 S=1 S=0 S=3 S=2 S=0 S=3 S=0

Solutii: 1111, 112, 121, 13, 211, 22, 31, 4.

Nu cunoasteme lungimea unei solutii, ea poate fi cuprinsa intre 1, in cazul in care numarul in sine constituie
o descompunere a sa si n, atunci cand numarul este descompus ca suma a n numere egale cu 1.

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