1 / 14

Metoda backtracking

Metoda backtracking. Prezentarea metodei şi aplicaţii. Prezentarea metodei. Se aplică pentru rezolvarea problemelor care îndeplinesc simultan următoarele condiţii:

belden
Télécharger la présentation

Metoda backtracking

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Metoda backtracking Prezentareametodeişi aplicaţii

  2. Prezentarea metodei Se aplică pentru rezolvarea problemelor care îndeplinesc simultan următoarele condiţii: soluţia se poate reprezenta sub forma unui vector X=(x[1],x[2],...,x[n]) S[1]xS[2]x...xS[n]. Mulţimea S=S[1]xS[2]x...xS[n] se numeşte spaţiul soluţiilor posibile mulţimile S1,S2,...,Sn sunt mulţimi finite, au un număr cunoscut de elemente, iar elementele lor se consideră că se află într-o relaţie de ordine bine stabilită; nu se dispune de o altă metodă de rezolvare mai rapidă

  3. Prezentareametodei Între componentele vectorului X sunt date mai multe condiţii interne, care depind de natura problemei date.Soluţiile posibile pentru care sunt verificate condiţiilede interne le numim soluţii rezultat. În unele problemese cere alegerea dintre soluţiile rezultat a soluţieioptimedupă un anumit criteriu. Soluţie parţială = o soluţie pentru care sunt indeplinitecondiţiile de continuare. Condiţiile de continuare se obţindin condiţiile interne aplicate pentru o soluţie parţială.

  4. Construireasoluţiei La fiecare pas se alege o valoare pentru elementul curent x[k] (soluţia se construieşte progresiv). Elementului x[k] i se atribuie următoarea valoare din mulţimea S[k] (dacă există). Pentru soluţia parţială obţinută (x[1],x[2],...,x[k]) sunt verificate condiţiile de continuare. Apar astfel două posibilităţi: Condiţia de continuare este adevărată: în acest caz testăm dacă am completat toate componentele soluţiei (k=n+1) . În caz afirmativ, am obţinut o soluţie pe care o reţinem. Dacă k<n incrementăm k cu 1 (avansăm la nivelul următor) şi iniţializăm x[k] cu o valoare anterioară primei valori dinmulţimea S[k].

  5. Construirea soluţiei Dacă condiţia de continuare este falsă, aleg pentru x[k] următoarea valoare posibilă din S[k] şi verific din nou condiţiile de continuare. Dacă nu pot face altă alegere, revinşi caut altă valoare pentru x[k-1]. Din modul de construire a soluţiei rezultă şi numele metodei backtracking: metoda avansului cu reveniri. Termenul „backtrack” a fost inventat de matematicianul american D.H. Lehmer în anii 1950.

  6. Aplicarea metodei Pentru o problemă particulară care se rezolvă prin metoda backtracking trebuie precizat: (1)spaţiul soluţiilor, adică mulţimile S[1], S[2], ..., S[n]. Nu este necesar ca aceste mulţimi să aibă acelaşi număr de elemente. (2) mai trebuie precizate condiţiile de continuare. Alegerea acestor condiţii influenţează decisiv eficienţa metodei. Condiţiile de continuare se obţin din condiţiile interne aplicate pentru o soluţie parţială.

  7. Procedura backtracking iterativă procedure backtracking; begin k:=1; x[k]:=init(k); while (k>0) do begin while {exista o valoare netestata in Sk} do begin x[k]:=urmator(k); if continuare(x[1],x[2],...,x[k]) then if (k=n) then solutie(x[1],x[2],...,x[n]) else begin {avans la nivelul k+1} k:=k+1; x[k]:=init(k); end end; k:=k-1; {revenire la nivelul anterior} end end;

  8. Procedura backtracking recursivă procedure back(k: integer); begin x[k]:=init(k); while are_succesor(x[k]) do if continuare(k) then if este_solutie(k) then solutie else back(k+1) end; * O variantă recursivăîncazulîn care toatemulţimileS[k] suntegale, S[k]={1,2,…,n} k= 1,nesteurmătoarea: procedure back(k: integer); var i: integer; begin if este_solutie(k) then solutie else for i:=1 to n do begin x[k]:=i; if continuare(k) then else back(k+1) end end;

  9. Generarea permutărilor Se citeşte un număr natural n. Să se genereze toate permutările mulţimii {1,2,…,n}. De exemplu, pentru n=3, permutările mulţimii {1,2,3} sunt: 123, 132, 213, 231, 312, 321 Se observă că fiecare componentă a soluţiei poate lua valorile 1,2,...,n=3 Condiţiile interne: ultima valoare adăugată x[k] să fie diferită de valorile anterioare x[1],x[2],…,x[k]

  10. Programul de generare a permutărilor type vector=array[1..20] of integer; var x:vector; n,nr:integer; procedure solutie; var i:integer; begin inc(nr); write(nr,':'); for i:=1 to n dowrite(x[i],' '); writeln;end; function continuare(k:integer):boolean; var i:integer; begin continuare:=true; for i:=1 to k-1 do if x[i]=x[k] then continuare:=false; end; procedure back(k:integer); var i:integer; begin if k=n+1 then solutie else for i:=1 to n do begin x[k]:=i; if continuare(k) then back(k+1); end; end; begin n:=5; back(1);writeln(nr,’ permutari’ readln; end.

  11. Exerciţii Utilizând metoda backtracking se generează permutările de 5 elemente, în ordine lexicografică. Se consideră permutarea p=(2,1,3,4,5). Care sunt, în ordine, următoarele trei permutări generate de algoritm? Care sunt cele trei permutări generate înaintea permutării p?

  12. Întrebări grilă 1. Dacăpentrunivelul k oarecare al vectoruluisoluţie am verificattoatevalorileposibile: a)algoritmulse încheie b) se revine pe nivelul anterior c) se trece pe nivelul următor 2. Încecondiţii se trece de la componenta k la componenta k+1? a) după ce am găsit o valoare convenabilă pentru componenta k b) dacănici o valoarepentrucomponenta k nu convine c) după ce am testattoatevalorileposibilepentrucomponenta k

  13. Întrebări grilă 3. Algoritmulseîncheiedacă: a) s-au testat toate valorile posibile pentru primul nivel b) s-au testat toate valorile posibile pentru ultimul nivel c) pe un nivel oarecare k, nu am găsit nicio valoare care să verifice condiţiile de continuare 4. Dupăgăsireauneisoluţii, pasulurmătoreste: a) se revinepenivelulanterior b) se rămânepeacelaşinivel, testându-se următoareavaloaredisponibilă c) se încheiealgoritmul

More Related