SlideShare a Scribd company logo
1 of 7
Tehnici de elaborare a
algoritmilor
Metoda
Reluarii(BACKTRACKING)
Cuprins
 Descrierea metodei
 Formatul general al tehnicii reluare
 Problema exemplu
 Rezolvare
Descrierea generală a metodei
 Deseori în practică apar probleme care implică alegerea unor soluţii optime
dintr-un spaţiu extrem de vast de soluţii posibile.
 Un teoretician „pur" ar răspunde : „nici o problemă! construim toate soluţiile
posibile si le alegem apoi pe cele optime ! ". Dar este realistă o astfel de
abordare ?
 Să analizăm un caz foarte simplu: să presupunem că problema noastră
implică selectarea unei mulţimi de n elemente care trebuie să îndeplinească
anumite condiţii. Pentru fiecare element i presupunem că există pi posibilităţi
de alegere. A genera toate soluţiile posibile înseamnă de fapt a genera toate
elementele produsului cartezian {1,2, . . . , p1} x {l, 2 , . . . , p2} x . . . x {l, 2 , .
. . , pn}. Acest produs cartezian are p1xp2x . . . xpn elemente. Chiar dacă
vom considera că pi=2, pentru orice i = l, n tot obţinem 2n
soluţii posibile. E
mult? Să evaluăm cu aproximaţie timpul de execuţie a unui program bazat
pe un astfel de algoritm, presupunând că dispunem de un calculator care
execută un miliard de operaţii pe secundă (109
operaţii). n Timp de execuţie
40 109 secunde
50 31 ore
100 4.1013
ani
 E puţin probabil să putem aştepta atât!
 Prin urmare trebuie să abordăm în alt mod astfel de
probleme ! 0 idee ar fi să procedăm ca în multe situaţii din
viaţa de zi cu zi. Să ne gândim la modul în care un copil
rezolvă un puzzle. Copilul nu face toate combinaţiile posibile
de piese pentru ca apoi să le compare cu modelul pe care
vrea să îl obţină. El va lua mai întâi o piesă. Va căuta apoi în
mulţimea de piese rămase una care să se potrivească la cea
pe care o are, apoi încă una ş.a.m.d. Dacă la un moment dat
„se blochează" (nu mai găseşte nici o piesă în cele râmase
care să se potrivească), el nu distruge tot ce a construit ca
să o ia de la început. Va îndepărta mai întâi ultima piesă pe
care a pus-o şi va căuta o „alternativă" (o altă piesă care s-ar
potrivi în locul ei). Dacă găseşte, continuă construcţia cu
noua piesă aleasă. Dacă nu găseşte, se mai întoarce un pas
şi îndepărtează şi penultima piesă pe care a pus-o, căutând
apoi o altă variantă. Procedeul continuă până când obţine
modelul dorit.
Formatul general al tehnicii reluare
 Pentru a descrie formatul general al procedurii backtracking vom utiliza o procedură BKT. Considerăm că n,
numărul de componente ale vectorului, şi vectorul x sunt variabile globale.
 procedure BKT (k: integer);
 {când apelam procedura BKT cu parametrul k presupunem ca)
 {poziţiile 1,2,...,k-l din vectorul x sunt fixate}
 var MC: Mulţime Elemente; a: TipElement;
 {tipul elementelor vectorului depinde de problema concretă}
 begin
 if k-1 = n then {soluţia este completa} Prelucrare_Solutie
 else begin
 Candidat(MC, k);
 {procedura Candidat memorează in mulţimea MC elementele}
 {din mulţimea Sk care respecta condiţiile de continuare)
 while MC nu este vid do
 begin {nu am epuizat candidaţii pentru poziţia k)
 x[k]:= Extrage(MC); {extrag un candidat din MC}
 BKT(k + 1) {apel recursiv}
 end;
 end
 end;
 Din descrierea generală a metodei backtracking nu reiese explicit unde intervine revenirea. Pentru aceasta
trebuie să ne gândim la modul de realizare a recursivităţii.
 La fiecare apel recursiv se memorează pe stivă valorile variabilelor locale şi valoarea parametrului. La
încheierea unui apel recursiv, se eliberează zona de memorie alocată pe stivă şi se revine la apelul precedent.
 Pentru a înţelege mai bine modul de funcţionare a acestei metode să analizăm următoarea problemă.

Problema exemplu
 Problema reginelor
 Să se plaseze n regine pe o tablă de şah de dimensiune nxn astfel încât oricare două
