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.
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