SlideShare a Scribd company logo
1 of 14
Metoda backtracking
Metoda backtracking
Clasificarea metodelor de programare
Definiţie
Exemple de probleme
Problema celor N dame:
• Metoda
• Implementarea
Scop – indentificarea problemelor pentru care trebuie enumerate
toate soluțiile ,fiecare soluție fiind formată din n elemente,care
aparține unei mulțimi finite A și care trebuie să respecte anumite
condiții interne.
Acestă metoda construieste progresiv vectorul soluţiei,pornind de
la primul element si adaugînd la vector urmatoarele elemente,cu
revenire la elementul anterior din vector,in caz de insucces.
Clasificarea metodelor de
programare
Algoritmi recursivi simpli
Algoritmi Backtracking
Algoritmi Divide et Impera
Algoritmi de programare dinamică
Algoritmi Greedy
Algoritmi Branch and bound
Backtracking - definiţie
 Să presupunem că trebuie să luaţi o serie
de decizii, având mai multe variante de
ales, unde
◦ Nu aveţi destule informaţii pentru a şti ce alegeţi
◦ Fiecare decizie ne conduce la un nou set de
variante posibile
◦ Unele succesiuni de variante (posibil mai multe
decât una) poate fi soluţia problemei tale
 Backtracking este o metodă ce încearcă
diferite succesiuni de decizii, înainte de a
găsi una care “merge”
Rezolvarea unui labirint
 Într-un labirint de dimensiune m*n, gasiţi o cale de a – l
parcurge de la început la sfârşit
 La fiecare intersecţie trebuie să decideţi între 3 sau mai multe
variante:
◦ Să mergeţi înainte
◦ Să mergeţi la stânga
◦ Să mergeţi la dreapta
 Nu aveţi destule informaţii pentru a alege corect
 Fiecare alegere duce la un nou set de alegeri
 Una sau mai multe secvenţe de variante poate (sau nu) să
conducă la o soluţie
 Multe tipuri de labirinturi se pot rezolva cu backtracking
Colorarea hărţii
 Doriţi să coloraţi o hartă în 4 culori:
◦ Roşu, galben, albastru şi verde
 Oricare 2 ţări vecine trebuie să fie colorate în culori diferite
 Nu aveţi destule informaţii pentru a şti ce culori alegeţi
 Fiecare decizie ne conduce la un nou set de variante posibile
 Una sau mai multe secvenţe de variante poate (sau nu) să
conducă la o soluţie
 Multe tipuri de colorări de hărţi se pot rezolva cu
backtracking
Rezolvarea unui puzzle
 În acest puzzle toate găurile înafară de una sunt colorate cu
aceaşi culoare
 Poţi sări doar de pe o gaură pe alta
 Găurile pe care sari se elimină
 Obiectul este de a elimina toate găurile inafară de una
 Nu aveţi destule informaţii pentru a sări corect
 Fiecare decizie ne conduce la un nou set de variante posibile
 Una sau mai multe secvenţe de variante poate (sau nu) să
conducă la o soluţie
 Multe tipuri de puzzle-uri se pot rezolva cu backtracking
Implimentarea metoda
backtracking
Pentru implimentarea se folosesc structuri de date si subprograme.
Pentru a memora elementele x ale soluţiei se foloseste structura de date de
tip stivă.
Aici mai putem folosi şi variabile de memorie:
as - este o variabilă logică care are valoare 1-true şi 0-false;
ev – pentru a ştii dacă succesorul găsit respectă condiţia de continuare şi
poate fii elemnetul x al soluţiei;
n- pentru dimensiunea soluţiei.
Subprograme
Algoritmul va fii implimentat prin:
un subprogram - este acelaşi pentru toţi algoritmii de rezolvare
prin metoda backtracking şi care descrie strategia generală
backtracking şi subprogramele care au aceeaşi semnificaţie
pentru toţi algoritmi,dar al căror conţinut diferă de la o problemă
la alta,depinzînd de condiţiile intrene ale soluţiei;
Subprogramul int ;
Subprogramul succesor;
Subprogramul valid;
Subprogramul soluţie;
Subprogramul tipar.
Subprogramul int – se inițializează elementul din vîrful stivei,
în acestest element se va inregistra următorul element al
soluției.
Subprogramul succesor - verifică dacă mai există in mulțimea A
un element pentru nivelul k al soluției.
Subprogramul valid - verifică dacă valoarea atribuită elementului
x al soluției indeplineste ,condiția de contnuare,adică poate fii
considerată ca face parte din soluția problemei.
int valid ( )
{for int (int i=1;i<k;i++)
if (st [i]==st[k]) return 0;
return 1;}
Subprogramul soluţie - ea verifică daca s-au obținut toate
elementele soluției:
int soluție ( )
{return k==n;}
Subprogramul tipar - afisează elemntele soluției.
Problemele rezolvabile prin metoda
backtracking
Metoda backtracking este recomandată in cazul problemelelor care
au următoarele caracteristici:
1. Se cere găsirea tuturor soluțiilor posibile
2. Nu se cunoaște un algoritm mai eficient
Metoda backtracking

More Related Content

Similar to Metoda backtracking (7)

Metoda Greedy
Metoda GreedyMetoda Greedy
Metoda Greedy
 
RH
RHRH
RH
 