regine să nu se atace.
 Reprezentarea informaţiilor
 Pentru ca două regine să nu se atace, ele nu trebuie să fie situate pe aceeaşi linie, pe
aceeaşi coloană sau pe aceeaşi diagonală. Cum numărul de regine este egal cu
dimensiunea tablei de şah, deducem că pe fiecare linie trebuie plasată o regină. Deci,
pentru ca poziţia reginelor să fie complet determinată, este suficient să reţinem pentru
fiecare linie coloana în care este plasată regina. Pentru aceasta vom utiliza un vector
C, cu n componente având următoarea semnificaţie:
 C [ i ] reprezintă coloana în care este plasată regina de pe linia i.
 Condiţii interne
 1. C[i] aparţine {l,2,...,n}, pentru I aparţine {l,2...,n} (elementele vectorului C sunt indici
de linii)
 2.C[i] diferit C[j], i diferit j, i, j aparţine {l,2,...,n} (două regine nu pot fi plasate pe
aceeaşi coloană)
 3. |C[i]-C[j] | diferit | i-j | , Vi diferit j, i, j aparţine {l,2,...,n} (două regine nu pot fi plasate
pe aceeaşi diagonală).

Rezolvare
 program Regine;
 const NrMaxRegine = 30;
 type Indice = 0 .. NrMaxRegine;
 Solutie = array[Indice] of 0..NrMaxRegine;
 var C: Solutie; n: Indice; NrSol: word;
 procedure Afisare;
 var i, j: Indice;
 begin
 inc(NrSol); writeln('Solutia nr. ', NrSol);
 for i := 1 to n do
 begin
 for j := 1 to n do
 if j = C[i] then write(' * ')
 else write(' o ');
 writeln
 end;
 writeln; readln;
 end;

 procedure Plaseaza_Regina(k: Indice);
 {cand apelam procedura Plaseaza__Regina cu parametrul k am
 plasat deja regine pe liniile 1, 2, ...,k-l}
 var i, j: Indice; ok: boolean;
 begin
 if k-1 = n then {am obtinut o solutie}
 Afisare {prelucrarea solutiei consta in afisare}
 else
 {trebuie sa mai plasam regine pe liniile k,k+l,...,n}
 for i := 1 to n do {determin multimea MC a candidatilor pentru pozitia k}
 begin ok := true; {verific daca pot plasa regina de pe linia k in coloana i}
 for j := 1 to k-1 do
 if (C[j]=i) or (abs(C[j]-i)=(k-j)) then ok := false;
 {regina s-ar gasi pe aceeasi coloana sau aceeasi diagonala cu o regina deja plasata}
 if ok then {valoarea i respecta conditiile interne} begin
 C[k] := i;{i este un candidat, il extrag imediat} Plaseaza_Regina(k+1) ;
 end; end; end;
 begin {program principal}
 write('n= '); readln(n);
 Plaseaza_Regina(1); end.

 Observaţi că am marcat poziţiile libere cu ' o', iar poziţiile pe care sunt plasate regine cu ' * '.
.

More Related Content

What's hot (20)

Informatica(1)
Informatica(1)Informatica(1)
Informatica(1)
 
Informatica metoda trierii
Informatica metoda trieriiInformatica metoda trierii
Informatica metoda trierii
 
Metoda trierii(1)
Metoda trierii(1)Metoda trierii(1)
Metoda trierii(1)
 
Catalina.metoda reluării
Catalina.metoda reluăriiCatalina.metoda reluării
Catalina.metoda reluării
 
Daria
DariaDaria
Daria
 
Metoda trierii
Metoda trieriiMetoda trierii
Metoda trierii
 
Informat
InformatInformat
Informat
 
Metoda reluarii
Metoda reluariiMetoda reluarii
Metoda reluarii
 
Metoda reluării
Metoda reluăriiMetoda reluării
Metoda reluării
 
Tehnici de programare_triere_1522
Tehnici de programare_triere_1522Tehnici de programare_triere_1522
Tehnici de programare_triere_1522
 
Tehnici de programare triere
Tehnici de programare triereTehnici de programare triere
Tehnici de programare triere
 
Metoda backtracking(1)
Metoda backtracking(1)Metoda backtracking(1)
Metoda backtracking(1)
 
Metoda reluării(2)
Metoda reluării(2)Metoda reluării(2)
Metoda reluării(2)
 
MetodaRMC
MetodaRMCMetodaRMC
MetodaRMC
 
