Sunteți pe pagina 1din 3

BACKTRACKING

Adesea, soluția unei probleme este formată din elemente distincte. Elementele
componente soluției aparțin unei mulțimi Si, i=1,n ; card Si=n. Există o relație de ordine pe Si
și soluția aparține spațiului soluțiilor S=s1*s2*..*sn={x=(x1,x2....xn)/xi aparține lui Si}.
L:S{DA,NU} funcție de validare care face legătura între elementele xi care aparțin lui Si,
astfel încât L(x)=DA, x aparține lui R. R= mulțimea soluțiilor rezultat . R={x aparține lui
S/L(x)=DA}. Evident, nu orice element din spațiul soluțiilor constituie o soluție acceptabilă.
Soluția unei probleme poate fi găsită în 2 moduri:
1. Calcule – consum mic de resurse, de preferat dar nu mereu disponibil
2. Căutarea în spațiul soluțiilor
O metodă de căutare în spațiul soluțiilor este Backtracking, ce implică o verificare a tuturor
elementelor din spațiul soluțiilor (parcurgere). Este o metodă costisitoare, lentă, cu un consum
mare de resurse, care crește odată cu dimensiunea problemei. Este recomandată atunci când
nu există o altă posibilitate de rezolvare. Pentru a reduce complexitatea problemei, este
posibilă combinarea cu alte metode, fiind de natură recursivă.
Soluția va fi un vector x = (x1, x2, ..,xn), elementele sale trebuind să îndeplinească condițiile
interne. Elementele care îndeplinesc aceste condiții se numesc soluții rezultat.
Construirea soluțiilor se face prin alegerea de valori pentru fiecare element pe rând. Apoi, se
verifică dacă soluția parțială îndeplinește condițiile de continuare (strict necesare).

Dacă DA, se trece la alegerea unei valori din Si+1 pentru xi+1, considerată consumată.

Dacă NU, orice valori s-ar alege pentru xj, j=i+1,n nu sunt soluțiile rezultat și se alege o altă
valoare pentru xi din Si, care nu a mai fost aleasă anterior (neconsumată). Dacă în Si nu mai
sunt elemente disponibile, se revine la xi-1 și se alege pentru el o valoare neconsumată din Si-
1.
Când se revine la elementul anterior, nicio valoare nu a fost consumată, de aici vine și numele
metodei care constă în revenirea pe drumul urmat în construirea soluțiilor, până la o bifurcație
de unde se poate continua pe alt drum.
O alegere bună a condițiilor de continuare duce la micșorarea volumului de calcul. Pentru i=n
==» condiții continuare = interne, mulțimea valorilor consumate = Ci,
Configurația:
 x1, x2, ...xi-1 au primit valoarea v1, v2,..vi-1 care satisfac condițiile de continuitate,
pentru că se află în stânga.
 Valorile consumate pentru x1, x2,...xi-1 sunt C1, C2,...Ci-1
 Atribuirea xi cu valorile neconsumate din Si-Ci
Pentru a găsi o soluție se pleacă de la o configurație inițială

la una sau mai multe configurații soluție

Algoritmul continuă cu analizarea altor elemente și găsirea altor configurații soluție, ajungând
la o configurație finală:

Procesul de căutare se încheie când C1 = S1

ALGORITM GENERAL
Inițializare S1, S2,..., Sn
Ci = mulțimea vidă, i=1,n
//construire configurație inițială
i=1
cât timp i > 0 //cât timp configurația nu este finală
dacă i = n+1 // configurație de tip soluție
reține soluția sol = (x1, x2, ..., xn)
i = i-1 //revine după construirea de soluții
altfel dacă Ci + Si //mai sunt valori neconsumate
alege o valoare vi aparține lui Si – Ci
Ci = Ci reunit cu {vi}
dacă (v1, v2, .., vi-1, vi) satisfac condițiile de continuare
xi = vi //atribuie și avansează
i = i +1
altfel
Ci = mulțimea vidă //revenire
i=i–1

APLICAȚIE FOLOSING METODA BACKTRACKING


Problema celor 8 regine
Cerință : Se cere să se așeze 8 regine pe o tablă de șah astfel încât să nu existe regine care să
se atace.
Considerând liniile și coloanele tablei de șah numerotate de la 1 la 8, începând din colțul din
stânga sus, poziția unei regine pe tabla de șah este determinată de o pereche de coordonate de
forma Pi = (linia i, coloana i) i=1,8, deci soluția problemei este o mulțime cu 8 astfel de
poziții. Ținând cont că reginele nu trebuie să se atace, rezultă că pe fiecare linie trebuie să se
afle o regină și numai una. Ca urmare, în mulțimea soluției va exista câte un element și numai
unul cu linia 1, respectiv linia 2, etc., adică linia i = i, i=1,8. Putem considera mulțimea soluție
ca o mulțime ordonată, cu 8 elemente de forma (i, coloana i), i=1,8. Pentru reprezentarea
acestei mulțimi este necesară doar reținerea coordonatei coloană. În aceste condiții, putem
exprima soluția problemei ca o mulțime X = {xi / i=1,8}, unde xi este coloana pe care se află
regina de pe linia i. Altfel spus, poziția reginei i este (i, xi ), i= 1,8.

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