Sunteți pe pagina 1din 2

Descompunerea problemelor n subprobleme

Rezolvarea unor probleme poate fi convenabil realizat prin descompunerea alternativ a problemei n subprobleme care, la rndul lor, sunt descompuse n alte subprobleme, pn la depistarea unor probleme, a cror rezolvare este imediat, probleme numite elementare. Reprezentarea unui astfel de proces, poate fi descris prin grafuri sau arbori I/SAU. Un graf I/SAU este construit pe baza urmtoarelor reguli: (1) (2) Fiecare nod reprezint fie o singur problem, fie o mulime de probleme ce trebuie rezolvate. Un nod, ce reprezint o singur problem, nu are descendeni. Problema este fie o problem elementar, fie o problem neelementar, care nu se mai poate descompune n subprobleme. Nodurile ce reprezint mulimea de subprobleme n care s-a descompus o problem, prin aplicarea unui operator de descompunere, se numesc noduri I. Nodurile ce reprezint descompuneri alternative ale unei probleme n subprobleme (prin aplicarea diverilor operatori de descompunere) se numesc noduri SAU. Aceste noduri au ca descendeni noduri I.

(3)

(4)

Sa se implementeze cutarea n arbori I/SAU pentru anumite cazuri simple. ntr-o prim variant, se specific compact ntreg arborele I/SAU al posibilelor rezolvri ale problemei i se indic cum poate fi gsit o soluie n aceast reprezentare. Un nod SAU este reprezentat printr-o structur Prolog sau(NumeProb, ListaSuccesori), unde ListaSuccesori reprezint nodurile (subproblemele), n care se poate descompune alternativ problema NumeProb. Un nod I este reprezentat printr-o structur Prolog si(NumeNod, ListaSubprob), unde NumeNod este un nume convenional asociat nodului I, iar ListaSubprob este lista subproblemelor ce trebuie rezolvate, pentru a rezolva problema iniial. Un nod elementar (cu rezolvare imediat) este marcat de structura Prolog elementar(NumeProb), iar un nod terminal neelementar (care nu mai poate fi descompus) prin neelementar(NumeProb), unde NumeProb este numele subproblemei corespunztoare. O soluie a problemei este un subarbore n care nodul problem iniial este nod rezolvat. n soluie, nodurile problem elementar vor fi marcate prin structura frunza(NumeNod), iar un nod SAU va avea un unic succesor, respectiv nodul SI ales pentru descompunere, marcat prin structura succ(NumeProb, ArboreSolutie). Descrierea compacta a spatiului de cautare arbore SI/SAU: descriere(sau(a, [si(b, [elementar(d), sau(e, [elementar(h)])]), si(c, [sau(f, [elementar(h), neelementar(i)]), elementar(g)])])). Solutiile sunt: X = succ(a, si(b, [frunza(d), succ(e, frunza(h))])) ; X = succ(a, si(c, [succ(f, frunza(h)), frunza(g)])) ;

ntr-o a doua variant de reprezentare, nodurile I, SAU i nodurile asociate problemelor elementare sunt descrise prin predicatele: sau(NumeProb, NumeSuccSi) - indic o posibil descompunere a problemei NumeProb ntr-o mulime de subprobleme, reprezentat prin nodul I NumeSuccSi; exist cte un fapt Prolog pentru fiecare descompunere alternativ posibil;

si(NumeSi, ListaSucc) - indic un nod I cu numele NumeSi corespunztor subproblemelor indicate in lista ListaSucc; NumeSi trebuie s apar ntr-un predicat sau;

elementar(NumeProb) - indic o problem elementar, cu rezolvare imediat.

Nodurile terminale neelementare vor fi specificate implicit prin faptul c ele nu apar nici ntr-un predicat elementar, nici ntr-un predicat sau, deci nu au descompunere. Reprezentarea Prolog a soluiei va fi aceeai ca n prima variant. Descrierea spatiului de cautare arbore SI/SAU: sau(a,b). sau(a,c). si(b,[d,e]). elementar(d). sau(e,h). elementar(h). si(c,[f,g]). sau(f,h). sau(f,i). neelementar(i). elementar(g).

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