Hurmuzachii vlad
Hurmuzachii vladHurmuzachii vlad
Hurmuzachii vlad
 
Metoda trierii
Metoda trieriiMetoda trierii
Metoda trierii
 
!Inofrmatica
!Inofrmatica!Inofrmatica
!Inofrmatica
 
Metoda Trierii
Metoda TrieriiMetoda Trierii
Metoda Trierii
 
Metoda
Metoda Metoda
Metoda
 
MT
MTMT
MT
 

Viewers also liked

презентация Microsoft office power point
презентация Microsoft office power pointпрезентация Microsoft office power point
презентация Microsoft office power pointmiklleee
 
Curriculum la disciplina informatica clasele X – XII (varianta în limba română)
Curriculum la disciplina informatica clasele X – XII (varianta în limba română)Curriculum la disciplina informatica clasele X – XII (varianta în limba română)
Curriculum la disciplina informatica clasele X – XII (varianta în limba română)Anna-Maria Russu
 

Viewers also liked (9)

Metoda reluarii..
Metoda reluarii..Metoda reluarii..
Metoda reluarii..
 
презентация Microsoft office power point
презентация Microsoft office power pointпрезентация Microsoft office power point
презентация Microsoft office power point
 
Curriculum la disciplina informatica clasele X – XII (varianta în limba română)
Curriculum la disciplina informatica clasele X – XII (varianta în limba română)Curriculum la disciplina informatica clasele X – XII (varianta în limba română)
Curriculum la disciplina informatica clasele X – XII (varianta în limba română)
 
Metoda reluării
Metoda reluăriiMetoda reluării
Metoda reluării
 
Dinu(2)
Dinu(2)Dinu(2)
Dinu(2)
 
Catalina
CatalinaCatalina
Catalina
 
MCI
MCIMCI
MCI
 
Tehnica greedy
Tehnica greedyTehnica greedy
Tehnica greedy
 
Metoda trierii(1)
Metoda trierii(1)Metoda trierii(1)
Metoda trierii(1)
 

Similar to RH (19)

metoda_backtracking22.ppt
metoda_backtracking22.pptmetoda_backtracking22.ppt
metoda_backtracking22.ppt
 
Metoda back
Metoda backMetoda back
Metoda back
 
00007 backtracking
00007 backtracking00007 backtracking
00007 backtracking
 
Instructiuni in c si c++
Instructiuni in c si c++Instructiuni in c si c++
Instructiuni in c si c++
 
divizori-descriere 2.doc
divizori-descriere 2.docdivizori-descriere 2.doc
divizori-descriere 2.doc
 
Auxiliar clasa v
Auxiliar clasa vAuxiliar clasa v
Auxiliar clasa v
 
Metoda backtracking
Metoda backtrackingMetoda backtracking
Metoda backtracking
 
Metoda reluarii
Metoda reluarii Metoda reluarii
Metoda reluarii
 
Algoritmi
Algoritmi Algoritmi
Algoritmi
 
Gc baleiere _infasuratoare_convexa (2)
Gc baleiere _infasuratoare_convexa (2)Gc baleiere _infasuratoare_convexa (2)
Gc baleiere _infasuratoare_convexa (2)
 
Opt
OptOpt
Opt
 
Proiect tic
Proiect tic Proiect tic
Proiect tic
 
Problema calului-1232691710728721-2 (1)
Problema calului-1232691710728721-2 (1)Problema calului-1232691710728721-2 (1)
Problema calului-1232691710728721-2 (1)
 
Problema calului-1232691710728721-2 (1)
Problema calului-1232691710728721-2 (1)Problema calului-1232691710728721-2 (1)
Problema calului-1232691710728721-2 (1)
 
Metoda trierii
Metoda trieriiMetoda trierii
Metoda trierii
 
Inductia matematica
Inductia matematicaInductia matematica
Inductia matematica
 
Vectori
VectoriVectori
Vectori
 
Tema
TemaTema
Tema
 
Calculul numeric teorie
Calculul numeric teorieCalculul numeric teorie
Calculul numeric teorie
 

More from Balan Veronica (20)

10690908 737125719676587 190185588_n
10690908 737125719676587 190185588_n10690908 737125719676587 190185588_n
10690908 737125719676587 190185588_n
 
Integrarea numerica
Integrarea numericaIntegrarea numerica
Integrarea numerica
 
Veronica botnarenco
Veronica botnarencoVeronica botnarenco
Veronica botnarenco
 
Integrare numerică
Integrare numericăIntegrare numerică
Integrare numerică
 
