Differences

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

Link to this comparison view

pa:laboratoare:laborator-01 [2021/03/08 16:49]
radu.nichita [Turnurile din Hanoi]
pa:laboratoare:laborator-01 [2022/03/21 23:11] (current)
radu.nichita [Exerciții]
Line 1: Line 1:
 ====== Laborator 01: Divide et Impera ====== ====== Laborator 01: Divide et Impera ======
-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: +
-  * [[visanr95@gmail.com|Radu Vișan (2018)]] +
-  * [[cristb@gmail.com|Cristian Banu (2018)]] +
-  * [[neatudarius@gmail.com|Darius-Florentin Neațu (2018)]] +
-  ​+
 ===== Obiective laborator ===== ===== Obiective laborator =====
  
Line 23: Line 12:
 Toate exemplele de cod se găsesc pe pagina [[https://​github.com/​acs-pa/​pa-lab/​tree/​main/​demo/​lab01|pa-lab::​demo/​lab01]]. Toate exemplele de cod se găsesc pe pagina [[https://​github.com/​acs-pa/​pa-lab/​tree/​main/​demo/​lab01|pa-lab::​demo/​lab01]].
  
-Exemplele de cod apar incorporate ​și în textul laboratorului pentru a facilita parcurgerea cursivă a acestuia. ATENȚIE! Varianta actualizată a acestor exemple se găsește întotdeauna pe GitHub.+Exemplele de cod apar încorporate ​și în textul laboratorului pentru a facilita parcurgerea cursivă a acestuia. ATENȚIE! Varianta actualizată a acestor exemple se găsește întotdeauna pe GitHub.
 </​note>​ </​note>​
  
-  * Toate bucățile de cod prezentate în partea introductivă a laboratorului (înainte de exerciții) au fost testate. Cu toate acestea, este posibil ca din cauza mai multor factori (formatare, caractere invizibile puse de browser etc) un simplu copy-paste să nu fie de ajuns pentru a compila codul.+  * Toate bucățile de cod prezentate în partea introductivă a laboratorului (înainte de exerciții) au fost testate. Cu toate acestea, este posibil ca din cauza mai multor factori (formatare, caractere invizibile puse de browser etc.) un simplu copy-paste să nu fie de ajuns pentru a compila codul.
   * Vă rugam să compilați **DOAR** codul de pe GitHub. Pentru raportarea problemelor,​ contactați unul dintre maintaineri. ​   * Vă rugam să compilați **DOAR** codul de pe GitHub. Pentru raportarea problemelor,​ contactați unul dintre maintaineri. ​
   * Pentru orice problemă legată de conținutul acestei pagini, vă rugam să dați e-mail unuia dintre responsabili.   * Pentru orice problemă legată de conținutul acestei pagini, vă rugam să dați e-mail unuia dintre responsabili.
Line 42: Line 31:
 ===== Prezentarea generală a problemei ===== ===== Prezentarea generală a problemei =====
  
-O descriere a tehnicii D&I: “Divide and Conquer algorithms break the problem into several sub-problems that are similar to the original problem but smaller in size, solve the sub-problems recursively,​ and then combine these solutions to create a solution to the original problem.” ​[7]+O descriere a tehnicii D&I: “Divide and Conquer algorithms break the problem into several sub-problems that are similar to the original problem but smaller in size, solve the sub-problems recursively,​ and then combine these solutions to create a solution to the original problem.”
  
 Deci un algoritm D&I **împarte problema** în mai multe subprobleme similare cu problema inițială şi de dimensiuni mai mici, **rezolvă subproblemele** recursiv şi apoi **combină soluțiile** obţinute pentru a obține soluția problemei inițiale. Deci un algoritm D&I **împarte problema** în mai multe subprobleme similare cu problema inițială şi de dimensiuni mai mici, **rezolvă subproblemele** recursiv şi apoi **combină soluțiile** obţinute pentru a obține soluția problemei inițiale.
Line 381: Line 370:
             }             }
         }         }
-        return res;+        return ​(res != -1 && v[res] == x) ? res : -1;
     }     }
  
Line 395: Line 384:
             }             }
         }         }
-        return res;+        return ​(res != -1 && v[res] == x) ? res : -1;
     }     }
  
Line 486: Line 475:
  }  }
  }  }
- return res;+ return ​(res != -1 && v[res] == x) ? res : -1;
  }  }
  
Line 500: Line 489:
  }  }
  }  }
- return res;+ return ​(res != -1 && v[res] == x) ? res : -1;
  }  }
  
Line 559: Line 548:
  
 Atenție la înmulțire! Rezultatul **temporar** poate provoca un overflow. Atenție la înmulțire! Rezultatul **temporar** poate provoca un overflow.
-Solutii:+ 
 +Soluții:
   * **C++**: $a * b$ => $1LL * a * b$   * **C++**: $a * b$ => $1LL * a * b$
   * **Java**: $a * b$ => $1L * a * b$   * **Java**: $a * b$ => $1L * a * b$
Line 583: Line 573:
  
 <​note>​ <​note>​
-Aceasta problema nu are schelet.+Aceasta problema nu are schelet, dar poate fi testată pe infoarena, la problema [[https://​www.infoarena.ro/​problema/​inv | Inv]].
 </​note>​ </​note>​
  
Line 626: Line 616:
 </​spoiler>​ </​spoiler>​
  
 +<spoiler Secventa descrescatoare>​
 +Dându-se N numere întregi sub forma unei secvenţe de numere strict crescătoare,​ care se continuă cu o secvenţă de întregi strict descrescătoare,​ se doreşte determinarea punctului din întregul şir înaintea căruia toate elementele sunt strict crescătoare,​ şi dupa care, toate elementele sunt strict descrescătoare. Considerăm evident faptul că acest punct nu există dacă cele N numere sunt dispuse într-un şir fie doar strict crescător, fie doar strict descrescător.
  
 +</​spoiler>​
  
-<​spoiler ​SSM+<​spoiler ​K closest points to origin
-Puteți rezolva ​aceasta problema de [[https://ocw.cs.pub.ro/courses/pa/laboratoare/​laborator-03#​ssm +Puteți rezolva ​această problemă pe [[https://leetcode.com/problems/k-closest-points-to-origin/ | leetcode]]
-aici]]+
- +
-<​note>​ +
-Pentru problema SSM vom studia o soluție potrivita in lab03. Puteți să încercați să o rezolvați cu Divide et Impera pentru a exersa cele învățate astăzi. +
-</​note>​+
 </​spoiler>​ </​spoiler>​
  
-<​spoiler ​Secventa descrescatoare+<​spoiler ​Merge k Sorted Lists
-Dându-se N numere întregi sub forma unei secvenţe de numere strict crescătoare, care se continuă cu o secvenţă de întregi strict descrescătoare,​ se doreşte determinarea punctului din întregul şir înaintea căruia toate elementele sunt strict crescătoare,​ şi dupa care, toate elementele sunt strict descrescătoareConsiderăm evident faptul că acest punct nu există dacă cele N numere sunt dispuse într-un şir fie doar strict crescător, fie doar strict descrescător. +Puteți rezolva această problemă pe [[https://​leetcode.com/​problems/​merge-k-sorted-lists/​ | leetcode]]
 </​spoiler>​ </​spoiler>​
  
  
  
 +===== Referințe =====
  
 +[0] Chapter **Divide-and-Conquer**,​ "​Introduction to Algorithms",​ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
  
  
pa/laboratoare/laborator-01.1615214970.txt.gz · Last modified: 2021/03/08 16:49 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