Backtracking în plan

download Backtracking în plan

of 21

Transcript of Backtracking în plan

Backtracking n planTeorie i aplica ii

Company

LOGO

Arhip Georgiana XI D CNVA

Cuprins

1. Backtracking 2.No iunea de backtracking n plan 3. Probleme clasice 4. Bibliografie

1. Backtrackingn variant elementar , metoda backtracking se aplic problemelor pentru care solu ia se poate reprezenta ca un vector x=(x1,x2,,xn). Fiecare componenta xi a vectorului poate lua valori intr-o anumita multime Si. Produsul cartezian S1xS2xxSn se numeste spatiul solutiilor posibile. Problemele care se rezolva prin backtracking nu impun generarea tuturor solutiilor posibile(generare exhaustiva), ci doar generarea acelor solutii care indeplinesc anumite conditii, specifice problemei, denumite conditii interne. Solutiile posibile care respecta conditiile interne sunt denumite solutii-rezultat. Unele probleme impun obtinerea unei singure solutii-rezultat, si anume cea care indeplineste o anumita conditie de optim. Aceasta este denumita solutie optima.

Pentru a evita generarea tuturor solutiilor posibile, metoda backtracking atribuie pe rand valori elementelor vectorului x. Mai exact, componenta xk primeste o valoare doar in cazul in care componentele x1,x2,,xk-1 au primit deja valori. In acest caz, componentei xk i se atribuie pe rand acele valori posibile(din multimea Sk) care indeplinesc conditiile de continuare. Conditiile de continuare sunt conditii derivate din conditiile interne, care stabilesc daca pentru o anumita valoare pentru xk are sau nu sens sa continuam constructia solutiei.

2. Backtracking in planIdeea cautarii cu revenire poate fi generalizata si se poate aplica si problemelor in care cautarea se realizeaza in plan(intr-o matrice). In acest caz, solutia se prezinta sub forma unui tablou bidimensional.

3. Probleme clasice1. Problema celor n dame pe o tabl de ah Fiind dat o tabl de ah, de dimensiune n*n, se cer toate solu iile de aranjare a n dame, astfel nct s nu se afle dou dame pe aceea i linie, coloan sau diagonal (dame s nu se atace reciproc).

Exemplu: Presupunem c dispunem de o tabl de dimensiune 4x4. Observ m c o dam trebuie s fie plasat singur pe linie. Plas m prima dam pe linia 1, coloana 1. A doua dam nu poate fi a ezat dect n coloana 3. Observ m c a treia dam nu poate fi plasat n linia 3. ncerc m atunci plasarea celei de-a doua dame n coloana 4. A treia dam nu poate fi plasat dect n coloana 2. n aceast situa ie dama a patra nu mai poate fi a ezat . ncercnd s avans m cu dama a treia, observ m c nu este posibil s o plas m nici n coloana 3, nici n coloana 4, deci o vom scoate de pe tabl . Dama a doua nu mai poate avansa, deci i ea este scoas de pe tabl . Avans m cu prima dam n coloana 2. A doua dam nu poate fi a ezat dect n coloana 4. Dama a treia se a eaz n prima coloan . Acum este posibil s plas m a patra dam n coloana 3 si astfel am ob inut o solu ie a problemei. Algoritmul continu n acest mod pn cnd trebuie scoas de pe tabl prima dam . Pentru reprezentarea unei solu ii putem folosi un vector cu n componente (avnd n vedere c pe fiecare linie se g se te o singur dam ).

Exemplu pentru solu ia g sit avem vectorul ST ce poate fi asimilat unei stive. Dou dame se g sesc pe aceea i diagonal dac si numai dac este ndeplinit condi ia: |st(i)-st(j)|=|i-j| ( diferen a, n modul, ntre linii si coloane este aceea i).

ntruct doua dame nu se pot g si n aceea i coloan , rezult c o solu ie este sub form de permutare. O prim idee ne conduce la generarea tuturor permut rilor si la extragerea solu iilor pentru problema ca dou dame s nu fie plasate n aceea i diagonal . A proceda astfel, nseamn c lucr m conform strategiei backtracking. Aceasta presupune ca imediat ce am g sit dou dame care se atac , s relu m c utarea.

Conditii interne:

st[i ] {1,2,..., n} st[i ] { st[ j ], i { j , i, j ! 1, n i j { st[i] st[ j ] , i { j , i, j ! 1, n

Damele nu pot fi plasate pe aceeasi coloana Damele nu pot fi plasate pe aceeasi diagonala

2. Problema labirintului Se d un labirint sub form de matrice cu m linii i n coloane. Fiecare element al matricei reprezint o camer a labirintului. ntr-una din camere, de coordonate lin i col, se g se te un om. Se cere s se g seasc toate ie irile din labirint. Nu este permis trecerea de dou ori prin aceea i camer .

O prim problem care se pune este precizarea modului de codificare a ie irilor din fiecare camer a labirintului. Fie l(i,j) un element a matricei. Acesta oate lua valori ntre 0 i 15. Se consider ie irile spre nord, est, sud i vest, luate n aceast ordine. Pentru fiecare direc ie cu ie ire se re ine 1, iar n caz contrar, se re ine 0. Un ir de 4 cifre 1 sau 0 formeaz un num r n baza 2. Acest num r este convertit n baza 10 i re inut n l(i,j). De exemplu, pentru c amer care are ie ire n nord i vest, avem 10012=910.

Rezolvare O camer vizitat se re ine prin coordonatele ei lin(linia) i col(coloana). Din acest potiv, pentru a re ine un traseu vom utiliza o matrice cu dou coloane i mai multe linii : sol. De exemplu, dac prima camer este cea de coordonate (2,2), o solu ie este (2,2), (2,3), (1,3). Nu toate solu iile au aceea i lungime, ntruct exist trasee de lungime diferit . Se ob ine o solu ie atunci cnd coordonatele camerei unde s-a intrat sunt n afara matricei(nu au linia ntre 1 i m i nu au coloana ntre 1 i n). Evident, atunci cnd s-a g sit o solu ie, aceasta se afi eaz . Spunem c o camer este accesibil dac exist intrare din camera curent c tre ea. Trebuie s avem grij la modul n care test m dac o camer este accesibil sau nu. Este o opera ie n care se testeaz con inutul unui anumit bit. Aceste se ob ine efectund un i logic ntre dou valori. De exemplu, dac test m ie irea spre sud, atunci efectu m i logic ntre 00102=210 i valoarea re inut n matrice pentru camera curent . Dac valoarea ob inut este diferit de 0, atunci avem ie ire din camera curent c tre sud. nainte de a intra ntr-o camer accesibil , se testeaz dac respectiva camer a mai fost vizitat sau nu. Pentru aceasta utiliz m func ia vizitat. n caz c a fost vizitat , se face pasul napoi.

3. Problema calului pe tabla de ah(iterativ) Determina i toate modalit ile ca un cal s parcurga toate p tratele tablei de ah de dimensiune n*n(3