Inform
InformInform
Inform
 
Metodele de integrare
Metodele de integrareMetodele de integrare
Metodele de integrare
 
Metode de calcul al integralei definite
Metode de calcul al integralei definiteMetode de calcul al integralei definite
Metode de calcul al integralei definite
 
Integrarea numerică
Integrarea numericăIntegrarea numerică
Integrarea numerică
 
Dreptunghiuri
DreptunghiuriDreptunghiuri
Dreptunghiuri
 
aana
aanaaana
aana
 
CatPadI
CatPadICatPadI
CatPadI
 
integrare
integrareintegrare
integrare
 
Metoda0newton
Metoda0newtonMetoda0newton
Metoda0newton
 
Metoda-bisecției
Metoda-bisecțieiMetoda-bisecției
Metoda-bisecției
 
Metoda-coardei
Metoda-coardeiMetoda-coardei
Metoda-coardei
 
Metoda-newton(1)
Metoda-newton(1)Metoda-newton(1)
Metoda-newton(1)
 
newton
newtonnewton
newton
 
BD
BDBD
BD
 
pr
prpr
pr
 
PD
PDPD
PD
 

Recently uploaded

Strategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptxStrategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptxMoroianuCristina1
 
ziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiAndr808555
 
Literatura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăLiteratura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăBibliotecaMickiewicz
 
Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10CrciunAndreeaMaria
 
Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11CMB
 
Igiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-aIgiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-aCMB
 
Catalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCatalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCori Rus
 

Recently uploaded (7)

Strategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptxStrategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptx
 
ziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantului
 
Literatura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăLiteratura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba română
 
Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10
 
Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11
 
Igiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-aIgiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-a
 
Catalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCatalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptx
 

