Sunteți pe pagina 1din 2

BACKTRACKING

DESCRIERE I APLICABILITATE
Backtracking este o metod de rezolvare a unor probleme care ndeplinesc urmtoarele condiii simultan:
Soluia lor poate fi pus sub forma unui vector V , cu V[i] Ai, i = 1..n;
Mulimile Ai, i=1..n sunt mulimi finite, iar elementele lor se consider a fi ntr-o relaie de ordine bine
stabilit;
Nu se dispune de o alt metod de rezolvare mai rapid.

OBSERVAII:
Nu pentru toate problemele n este cunoscut de la nceput;
V[i], i=1..n pot fi la rndul lor vectori;
n multe probleme Ai, i=1..n coincid.

EXEMPLU:
Generarea permutrilor mulimii {1, 2, , N}.
CAZ PARTICULAR: N=3
Soluia este: {1, 2, 3}, {1, 3, 2}, {2, 1, 3}, {2, 3, 1}, {3, 1, 2}, {3, 2, 1}
A1 = A2 = A3 = {1, 2, 3}

PRINCIPIUL DE BAZ ESTE URMTORUL:


Se construiete soluia pas cu pas: X1, X2, , Xn
La un moment dat se caut o valoare pentru componenta k. Se testeaz pe rnd valorile din Ak. Dac se
constat c pentru o valoare aleas nu avem cum s ajungem la soluie, se renun la acea valoare i se reia
cutarea cu alt valoare. Este necesar o funcie care verific dac pentru o anumit poziie, s-a ales o
valoare care poate conduce la soluie (funcia de tiere). Astfel, cutarea se realizeaz ntr-un spaiu parial
de soluii determinat de funcia de tiere.

Se explic pas cu pas permutrile mulimii 1, 2, 3

1
CONCRET:

Iniial:
Se alege primul element V[1] care aparine lui A1;

La pasul k:
Presupunnd generate elementele V[1], V[2], , V[k-1], V[i] Ai, se caut[ un element pentru V[k]
Se alege (dac exist) un element din Ak. ( V[k]++; )
Exist dou posibiliti.

1. Nu s-a gsit un astfel de element


n acest caz n care se reia cutarea considernd generate elementele V[1], ., V[k-2].
Cutarea se reia pentru componenta k-1. ( pasul backword, k-- ; )

2. A fost gsit V[k] Ak.


Se verific dac V[k] ndeplinete anumite condiii de continuare (funcia de tiere).
Apar dou posibiliti

2.1. Dac V[k] ndeplinete condiiile de continuare


Se verific dac s-a ajuns la soluie
Apar dou posibiliti:

2.1.1. Dac s-a ajuns la soluie


Se tiprete soluia

2.1.2. Dac nu s-a ajuns la soluie


Se reia algoritmul pentru componenta k+1 (pas forward , k++)

2.2. Dac V[k] nu ndeplinete condiiile de continuare


Se reia algoritmul considernd generate elementele V[1], , V[k-1]
Se caut alt valoare pentru V[k] ntre elementele mulimii Ak rmase netestate.

Algoritmul se termin atunci cnd nu mai exist nici un element n A1 netestat.

Observaie:
Tehnica Backtracking are ca rezultat obinerea tuturor soluiilor problemei.
n cazul n care se cere o singur soluie se poate fora oprirea, atunci cnd a fost gsit prima soluie.

EXEMPLU PENTRU PERMUTRI

OBSERVAII:
Vectorul soluie va avea lungimea constant N (3)
Pentru fiecare component a vectorului vom testa elementele 1, 2, .. , N (1, 2, 3). n acest caz
mulimile A1, A2, .. AN sunt identice.
Funcia de tiere trebuie s decid dac elementele V[1], V[2], , V[k-1] sunt diferite de V[k]
Funcia de tiprire va afia elementele V[1], V[2], , V[N].

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