Sunteți pe pagina 1din 25

5.4 Algoritmi cu revenire. Tehnica backtracking.

 Rezolvarea automata a unor probleme cu caracter general conduce la


conceperea unor algoritmi cu caracter general, care rezolva orice
problema de aceeasi natura pe baza unor incercari repetate si reveniri
in caz da nereusita.
 Modalitatea generala de rezolvare consta in descompunerea
obiectivului de rezolvat in subobiective care pot fi atinse succesiv.
Maniera de abordare o reprezinta recursivitatea, in baza careia se
defineste un proces de incercare sau cautare, care construieste in mod
gradat solutia, parcurgand in acelasi timp un arbore de subprobleme.
Obtinerea unei solutii finale sau partiale nesatisfacatoare, provoaca
revenirea recursiva in arborele de dezvoltare si reluarea procesului
dintr-un alt punct potential, pana la gasirea solutiei dorite. (algoritmi
cu revenire) Dezavantaj: arborele de cautare creste exponential. Sunt
necesare elemente de natura euristica, care limiteaza dezvoltarea
arborilor de cautare, reducand astfel volumul de calcul.

SDA curs 10 I IS 2009/2010 1


5.4.1 Prezentare metoda

 In multe aplicatii gasirea solutiilor este rezultatul unui proces de


cautare sistematica, cu incercari repetate si reveniri in caz de
nereusita.
 Ex: Un investitor dispune de un capital C, pe care doreste sa il
investeasca in vederea obtinerii unui profit maxim. In consecinta va
alege din cele n oferte (fiecare oferta implica fondul fi si aduce
beneficiul bi) pe acelea pe care le poate onora cu capitalul care
dispune si ii aduc beneficiul maxim.
 Metoda fortei brute: este o metoda directa de gasire a solutiilor, care
pentru problema investitorului va genera toate submultimile de oferte.
Pentru fiecare din cele 2n submultimi distincte se calculeaza suma
investita si profitul adus, retinandu-se ca solutii acele combinatii
pentru care suma investita nu depaseste capitalul si aduc profitul cel
mai mare. Aceasta abordare nu prezinta interes practic datorita
numarului mare de combinatii care trebuie luate in considerare.

SDA curs 10 I IS 2009/2010 2


 Solutia problemei poate fi reprezentata printr-o selectie de oferte (s1, s2,
…, sn) in care si=1 sau si=0, dupa cum oferta a fost luata sau nu in
considerare. Solutiile vor avea intotdeauna aceeasi lungime n.
 Conditia si {0,1} reprezinta o restrictie explicita si conduce la un spatiu al
solutiilor posibile cu dimensiunea 2n .
 Conditia ca suma investita sa nu depaseasca capitalul defineste o functie
de limitare sau o restrictie implicita, care restrange numarul solutiilor.

 In metoda cautarii cu revenire solutia este construita in mod progresiv prin


adaugarea unei componente s p+1 la solutia partiala (s1, s2, …, sp),
numita si solutie p-realizabila.

 O solutie finala este obtinuta cand a fost facuta o selectie din cele n
oferte. Pentru enuntul dat, aceasta solutie este comparata cu solutia
determinata pana in acel moment, fiind retinuta sau ignorata.

SDA curs 10 I IS 2009/2010 3


 Spatiul starilor posibile asociate solutiilor problemei poate fi
reprezentat cu structura de arbore (arborele spatiului starilor).
Fiecare nod defineste o stare a solutiilor problemei, nodurile interne
reprezentand solutii partiale, iar nodurile externe, solutiile finale.

 Metoda cautarii cu revenire consta in generarea sistematica de


noduri stari ale solutiei problemei pornind de la nodul radacina si
selectarea nodurilor solutii. In parcurgerea arborelui spatiului
starilor se va lua in considerare o lista de noduri active, respectiv
noduri la care nu s-au generat inca toti succesorii directi. Functiile
de limitare reduc numarul nodurilor active si reduc acest procesul
de cautare prin detectarea cailor care nu conduc la solutii.

SDA curs 10 I IS 2009/2010 4


 Generalizand conditiile de includere si excludere a unei alternative in selectie, se