Metoda back
Metoda backMetoda back
Metoda back
 
9 клас
9 клас9 клас
9 клас
 
Metoda greedy
Metoda greedyMetoda greedy
Metoda greedy
 
9 клас
9 клас9 клас
9 клас
 
9 клас
9 клас9 клас
9 клас
 

Metoda backtracking

  • 2. Metoda backtracking Clasificarea metodelor de programare Definiţie Exemple de probleme Problema celor N dame: • Metoda • Implementarea
  • 3. Scop – indentificarea problemelor pentru care trebuie enumerate toate soluțiile ,fiecare soluție fiind formată din n elemente,care aparține unei mulțimi finite A și care trebuie să respecte anumite condiții interne. Acestă metoda construieste progresiv vectorul soluţiei,pornind de la primul element si adaugînd la vector urmatoarele elemente,cu revenire la elementul anterior din vector,in caz de insucces.
  • 4. Clasificarea metodelor de programare Algoritmi recursivi simpli Algoritmi Backtracking Algoritmi Divide et Impera Algoritmi de programare dinamică Algoritmi Greedy Algoritmi Branch and bound
  • 5.
  • 6. Backtracking - definiţie  Să presupunem că trebuie să luaţi o serie de decizii, având mai multe variante de ales, unde ◦ Nu aveţi destule informaţii pentru a şti ce alegeţi ◦ Fiecare decizie ne conduce la un nou set de variante posibile ◦ Unele succesiuni de variante (posibil mai multe decât una) poate fi soluţia problemei tale  Backtracking este o metodă ce încearcă diferite succesiuni de decizii, înainte de a găsi una care “merge”
  • 7. Rezolvarea unui labirint  Într-un labirint de dimensiune m*n, gasiţi o cale de a – l parcurge de la început la sfârşit  La fiecare intersecţie trebuie să decideţi între 3 sau mai multe variante: ◦ Să mergeţi înainte ◦ Să mergeţi la stânga ◦ Să mergeţi la dreapta  Nu aveţi destule informaţii pentru a alege corect  Fiecare alegere duce la un nou set de alegeri  Una sau mai multe secvenţe de variante poate (sau nu) să conducă la o soluţie  Multe tipuri de labirinturi se pot rezolva cu backtracking
  • 8. Colorarea hărţii  Doriţi să coloraţi o hartă în 4 culori: ◦ Roşu, galben, albastru şi verde  Oricare 2 ţări vecine trebuie să fie colorate în culori diferite  Nu aveţi destule informaţii pentru a şti ce culori alegeţi  Fiecare decizie ne conduce la un nou set de variante posibile  Una sau mai multe secvenţe de variante poate (sau nu) să conducă la o soluţie  Multe tipuri de colorări de hărţi se pot rezolva cu backtracking
  • 9. Rezolvarea unui puzzle  În acest puzzle toate găurile înafară de una sunt colorate cu aceaşi culoare  Poţi sări doar de pe o gaură pe alta  Găurile pe care sari se elimină  Obiectul este de a elimina toate găurile inafară de una  Nu aveţi destule informaţii pentru a sări corect  Fiecare decizie ne conduce la un nou set de variante posibile  Una sau mai multe secvenţe de variante poate (sau nu) să conducă la o soluţie  Multe tipuri de puzzle-uri se pot rezolva cu backtracking
  • 10. Implimentarea metoda backtracking Pentru implimentarea se folosesc structuri de date si subprograme. Pentru a memora elementele x ale soluţiei se foloseste structura de date de tip stivă. Aici mai putem folosi şi variabile de memorie: as - este o variabilă logică care are valoare 1-true şi 0-false; ev – pentru a ştii dacă succesorul găsit respectă condiţia de continuare şi poate fii elemnetul x al soluţiei; n- pentru dimensiunea soluţiei.
  • 11. Subprograme Algoritmul va fii implimentat prin: un subprogram - este acelaşi pentru toţi algoritmii de rezolvare prin metoda backtracking şi care descrie strategia generală backtracking şi subprogramele care au aceeaşi semnificaţie pentru toţi algoritmi,dar al căror conţinut diferă de la o problemă la alta,depinzînd de condiţiile intrene ale soluţiei; Subprogramul int ; Subprogramul succesor; Subprogramul valid; Subprogramul soluţie; Subprogramul tipar.
  • 12. Subprogramul int – se inițializează elementul din vîrful stivei, în acestest element se va inregistra următorul element al soluției. Subprogramul succesor - verifică dacă mai există in mulțimea A un element pentru nivelul k al soluției. Subprogramul valid - verifică dacă valoarea atribuită elementului x al soluției indeplineste ,condiția de contnuare,adică poate fii considerată ca face parte din soluția problemei. int valid ( ) {for int (int i=1;i<k;i++) if (st [i]==st[k]) return 0; return 1;} Subprogramul soluţie - ea verifică daca s-au obținut toate elementele soluției: int soluție ( ) {return k==n;} Subprogramul tipar - afisează elemntele soluției.
  • 13. Problemele rezolvabile prin metoda backtracking Metoda backtracking este recomandată in cazul problemelelor care au următoarele caracteristici: 1. Se cere găsirea tuturor soluțiilor posibile 2. Nu se cunoaște un algoritm mai eficient