Sunteți pe pagina 1din 10

METODA

BACKTRACKING
CONŢINUTUL PROIECTULUI
 Definirea metodei backtracking
 Algoritmul metodei .Condiţiile interne şi de
continuitate
 Procedura backtracking
 Backtracking recursiv
 Procedura BKTR recursiv
 Problemã rezolvatã
Definirea metodei
backtr acking
Backtracking este o metodã generalã de programare pentru
.
problemele a cãror rezolvare are anumite proprietaţi:
Soluţia:structura de date omogene.In general ,pentru
problemele mai simple este un tablou unidimensional. Fie
notaţia S=(s1,s2,s3,…..,sn).
Lungimea soluţiei : numãrul de componente ale structurii de
date.Notaţie :n sau lung.
Mulţimile de valori permise fiecãrei componente:mulţimi
finite,notate cu Vi, i={1,..,n}. Mulţimea V1xV2 x…xVn alcãtu-
ieşte spaţiul soluţiilor posibile
Algoritmul metodei
 Pasul I : Nu s-a testat nici o valoare;
 Pasul II: Se verificã dacã existã valori netestate pentru
xk.Dacã da se trece la pasul III.Dacã nu se reia aflarea
valorilor pentru xk-1 reluând pasul II;
 Pasul III:Se alege prima valoare V dintre cele netestate
pentru xk.
 Pasul IV:Se verificã dacã aceastã combinaţie parţialã
ne conduce la un rezultat. Dacã da se trece la pasul V
dacã nu se reia pasul II pentru k.
 Pasul V:Se verificã dacã s-a obţinut o soluţie.Dacã da
se tipareşte şi se râmâne la componenta xk reluându-
se pasul II.Dacã nu se reia algoritmul de la pasul I
pentru k+1.
Condiţiile interne
şi de continuitate
 Condiţiile interne
 Sunt condiţiile fiecãrei probleme în parte dintre
componentele vectorului soluţie.Vom defini termenul
de soluţii rezultat.Sunt soluţiile posibile ce verificã
poziţiile interne.
 Condiţiile de continuitate
 Sunt condiţiile pentru ca valoarea xk sã fie
acceptatã.Metoda backtracking oferã toate soluţiile.
PROCEDURA BKTR
Procedure bktr;
begin
K:=1;x[k]:=0;while k>0 do
If x[k]<n then begin
X[k]:=x[k]+1;
If cond(k) then begin
Tipar (k);writeln; end;
else begin
K:=k+1;x[k]:=0;end;end;
else k:=k-1; end;
Backtr acking r ecur siv
 Algoritmul recursiv necesitã mai mult spa- ţiu de
memorie şi un timp mai îndelungat de execuţie.
 Avantajele:
-algoritmul este mai concis (textul sursã este
mai scurt) şi este mai uşor de înţeles.
-în cazul în care pentru x[k] avem valori
posibile succesive tratarea se poate face şi
astfel :
Procedure BKTR recursiv
Procedure BKTR(k:integer);
var i:integer;
Begin
For i:=vi to vf do begin
x[k]:=i;
if cond(k) then
if k=n then TIPAR
else BKTR(k+1);
end;
end;
Problemã rezolvatã
Sã se genereze toate cuvintele din alfabetul morse formate din
caracterele “– “şi “ * “ ,dar sã nu înceapã cu “-”.
Program morse;
Const s:array[0..1] of char =(‘*’, ‘ –’,);
var i,k,n:integer;
l :array[0..1] of 0..1;
Function Cond (k:integer):boolean;
Begin
Cond :=true;
For i:=1 to k-1 do if (l [ i ]=l[k]) then cond :=false;end;
Procedure tipar (k:integer);
Begin
For i:=1 to k do begin
If l [ i ]=1 then write(‘-’) else write(‘ * ‘);end;end;
Procedure bktr;
Begin
K:=1; l [k]:=0;
While k>0 do if l[k ]<n then begin
l [k]:=l [k]+1; if cond(k) then if k=n then begin
Tipar (k);writeln; end else begin
k:=k+1;
l[k]:=0;
end;end else k:=k-1;end;
Begin
Write(‘dati un N : ‘);read(N);BKTR; end.
Acest proiect a fost realizat de
HARBUZARU CEZAR,
elev în clasa a-XI-a A,
profil matematicã-informaticã
la Grupul Şcolar “C.F.R UNIREA”
Paşcani

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