obtine algoritmul:
 Extindere(param_curenti)
 { daca includerea alternativei este posibila
 atunci
 { daca este solutie atunci
 test optim
 altfel
 { prelucrari de avans
 Extindere(param_alternativa_inclusa)
 prelucrari de revenire
 }
 }
 daca excluderea alternativei este posibila
 atunci
 { daca este solutie atunci
 test optim
 altfel
 { prelucrari de avans
 Extindere(param_fara_alternativa)
 prelucrari de revenire
 }
 }
 }
SDA curs 10 I IS 2009/2010 5
 Pentru problema data, o oferta poate fi definita mai general prin numarul
de actiuni si valoarea unei actiuni. In acest caz la examinarea unei oferte
nu vor mai fi doar doua alternative ci mai multe posibilitati de selectie.
Rezulta necesitatea unor functii de limitare specifice care sa restranga
domeniul de selectie al ofertei . In acest caz, algoritmul de extindere ia
forma:
Extindere (param_curenti)
{ pentru fiecare alternativa executa
daca alternativa acceptabila atunci
daca nu s-a gasit solutia atunci
{ marcheaza alternativa
prelucrari de avans
Extindere(param_alternativa)
prelucrari de revenire
}
altfel
prelucrare_solutie
}
SDA curs 10 I IS 2009/2010 6
 Un mod de prezentare a metodei backtracking mai apropiat de
implementare considera rezolvarea problemelor care indeplinesc simultan
conditiile:
- solutia poate fi pusa sub forma de vector
S=x1, x2, …,xn x1 apartine multimii A1
x2 apartine multimii A2
………
xn apartine multimii An
- multimile A1, A2, …, An sunt multimi finite, iar elementele lor se afla intr-
o relatie de ordine bine satbilita
- nu se dispune de o alta solutie mai rapida
Obs: a).Sunt probleme la care n nu este cunoscut de la bun inceput. b) x1,
x2, .., xn pot fi la randul lor vectori. c) in multe probleme multimile A1,
A2, .., An coincid.

SDA curs 10 I IS 2009/2010 7


 Met fortei brute: se genereaza toata elementele produsului cartezian
A1*A2*.. *An si fiecare element este testat daca este solutie

 Metoda backtraking:
- se alege primul element x1, care apartine lui A1
- presupunand generate elem x1, x2, .., xk se alege (daca exista) x k+1, drept
primul element disponibil din A k+1 care indeplineste anumite conditii de
continuare, rezultand astfel doua posibilitati:
a) elem exista; se testeaza daca nu s-a ajuns la o solutie, in caz afirmativ
aceasta se tipareste, in caz contrar sa considera generate x1, x2, …, xk, x
k+1
b) elem. nu exista, situatie in care se considera generate elem x1, x2, …, x
k-1, si se reia cautarea de la elementul urmator lui x k in multimea A k
- Algoritmul se incheie cand au fost luate in considerare toate elementele
multimii A1.
 Exemple: problema celor n regine, turneul calului.

SDA curs 10 I IS 2009/2010 8


5.4.2 Probleme de tip (n, m). Obtinerea unei solutii.
n pasi succesivi, fiecare selectat din p posibilitati
incearca( )
{
initializeaza selectia posibilitatilor
repeta
{
selecteaza posibilitatea urmatoare
if( acceptabila)
{
inregistreaz-o ca si curenta
if( solutie incompleta)
{
incearca pasul urmator
if ( nu este reusit)
sterge inregistrarea curenta
}
else
pas reusit (solutie completa)
}
}pana cand (( pas reusit) sau ( nu mai sunt posibilitati))
}

SDA curs 10 I IS 2009/2010 9


var.1:
incearca1 ( int i)
{ int posibilit=0;
repeta
{
posibilit=posibilit+1;
if(acceptabila)
{
se inregistreaza ca si curenta
if ( i<n)
{
incearca1 (i +1);
if (nereusita) sterge inregistrarea
}
else
solutie completa ( afisare)
}
}pana cand ((solutie completa) sau (posibilit==m));
}

SDA curs 10 I IS 2009/2010 10


var 2:
incearca2( int posibilit)
{
if ( acceptabila)
{
inregistreaz-o ca si curenta
if ( solutie incompleta)
{
incearca2 (posibilit1);
incearca2(posibilit2);
…..
incearca2(posibilit m);
sterge inregistrarea curenta
}
else
solutie completa (afisare)
}
}

