back standard

16
Informatica clasa a XI-a - Suport de curs METODA BACKTRACKING – STANDARD 1.Mecanism general Apare frecvent situaţia în care rezolvarea unei probleme conduce la determ de forma X=(x 1 , x 2 ,……,x n ) în care : - fiecare componentă a vectorului soluţie aparţine unei mulţimi finite de valor V i - există anumite relaţii care trebuie satisfăcute de componentele vectorului, condiţii interne , astfel încât X este soluţie dacă şi numai dacă componentele sale satisfac aceste co Exemplu : Fie două mulţimi de litere V 1 ={A,B,C} şi V 2 ={M,N} . Se cere să se determine acele pereci (x 1 ,x 2 ) cu x 1 V 1 şi x 2 V 2 cu proprietatea că dacă x 1 {A,B} atunci x 2 N . Soluţiile care satisfac condiţia impusă sunt : {A,M},{B,M},{C,M},{C,N} . !rodusul cartezian V 1 xV 2 x…….V n se numeşte spaţi! so!ţii!or posi"i!e . Soluţiile problemei acele soluţii posibile care îndeplinesc condiţiile interne. Exemplu : Fie un "oc !ronosport în care sunt în discuţie doar # meciuri. $ persoană convin%erea că în variantele câşti%ătoare nu pot exista mai mult de două meciur meci %azdele nu câşti%ă. !ersoana doreşte să %ăsească toate variantele care înd )n acestă problemă V 1 =V 2 =V # =V $ ={%,1,2} . *xistă mai mulţi vectori care îndeplinesc con (0,1,2,0),(1,2,1,2) ,+. $ modalitate de rezolvare ar fi să se %enereze pe rând cele # $ =&1 soluţii posibile şi să se alea% care satisfac condiţiile interne. Această metodă este inacceptabilă pen etoda "ac'trac'in evită %enerarea tuturor soluţiilor posibile, scurtând timpul de -omponentele vectorului primesc valori în ordinea crescătoare a indici x ' primeşte valori numai după ce x 1 ,x 2 ,…….x ' 1 au primit valori care nu contrazic condiţiile interne. )n p x ' trebuie aleasă astfel încât, vectorul soluţie parţial x 1 ,……,x ' să îndeplinească şi el anumite condiţii, numi condiţii de continare , şi care sunt derivate din condiţiile interne. Astfel, pentru exemplul anterior, dacă x 1 =x 2 =% &meci nul(, atunci x # nu mai poate primi valoarea % . eîndeplinirea condiţiilor de continuare exprimă faptul că oricum am ale% componentele x '*1 ,…..,x n , nu vom obţine o soluţie. Stabilirea condiţiilor de continuar ale%ere bună ducând la o reducere considerabilă a numărului de calcule. !rin "ac'trac'in , orice vector soluţie este construit pro%resiv, începând cu mer%ând către ultima, cu eventuale reveniri asupra valorilor atribuite anterior x 1 ,x 2 ,…….x n iau valori în mulţimile V 1 ,V 2, …….V n. !rin atribuiri reuşite sau încercări de atribuiri eşuate din cauza nerespectării condiţiilor de continuare, anumite valori sunt consumate. !entru o componentă x ' din vectorul soluţie, notăm C ' V ' mulţimea valorilor consumate la momentul curent. !utem descrie metoda "ac'trac'in utilizând o confi%uraţie de forma : x 1 x 2 ……………x n C 1 C 2 ……………C n )n cursul aplicării metodei "ac'trac'in , o confi%uraţie poate fi obiectul a patru tipuri de a) Atri"ie +i a ansea- : are loc atunci când pentru x ' mai sunt valori neconsumate ( C ' V ' ( şi valoarea aleasă pentru x ' &fie ea ' ( satisface condiţiile de continuare. )n acest caz, x ' primeşte valoarea respectiv care se adau%ă la mulţimea valorilor consumate şi se avansează la componenta x '*1 : x ' ' C ' C ' { ' } / '*1 1

Upload: michael-woodard

Post on 04-Oct-2015

232 views

Category:

Documents


0 download

DESCRIPTION

back

TRANSCRIPT

1

PAGE 13Informatica clasa a XI-a - Suport de curs

METODA BACKTRACKING STANDARD1. Mecanism generalApare frecvent situaia n care rezolvarea unei probleme conduce la determinarea unor vectori soluie de forma X=(x1, x2,,xn) n care :

fiecare component a vectorului soluie aparine unei mulimi finite de valori Vi exist anumite relaii care trebuie satisfcute de componentele vectorului, numite condiii interne, astfel nct X este soluie dac i numai dac componentele sale satisfac aceste condiii interne

Exemplu:

