Sunteți pe pagina 1din 17

Tema 3.

METODЕ GENERALЕ DE CONSTRUIRE A


ALGORITMILOR. METODA BACKTRACKING
Metode de construire a algoritmilor –oferă metodе generalе de rezolvare unei
clase de probleme:
⮚metoda backtracking;
⮚ metoda divide et impera;
⮚ metoda greedy;
⮚ metoda programării dinamice.
Fiecare dintre aceste metode de construire a algoritmilor se poate folosi pentru
anumite clase de probleme, iar în cazul în care – pentru aceeaşi clasă de probleme
– se pot folosi mai multe metode de construire a algoritmilor, criteriul de alegere
va fi eficienţa algoritmului.
METODA BACKTRAKING
Descrierea metodei backtracking
STUDIU DE CAZ

Scop: identificarea problemelor pentru care trebuie enumerate toate soluţiile,


fiecare soluţie fiind formată din n elemente xi, care aparţin fiecare unor mulţimi
finite Ai şi care trebuie să respecte anumite condiţii interne.
Sarcina la lecție :
Exemplul 1. Găsiți rădăcinile întregi ale
unei ecuații cubice în intervalul -1000
până la 1000 folosind metoda
backtracking

3 2
ax +bx +cx +d=0

[-1000;1000]
3 2
3 x −5 x +7 x−3=0

Ecuația poate fi rezolvată analitic,


precum și prin metoda backtracking.
Programul substituie toate variantele lui
x din ecuație, iar dacă ecuația este egală
cu 0, atunci se găsește rădăcina.
Algoritmul metodei backtracking poate fi generalizat pentru orice problemă care
îndeplineşte următoarele condiţii:
1. Soluţia problemei poate fi pusă sub forma unui vector S = {x1, x2, …, xn} ale cărui
elemente xi aparţin – fiecare – unei mulţimi Ai, astfel: x1ϵA1, x2ϵA2, …, xnϵAn.
2. Mulţimile Ai sunt finite, iar elementele lor sunt numere întregi şi se găsesc într-o
ordine bine stabilită.
Complexitatea algoritmului metodei backtracking

https://www.youtube.com/watch?v=R8bM6pxlrLY
Metoda backtracking este recomandată în cazul problemelor care au următoarele
caracteristici:
✔se cere găsirea tuturor soluţiilor posibile;
✔nu se cunoaşte un algoritm mai eficient.
Alte exemple de probleme clasice care se pot rezolva folosind metoda backtracking:
✔ generarea tuturor elementelor unui produs cartezian;
✔ generarea tuturor partiţiilor unui număr natural;
✔generarea tuturor partiţiilor unei mulţimi;
✔generarea tuturor funcţiilor surjective;
✔generarea tuturor funcţiilor injective;
✔generarea tuturor posibilităţilor de plată a unei sume cu bancnote de valori date;
✔generarea tuturor posibilităţilor de acoperire a tablei de şah prin săritura calului
(parcurgerea tablei de şah prin săritura calului, fără a se trece de două ori prin aceeaşi
poziţie).
✔generarea tuturor posibilităţilor de ieşire dintr-un labirint;
Sarcina la lecție : Stabiliți dacă număr X este prim. X introduce utilizator.
1) Algoritm prin Metoda
backtracking

● introduceți numărul x
● împărțiți x la toate numerele din
intervalul de la 1 la x-1
● dacă restul diviziunii este 0, atunci
numărul este compus

2) Verificati timpului necesar


pentru stabilirea daca X este prim
pentru X=827, X=3547, X=100003.

3) Ce complexitate are acest


algorotm?
4) Optimizam acest algoritm: vom
căuta primii în intervalul până la √❑

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