200624482-Backtracking.doc

Embed Size (px)

Citation preview

Metoda de programare Backtracking

Metoda de programare Backtracking

Prezentare general

Imaginai-v c astzi este ziua vostr i avei invitai. Aranjai o mas frumoas, apoi v gndii cum s v aezai invitaii la mas. Ai vrea s tii toate posibilitile de aezare a invitailor la mas, dar realizai n acelai timp c trebuie s inei seama i de preferinele lor. Printre invitai exist anumite simpatii dar i unele antipatii, de care dorii neaprat s inei seama, pentru ca petrecerea s fie o bucurie pentru toi.

S ne gndim cum procedai pentru a identifica toate posibilitile de a plasa invitaii la mas. ncepei prin a scrie nite cartonae cu numele invitailor.

Alegei un invitat.

Pentru a-l alege pe al doilea, selectai din mulimea cartonaelor rmase un alt invitat. Dac tii c cele dou persoane nu se agreeaz, renuntai la cartonaul lui i alegei altul i aa mai departe.

Se poate ntmpla ca la un moment dat, cnd vrei s alegei cartonaul unui invitat s constatai c nici unul dintre invitaii rmai nu se potrivete cu ultima persoan slectat pn acum. Cum procedai?

Schimbai ultimul invitat plasat cu un invitat dintre cei rmai i ncercai din nou, dac nici aa nu reuiti, schimbai penultimul invitat cu alcineva i ncercai din nou i aa mai departe pn cnd reuii s plasati toi invitaii. nseamn c ai obinut o soluie.

Pentru a obine toate celelalte soluii, nu v rmne dect s o luai de la nceput. Avei cam mult de muncit, iar dac numrul invitailor este mare...operaiunea devine foarte anevoioas. Iat de ce avei nevoie de un calculator i cunotine de programare .

Backtracking este o metod de parcurgere sistematic a spaiului soluiilor posibile al unei probleme.

Este o metod general de programare, i poate fi adapt pentru orice problem pentru care dorim s obinem toate soluiile posibile, sau s selectm o soluie optim, din mulimea soluiilor posibile.

Backtracking este ns i cea mai costisitoare metod din punct de vedere al timpului de execuie.

n general vom modela soluia problemei ca un vector v=(v1,v2,v3,...,vn) n care fiecare element vk aparine unei mulimi finite i ordonate Sk, cu k=1,n. n anumite cazuri particulare, mulimile S1 ,S2, S3,...,Sn pot fi identice . Procedm astfel:

La fiecare pas k pornim de la o soluie parial v=( v1,v2,v3,...,vk-1) determinat pn n acel moment i ncercm s extindem aceast soluie adugnd un nou element la sfritul vectorului.Cutm n mulimea Sk , un nou element.Dac exist un element neselectat nc, verificm dac acest element ndeplinete condiiile impuse de problem, numite condiii de continuare.Dac sunt respectate condiiile de continuare, adugm elementul soluiei pariale.Verificm dac am obinut o soluie complet.dac am obinut o soluie complet o afim i se reia algoritmul de la pasul 1.dac nu am obinut o soluie, k