RH

  • 1. Tehnici de elaborare a algoritmilor Metoda Reluarii(BACKTRACKING)
  • 2. Cuprins  Descrierea metodei  Formatul general al tehnicii reluare  Problema exemplu  Rezolvare
  • 3. Descrierea generală a metodei  Deseori în practică apar probleme care implică alegerea unor soluţii optime dintr-un spaţiu extrem de vast de soluţii posibile.  Un teoretician „pur" ar răspunde : „nici o problemă! construim toate soluţiile posibile si le alegem apoi pe cele optime ! ". Dar este realistă o astfel de abordare ?  Să analizăm un caz foarte simplu: să presupunem că problema noastră implică selectarea unei mulţimi de n elemente care trebuie să îndeplinească anumite condiţii. Pentru fiecare element i presupunem că există pi posibilităţi de alegere. A genera toate soluţiile posibile înseamnă de fapt a genera toate elementele produsului cartezian {1,2, . . . , p1} x {l, 2 , . . . , p2} x . . . x {l, 2 , . . . , pn}. Acest produs cartezian are p1xp2x . . . xpn elemente. Chiar dacă vom considera că pi=2, pentru orice i = l, n tot obţinem 2n soluţii posibile. E mult? Să evaluăm cu aproximaţie timpul de execuţie a unui program bazat pe un astfel de algoritm, presupunând că dispunem de un calculator care execută un miliard de operaţii pe secundă (109 operaţii). n Timp de execuţie 40 109 secunde 50 31 ore 100 4.1013 ani
  • 4.  E puţin probabil să putem aştepta atât!  Prin urmare trebuie să abordăm în alt mod astfel de probleme ! 0 idee ar fi să procedăm ca în multe situaţii din viaţa de zi cu zi. Să ne gândim la modul în care un copil rezolvă un puzzle. Copilul nu face toate combinaţiile posibile de piese pentru ca apoi să le compare cu modelul pe care vrea să îl obţină. El va lua mai întâi o piesă. Va căuta apoi în mulţimea de piese rămase una care să se potrivească la cea pe care o are, apoi încă una ş.a.m.d. Dacă la un moment dat „se blochează" (nu mai găseşte nici o piesă în cele râmase care să se potrivească), el nu distruge tot ce a construit ca să o ia de la început. Va îndepărta mai întâi ultima piesă pe care a pus-o şi va căuta o „alternativă" (o altă piesă care s-ar potrivi în locul ei). Dacă găseşte, continuă construcţia cu noua piesă aleasă. Dacă nu găseşte, se mai întoarce un pas şi îndepărtează şi penultima piesă pe care a pus-o, căutând apoi o altă variantă. Procedeul continuă până când obţine modelul dorit.
  • 5. Formatul general al tehnicii reluare  Pentru a descrie formatul general al procedurii backtracking vom utiliza o procedură BKT. Considerăm că n, numărul de componente ale vectorului, şi vectorul x sunt variabile globale.  procedure BKT (k: integer);  {când apelam procedura BKT cu parametrul k presupunem ca)  {poziţiile 1,2,...,k-l din vectorul x sunt fixate}  var MC: Mulţime Elemente; a: TipElement;  {tipul elementelor vectorului depinde de problema concretă}  begin  if k-1 = n then {soluţia este completa} Prelucrare_Solutie  else begin  Candidat(MC, k);  {procedura Candidat memorează in mulţimea MC elementele}  {din mulţimea Sk care respecta condiţiile de continuare)  while MC nu este vid do  begin {nu am epuizat candidaţii pentru poziţia k)  x[k]:= Extrage(MC); {extrag un candidat din MC}  BKT(k + 1) {apel recursiv}  end;  end  end;  Din descrierea generală a metodei backtracking nu reiese explicit unde intervine revenirea. Pentru aceasta trebuie să ne gândim la modul de realizare a recursivităţii.  La fiecare apel recursiv se memorează pe stivă valorile variabilelor locale şi valoarea parametrului. La încheierea unui apel recursiv, se eliberează zona de memorie alocată pe stivă şi se revine la apelul precedent.  Pentru a înţelege mai bine modul de funcţionare a acestei metode să analizăm următoarea problemă. 
  • 6. Problema exemplu  Problema reginelor  Să se plaseze n regine pe o tablă de şah de dimensiune nxn astfel încât oricare două regine să nu se atace.  Reprezentarea informaţiilor  Pentru ca două regine să nu se atace, ele nu trebuie să fie situate pe aceeaşi linie, pe aceeaşi coloană sau pe aceeaşi diagonală. Cum numărul de regine este egal cu dimensiunea tablei de şah, deducem că pe fiecare linie trebuie plasată o regină. Deci, pentru ca poziţia reginelor să fie complet determinată, este suficient să reţinem pentru fiecare linie coloana în care este plasată regina. Pentru aceasta vom utiliza un vector C, cu n componente având următoarea semnificaţie:  C [ i ] reprezintă coloana în care este plasată regina de pe linia i.  Condiţii interne  1. C[i] aparţine {l,2,...,n}, pentru I aparţine {l,2...,n} (elementele vectorului C sunt indici de linii)  2.C[i] diferit C[j], i diferit j, i, j aparţine {l,2,...,n} (două regine nu pot fi plasate pe aceeaşi coloană)  3. |C[i]-C[j] | diferit | i-j | , Vi diferit j, i, j aparţine {l,2,...,n} (două regine nu pot fi plasate pe aceeaşi diagonală). 
  • 7. Rezolvare  program Regine;  const NrMaxRegine = 30;  type Indice = 0 .. NrMaxRegine;  Solutie = array[Indice] of 0..NrMaxRegine;  var C: Solutie; n: Indice; NrSol: word;  procedure Afisare;  var i, j: Indice;  begin  inc(NrSol); writeln('Solutia nr. ', NrSol);  for i := 1 to n do  begin  for j := 1 to n do  if j = C[i] then write(' * ')  else write(' o ');  writeln  end;  writeln; readln;  end;   procedure Plaseaza_Regina(k: Indice);  {cand apelam procedura Plaseaza__Regina cu parametrul k am  plasat deja regine pe liniile 1, 2, ...,k-l}  var i, j: Indice; ok: boolean;  begin  if k-1 = n then {am obtinut o solutie}  Afisare {prelucrarea solutiei consta in afisare}  else  {trebuie sa mai plasam regine pe liniile k,k+l,...,n}  for i := 1 to n do {determin multimea MC a candidatilor pentru pozitia k}  begin ok := true; {verific daca pot plasa regina de pe linia k in coloana i}  for j := 1 to k-1 do  if (C[j]=i) or (abs(C[j]-i)=(k-j)) then ok := false;  {regina s-ar gasi pe aceeasi coloana sau aceeasi diagonala cu o regina deja plasata}  if ok then {valoarea i respecta conditiile interne} begin  C[k] := i;{i este un candidat, il extrag imediat} Plaseaza_Regina(k+1) ;  end; end; end;  begin {program principal}  write('n= '); readln(n);  Plaseaza_Regina(1); end.   Observaţi că am marcat poziţiile libere cu ' o', iar poziţiile pe care sunt plasate regine cu ' * '. .