Fie dou mulimi de litere V1={A,B,C} i V2={M,N}. Se cere s se determine acele perechi (x1,x2) cu x1(V1 i x2(V2 cu proprietatea c dac x1({A,B} atunci x2(N.

Soluiile care satisfac condiia impus sunt : {A,M},{B,M},{C,M},{C,N}.

Produsul cartezian V1xV2x.Vn se numete spaiul soluiilor posibile. Soluiile problemei sunt acele soluii posibile care ndeplinesc condiiile interne. Exemplu:

Fie un joc Pronosport n care sunt n discuie doar 4 meciuri. O persoan dorete s joace, plecnd cu convingerea c n variantele ctigtoare nu pot exista mai mult de dou meciuri nule (pronostic 0), iar la ultimul meci gazdele nu ctig. Persoana dorete s gseasc toate variantele care ndeplinesc aceste condiii.

n acest problem V1=V2=V3=V4={0,1,2}. Exist mai muli vectori care ndeplinesc condiiile interne : (0,1,2,0),(1,2,1,2),.

O modalitate de rezolvare ar fi s se genereze pe rnd cele 34=81 soluii posibile i s se aleag cele care satisfac condiiile interne. Aceast metod este inacceptabil pentru c se consum prea mult timp. Metoda backtracking evit generarea tuturor soluiilor posibile, scurtnd timpul de lucru.

Componentele vectorului primesc valori n ordinea cresctoare a indicilor. Astfel, xk primete valori numai dup ce x1,x2,.xk-1 au primit valori care nu contrazic condiiile interne. n plus, valoarea lui xk trebuie aleas astfel nct, vectorul soluie parial x1,,xk s ndeplineasc i el anumite condiii, numite condiii de continuare, i care sunt derivate din condiiile interne. Astfel, pentru exemplul anterior, dac x1=x2=0 (meci nul), atunci x3 nu mai poate primi valoarea 0.

Nendeplinirea condiiilor de continuare exprim faptul c oricum am alege n continuare valori pentru componentele xk+1,..,xn, nu vom obine o soluie. Stabilirea condiiilor de continuare este foarte important, o alegere bun ducnd la o reducere considerabil a numrului de calcule.

Prin backtracking, orice vector soluie este construit progresiv, ncepnd cu prima component i mergnd ctre ultima, cu eventuale reveniri asupra valorilor atribuite anterior. Componentele x1,x2,.xn iau valori n mulimile V1,V2,.Vn. Prin atribuiri reuite sau ncercri de atribuiri euate din cauza nerespectrii condiiilor de continuare, anumite valori sunt consumate. Pentru o component xk din vectorul soluie, notm cu Ck(Vk mulimea valorilor consumate la momentul curent. Putem descrie metoda backtracking utiliznd o configuraie de forma :

x1 x2xnC1 C2Cn

n cursul aplicrii metodei backtracking, o configuraie poate fi obiectul a patru tipuri de modificri i anume :

a) Atribuie i avanseaz : are loc atunci cnd pentru xk mai sunt valori neconsumate (Ck(Vk) i valoarea aleas pentru xk (fie ea vk) satisface condiiile de continuare. n acest caz, xk primete valoarea respectiv care se adaug la mulimea valorilor consumate i se avanseaz la componenta xk+1 :

xk( vkCk( Ck ( {vk}

K(k+1

b) ncercare euat : are loc atunci cnd pentru xk mai sunt valori neconsumate, dar valoarea aleas (fie ea vk) nu satisface condiiile de continuare. n acest caz, valoarea respectiv se adaug la mulimea valorilor consumate Ck dar nu se avanseaz la componenta urmtoare :

Ck( Ck ( {vk}

c) Revenire : are loc atunci cnd toate valorile pentru xk au fost consumate (Ck=Vk) i nu s-a putut avansa la xk+1 pentru c nu sunt satisfcute condiiile de continuare. n acest caz, se anuleaz valorile consumate pentru componenta xk i se revine la componenta xk-1 n ncercarea de a-i atribui acesteia o alt valoare care s permit continuarea construirii vectorului soluie:

Ck((K(k-1

d) Revenire dup construirea unei soluii : are loc atunci cnd toate componentele vectorului au primit valori care satisfac condiiile interne, adic s-a construit o soluie. n acest caz se revine la ultima component (xk,k=n) ncercnd s-i atribuim o nou valoare (dac mai exist) pentru construirea altor soluii.

Condiia k=n+1 este utilizat n practic pentru a sesiza momentul n care s-a construit o soluie. Condiia k=0 (adic C1=V1,..,Cn=Vn) este utilizat n practic pentru a sesiza finalul procesului de construire a soluiilor, adic ncheierea algoritmului backtracking.

Algoritmul corespunztor metodei backtracking este urmtorul :

*iniializeaz mulimile de valori V1, V2,,Vn

k=1; Ci=( , (() i=1,..,n // configuraia iniial

ct_timp k>0 // configuraia nu este final dac k=n+1 // configuraie de tip soluie

atunci reine soluia X=(x1,,xn)

k=k-1 // revenire dup construirea unei soluii

altfel

dac Ck(Vk // mai sunt valori neconsumate

atunci alege o valoare vk din (Vk-Ck)

Ck=Ck({vk} //adauga vk la valorile consumate dac (x1,..,xk) satisfac cond. de continuare

atunci xk=vk // atribuie

k=k+1 // avanseaz altfel

// nimic; ncercare euat

sfrsit_dac

altfel

Ck=( // anulam valorile consumate

k=k-1 // revenire

sfrsit_dac

sfrsit_dac

sfrsit_ct_timp

2. Varianta iterativ standard a metodei backtracking

Programarea algoritmului backtracking se simplific mult dac mulimile n care pot lua valori componentele vectorului sunt identice cu mulimea finit S={1,2,.,s} adic cu primele s numere naturale. Majoritatea problememlor rezolvabile prin backtracking permit o codificare a datelor de intrare astfel nct acestea s concid cu primele s numere naturale (inclusiv 0). n acest caz, funcia care implementeaz mecanismul backtracking este :

void Back()

{

int k,i;

k=1;

while(k>0) // mai sunt solutii posibile

if(k==n+1) // am obtinut o solutie { Retsol(); k--;}

// revenire dupa constr. unei solutii

else

if(x[k]