Sunteți pe pagina 1din 2

Cutarea cu revenire (backtracking)

Tehnica cunoscut sub numele de backtracking (cutare cu revenire) a fost deja folosit de noi la parcurgerea (traversarea) n adncime a arborilor i la explorarea n adncime a grafurilor. ntr-un cadru mai larg, aceast tehnic se folosete la rezolvarea unor probleme de decizie i este, de asemenea, larg folosit n inteligena artificial. Fie problema P, care poate fi rezolvat, n principiu, pe mai multe ci. Fie P1, P2, ..., Pn subproblemele corespunztoare fiecreia din aceste ci. Important este c, pentru a obine soluia problemei P este suficient s se rezolve numai una din subproblemele P1, P2, ..., Pn, dar nu se tie dinainte care din ele. Trebuie, deci, s se ia o decizie, pe care din aceste ci s se mearg, fr ca n momentul lurii deciziei s existe informaia necesar n acest scop. n consecin, problema este nedeterminist. Cazul determinist este cel al structurii de decizie
if <condiie> then <aciune 1> else <aciune 2>

n care se consider ca expresia <condiie> poate fi evaluat nainte de a se executa aciunea 1 sau 2. n cazul nedeterminist discutat aici, se consider c la luarea deciziei nu exist informaia necesar pentru a determina cu siguran pe ce cale trebuie s se continuie executarea programului. Remarcm c, n cazul problemelor deterministe soluia este unic, n timp ce problemele nedeterministe pot avea mai multe soluii, sau niciuna. Aplicnd tehnica backtracking, rezolvarea problemei P menionate mai sus se face astfel:

se stabilete o ordine a "succesorilor" (subproblemelor) P1, P2, ..., Pn; se trece la rezolvarea subproblemei P1;
o o

dac s-a gasit soluia, executarea programului se ncheie; altfel, se trece la subproblema urmtoare (P2), apoi la P3 si asa mai departe, pan se gsete soluia; dac au fost parcurse toate cile posibile (P1, P2, ..., Pn) fr a se gsi soluia, nseamn c problema P nu are soluie pentru datele de intrare furnizate.

Dac i subproblemele P1, P2, ..., Pn sunt tot nedeterministe, pentru rezolvarea lor se procedeaz n acelai mod, astfel c rezolvarea devine recursiv.

Tehnica backtracking poate fi privit i ca o tehnic de cutare n spaiul strilor. Numim stare a sistemului ansamblul valorilor tuturor variabilelor sistemului la un moment dat. La efectuarea fiecrei operaii are loc o modificare a strii sistemului. n consecin, putem s ne imaginam un graf orientat al strilor, n care fiecare vrf este o stare, iar fiecare arc este o operaie. Este evident c acest graf nu este el nsui o structur de date din memoria calculatorului, ci doar o reprezentare abstract. n majoritatea cazurilor, la executarea programului nu se vor parcurge toate vrfurile acestui graf (toate strile posibile), ci numai unele dintre ele. La executarea programului se parcurge numai o singur cale n acest graf al strilor, depinznd de datele de intrare. La aplicarea tehnicii backtracking, se consider c problema care se rezolv este de aa natur, nct nu este posibil s se ajung n aceeai stare pe dou ci diferite. Se consider, deci, c spaiul strilor are o structur arborescent (ntruct nici un nod al arborelui nu poate avea doi prini). Implicit, aceasta nseamn c la executarea programului nu pot exista cicluri. n plus, se consider c nlimea acestui arbore al strilor este finit. Aceasta nseamn c, la parcurgerea n adncime, dup un anumit numr de pai (posibil mare), se va ajunge la o stare fr succesor (la o "frunz" a arborelui strilor), ceeace face posibil ca, dac nu s-a gsit soluia, s se revin la o stare anterioar i s se continue cutarea pe alt cale. Dac nlimea arborelui ar fi infinit, sar merge mereu n adncime pe o singur cale, iar revenirea nu ar mai fi posibil. Avnd n vedere cele expuse mai sus, la fel ca la parcurgerea arborilor n adncime, pentru realizarea cutrii cu revenire (backtracking) se folosete o stiv. n fiecare punct de ramificaie (din care pornesc mai multe ci posibile), starea curent se pune n stiv pentru a se putea reveni la ea ulterior, dac pe calea aleas nu s-a gasit soluia sau dac se caut i alte soluii.

Copyright 2001 Cornelia NOVAC - UDUDEC, Universitatea "Dunrea de Jos" din Galai

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