SDA curs 10 I IS 2009/2010 11


5.4.3. Determinarea tuturor solutiilor unei probl. de tip (n,m)

 Este necesar ca generarea pasilor care construiesc solutia sa se faca


intr-o maniera ordonata, care garanteaza ca un anumit pas se
efectueaza o singura data ( fiecare nod din arborele de apeluri este
vizitat o singura data).
 De indata ce o solutie a fost gasita si inregistrata se trece la
generarea solutiei urmatoare pe baza unui proces de selectie
sistematica, pana la epuizarea tuturor posibilitatilor.

SDA curs 10 I IS 2009/2010 12


incearca ( )
{
for( toate posibilitatile de selectie)
{
selecteaza posibilitatea
if ( acceptabila)
{
se inregistreaza ca si curenta
if (solutie incompleta)
incearca(): /*pasul urmator*/
else
evidentiaza solutia
sterge inregistrarea curenta
}
}
}

SDA curs 10 I IS 2009/2010 13


var1:
incearca1(int i)
{
int posibilit:
for(posibilit=1;….m)
if( acceptabila)
{
se inregistreaza
if( i<n)
incearca1(i+1);
else
afiseaza solutia
se sterge inregistrarea
}
}

SDA curs 10 I IS 2009/2010 14


var2:
incearca2(int posibilit)
{
if (acceptabila)
{
se inregistreaza
if ( solutie incompleta)
{
incearca2(posibilit1)
incearca2(posibilit2)
….
incearca2(posibilit m)
}
else
afiseaza solutia
sterge inregistrarea curenta
}
}

SDA curs 10 I IS 2009/2010 15


5.4.4 Determinarea solutiei optime

 Este necesara generarea tuturor solutiilor posibile si pe parcursul


procesului de generare sa fie retinuta cea optima intr-un anumit
sens. Presupunand ca optimalitatea se poate determina cu o functie
f(solutie), algoritmul cautat deriva din cel destinat detreminarii
tuturor solutiilor unei probleme de tip (n,m) in urma inlocuirii
operatiei “afiseaza solutie “ sau “evidentiaza solutie” cu secventa:
if( f(solutie_curenta)>f(solutie_optima))
solutie_optima= solutie_curenta
 Ex. :problema rucsacului= selectia unei multimi de obiecte supuse
unor constrangeri
 Metoda optimului local sau tehnica Greedy pleaca de la ideea ca
daca in fiecare pas se alege o solutie optima pentru pasul respectiv,
exista o buna sansa de a obtine o solutie optima in final. Pe aceasta
cale insa nu se asigura pentru orice problema optimalitatea globala a
solutiei.

SDA curs 10 I IS 2009/2010 16


5.5 Tipul indicator(referinta). Structuri de date recursive

 Structurile de date statice ocupa o zona fixa de memorie, de


volum constant, pe toata durata executiei programului; sunt
structuri de date fundamentale, carora li s-au asociat tipuri de
date ( multimea de valori, operatori, structura si dimensiunea
zonei de memorie ocupate de instantele tipului)
 Structurile de date dinamice se modifica atat ca structura, dar si
ca dimensiuni in timpul executiei
 Utilizarea structurilor dinamice necesita un tip de data special
numit tip indicator ( sau tip referinta) prin interemediul caruia se
vor referi structurile dinamice ( variabile indicate)
 Valorile variabilelor tipului indicator precizeaza locatii de
memorie ( nu sunt date efective)

SDA curs 10 I IS 2009/2010 17


TDA indicator

I MM – consta dintr-o multime de valori care indica adrese de


memorie ale unor variabile indicate, apartinand unui tip
precizat; multimea cuprinde si indicatorul NULL
II Notatii TipIndicator p, q;
TipIndicat e;
boolean b;
III Operatori nou(p) – plaseaza valoarea adresei de memorie in p;
elib(p) – elibereaza zona de memorie
corespunzatoare variabilei indicate de p
MemoreazaIndicator (p,q);
Memoreazavaloare Indicata(p,e);
FurnizeazaValoare Indicata(p,e);
IndicatorIdentic(p,q)->b

