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