Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pa:laboratoare:laborator-05 [2021/03/08 23:21]
radu.nichita [Ultimate Tic Tac Toe]
pa:laboratoare:laborator-05 [2024/04/01 14:12] (current)
radu.nichita
Line 1: Line 1:
-====== Laborator 5: Backtracking ====== +====== Laborator 05: Backtracking ====== 
-Responsabili:​ + 
-  * [[neatudarius@gmail.com|Darius-Florentin Neațu (2017-2021)]] +
-  * [[radunichita99@gmail.com | Radu Nichita (2021)]] +
-  * [[cristianolaru99@gmail.com | Cristian Olaru (2021)]] +
-  * [[mirunaelena.banu@gmail.com ​ | Miruna-Elena Banu (2021)]] +
-  * [[maraioana9967@gmail.com | Mara-Ioana Nicolae (2021)]] +
-  * [[stefanpopa2209@gmail.com | Ștefan Popa (2018-2020)]] +
- +
- +
-Autori: +
-  * [[radu.stochitoiu@gmail.com|Radu Stochitoiu (2018)]] +
-  * [[razvan.m.chitu@gmail.com|Razvan Chitu (2018)]] +
 ===== Obiective laborator ===== ===== Obiective laborator =====
   * Întelegerea noțiunilor de bază despre backtracking;​   * Întelegerea noțiunilor de bază despre backtracking;​
Line 32: Line 20:
 ===== Ce este Backtracking?​ ===== ===== Ce este Backtracking?​ =====
 Backtracking este un algoritm care caută **una sau mai multe soluții** pentru o problema, printr-o căutare exhaustiva, mai eficientă însă în general decât o abordare „generează si testează”,​ de tip „forță brută”, deoarece un candidat parțial care nu duce la o soluție este abandonat. Poate fi folosit pentru orice problemă care presupune o căutare în **spațiul stărilor**. Backtracking este un algoritm care caută **una sau mai multe soluții** pentru o problema, printr-o căutare exhaustiva, mai eficientă însă în general decât o abordare „generează si testează”,​ de tip „forță brută”, deoarece un candidat parțial care nu duce la o soluție este abandonat. Poate fi folosit pentru orice problemă care presupune o căutare în **spațiul stărilor**.
-În general, în timp ce cautăm o soluție e posibil să dăm de o înfundătură ​în urma unei alegeri greșite sau să găsim o soluție, dar să dorim să căutăm în continuare alte soluții. În acel moment trebuie să ne întoarcem pe pașii făcuți (**backtrack**) și la un moment dat să luăm altă decizie.+În general, în timp ce cautăm o soluție e posibil să dăm de un deadend ​în urma unei alegeri greșite sau să găsim o soluție, dar să dorim să căutăm în continuare alte soluții. În acel moment trebuie să ne întoarcem pe pașii făcuți (**backtrack**) și la un moment dat să luăm altă decizie.
 Este relativ simplu din punct de vedere conceptual, dar complexitatea algoritmului este exponentială. Este relativ simplu din punct de vedere conceptual, dar complexitatea algoritmului este exponentială.
  
Line 191: Line 179:
 Soluția va avea următoarele complexitati:​ Soluția va avea următoarele complexitati:​
  
-  * complexitate temporala : $T(n)=O(n * n!)=O(n!)$+  * complexitate temporala : $T(n)=O(n * n!)$
      * explicație : Complexitatea generarii permutarilor,​ $O(n!)$, se înmultește cu complexitatea copierii vectorilor soluție si domeniu si a stergerii elementelor din domeniu, $O(n)$      * explicație : Complexitatea generarii permutarilor,​ $O(n!)$, se înmultește cu complexitatea copierii vectorilor soluție si domeniu si a stergerii elementelor din domeniu, $O(n)$
   * complexitate spatiala : $S(n)=O(n^2)$   * complexitate spatiala : $S(n)=O(n^2)$
Line 829: Line 817:
 ==== Problema damelor ==== ==== Problema damelor ====
  
-Problema damelor (sau problema reginelor) tratează plasarea a 8 regine de sah pe o tablă de șah de dimensiuni 8 x 8 astfel încat să nu existe două regine care se amenință reciproc. Astfel, se caută **o solutie** astfel încât nicio pereche de doua regine să nu fie pe același rând, pe aceeași coloană, sau pe aceeași diagonală. Problema cu opt regine este doar un caz particular pentru problema generală, care presupune plasarea a N regine pe o tablă de șah N x N în aceleasi condiții. Pentru această problemă, există soluții pentru toate numerele naturale N cu excepția lui N = 2 si N = 3.+Problema damelor (sau problema reginelor) tratează plasarea a 8 regine de sah pe o tablă de șah de dimensiuni 8 x 8 astfel încat să nu existe două regine care se amenință reciproc. Astfel, se caută **o soluție** astfel încât nicio pereche de doua regine să nu fie pe același rând, pe aceeași coloană, sau pe aceeași diagonală. Problema cu opt regine este doar un caz particular pentru problema generală, care presupune plasarea a N regine pe o tablă de șah N x N în aceleasi condiții. Pentru această problemă, există soluții pentru toate numerele naturale N cu excepția lui N = 2 si N = 3.
  
 <spoiler Exemplu 1> <spoiler Exemplu 1>
Line 865: Line 853:
  
 </​note>​ </​note>​
-==== Generare de siruri ​====+==== Generare de șiruri ​====
  
 Vi se dă o listă de caractere și o lista de frecvențe (pentru caracterul de pe Vi se dă o listă de caractere și o lista de frecvențe (pentru caracterul de pe
Line 945: Line 933:
 </​spoiler>​ </​spoiler>​
  
 +
 +
 +<spoiler Backtracking problems>​
 +Articolul de pe [[https://​leetcode.com/​tag/​backtracking/​| leetcode]] conține o listă cu diverse tipuri de probleme de programare dinamică, din toate categoriile discutate la PA (plus multe altele).
 +</​spoiler>​
  
 ===== Referințe ===== ===== Referințe =====
  
 [0] Chapter **Backtracking**,​ “Introduction to Algorithms”,​ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein [0] Chapter **Backtracking**,​ “Introduction to Algorithms”,​ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
pa/laboratoare/laborator-05.1615238510.txt.gz · Last modified: 2021/03/08 23:21 by radu.nichita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0