SDA curs 10 I IS 2009/2010 18


Implementarea tipului indicator

a.Pointeri: - in Pascal si C o variabila de tip pointer este o variabila statica;


- implementarea tipului pointer presupune o legatura fixa intre
tipul pointer declarat si tipul variabilei indicate
- suport fizic: adresarea indexata
Ex. typedef TipIndicat* TipIndicator;
TipIndicator a,b,c;
b. Cursori – e specifica limbajelor care nu definesc pointer
- o variabila de tip intreg utilzata pentru a indica o locatie intr-
un tablou; uzual este interpretat ca indice in tablou
- cu cursori pot fi implementate toate structurile dinamice care
presupun inlantuiri
- sarcina gestionarii zonei de memorie revine exclusiv
programatorului

SDA curs 10 I IS 2009/2010 19


Structuri de date recursive

 O structura de date care are cel putin o componenta de acelasi


tip cu structura insasi

 Ex. : (x+(y-z))/u

typedef struct expr {


char op;
struct expr *op1;
struct expr *op2;
}Expresie;

op +, -, /, *; op1, op2 sunt pointeri la alte expresii


litera; op1, op2 au valoarea NULL

SDA curs 10 I IS 2009/2010 20


Cap. 6 Structura de date lista
6.1 TDA Lista
 Structura de date dinamica, flexibila
I MM – o secventa de 0 sau mai multe elemente apartinand unui tip
numit tip de baza;
- a1, a2, …, an ; ai nodurile listei; n>=0
- n – lungimea listei
- daca n>=1 a1 –primul nod; an = ultimul nod
- ordonata liniar functie de pozitia nodurilor; a i precede pe ai+1;
ai succede pe ai-1
II Notatii: TipLista l;
TipPozitie p;
TipNod x;
III Operatori : - insereaza nod in lista, sterge nod in lista, cauta nod in
lista, urmatorul nod in lista, primul nod in lista, etc.
- ListaVida(l);InsertieInceput(x, l); InsertieDupa(x, l, p);

SDA curs 10 I IS 2009/2010 21


6.2 Tehnici de implemetare

a.Tablouri

#define LungMax …
typedef … TipNod;
typedef int TipIndice;
typedef int TipPozitie;
Typedef struct {
TipNod noduri[Lungmax];
TipIndice ultim;
} TipLista;
TipLista Lista;

SDA curs 10 I IS 2009/2010 22


b. Pointeri
typedef struct nod{
int cheie;
struct nod *urm;
… info;
}TipNod;
typedef struct nod * TipPointerNod;
typedef TipPointerNod TipLista;
TipLista Inceput;
Operatii cu liste inlantuite:
- Inserare – la inceput, la sfarsit, dupa nodul curent, la pozitia nodului
curent, etc
- Stergere – nodul urmator nodului curent, nodul curent, etc
- Traversare liste

SDA curs 10 I IS 2009/2010 23


c. Reprezenaterea listelor inlantuite cu cursori
#define LungMax …
typedef … TipNod;
typedef int TipCursor;
typedef TipCursor TipLista;
typedef struct{
TipNod nod_lista;
TipCursor urm;
}Tipcelula;
TipCelula zona[Lungmax];
TipLista L, M, Disponibil;
Inserare: se suprima prima locatie din Disponibil si se inlantuie in lista pe
pozitia dorita;
Stergere: se suprima din lista si se insereaza in Disponibil

SDA curs 10 I IS 2009/2010 24


6.3 Tehnici utilizand structura de date lista simplu inlantuita

a.Inserarea unui nod la inceput ( capul listei)


b.Inserarea unui nod la sfarsit (coada listei)
c.Inserarea unui nod in interiorul listei:
- dupa un anumit nod ( se cunsoate predecesorul)
- inaintea unui anumit nod ( se cunoaste succesorul)
d.Crearea unei liste:
- prin inserari repetate la inceput;
- prin inserari repetate la sfarsit
e. Stergerea unui nod:
- cand se cunoaste predecesorul
- stergerea nodului curent
f. Traversarea listei
g. Cautarea unui nod in lista cu metoda fanionului
h. Tehnica celor doi pointeri

SDA curs 10 I IS 2009/2010 25

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