Differences

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

Link to this comparison view

pa:laboratoare:laborator-04 [2021/03/15 11:07]
miruna_elena.banu [Exercitii]
pa:laboratoare:laborator-04 [2024/04/16 17:38] (current)
radu.nichita
Line 1: Line 1:
-====== Laborator 4: Programare Dinamică (continuare) ====== +====== Laborator 04: Programare Dinamică (2/2) ======
-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: +
-  * [[neatudarius@gmail.com|Darius-Fforentin Neațu (2018)]] +
-  * [[visanr95@gmail.com|Radu Vișan (2018)]] +
-  * [[cristb@gmail.com|Cristian Banu (2018)]] +
-  * [[razvan.ch95@gmail.com|Răzvan Chițu (2018)]] +
  
 ===== Obiective laborator ===== ===== Obiective laborator =====
Line 102: Line 88:
        * explicație:​ $X =(BC)$ generează $3 * 4 * 5 = 60$ înmulțiri,​ $(AX)$ generează $2 * 3 * 5 = 30$ de înmulțiri        * explicație:​ $X =(BC)$ generează $3 * 4 * 5 = 60$ înmulțiri,​ $(AX)$ generează $2 * 3 * 5 = 30$ de înmulțiri
        
-Rezultatul optim se obține pentru ​cea de a treia parantezare:​ $(AB)C$.+Rezultatul optim se obține pentru ​prima parantezare:​ $(AB)C$.
    
 </​spoiler>​ </​spoiler>​
Line 165: Line 151:
 == Numire recurență === == Numire recurență ===
 $dp[i][j]$ = **numărul minim de înmulțiri scalare** cu care se poate obține produsul $M_i * M_{i+1} * ... *{M_j}$ ​ $dp[i][j]$ = **numărul minim de înmulțiri scalare** cu care se poate obține produsul $M_i * M_{i+1} * ... *{M_j}$ ​
 +
 +Răspunsul la problemă este **dp[1][n]** .
  
 == Găsire recurență == == Găsire recurență ==
Line 186: Line 174:
 <spoiler Implementare C++> <spoiler Implementare C++>
 <code cpp> <code cpp>
-// kInf este valoarea maximă - "​infinitul"​ nostru +// INF este valoarea maximă - "​infinitul"​ nostru 
-const unsigned long long kInf = std::​numeric_limits<​unsigned long long>::​max();​+const auto INF = std::​numeric_limits<​unsigned long long>::​max();​
  
 // T = O(n ^ 3)  // T = O(n ^ 3) 
Line 194: Line 182:
     // dp[i][j] = numărul MINIM înmulțiri scalare cu codare, poate fi calculat produsul     // dp[i][j] = numărul MINIM înmulțiri scalare cu codare, poate fi calculat produsul
     //            matriceal M_i * M_i+1 * ... * M_j     //            matriceal M_i * M_i+1 * ... * M_j
-    vector<​vector<​unsigned long long>> ​ dp(n + 1, vector<​unsigned long long> (n + 1, kInf));+    vector<​vector<​unsigned long long>> ​ dp(n + 1, vector<​unsigned long long> (n + 1, INF));
  
     // Cazul de bază 1: nu am ce înmulți ​     // Cazul de bază 1: nu am ce înmulți ​
Line 242: Line 230:
  
 <​note>​ <​note>​
-**ATENȚIE!** La PA, în general, vom folosi convenția $ expresie \ \%  \ kMod $, care va fi detaliată în capitolul următor din acest laborator. ​+**ATENȚIE!** La PA, în general, vom folosi convenția $ expresie \ \%  \ MOD $, care va fi detaliată în capitolul următor din acest laborator. ​
 </​note>​ </​note>​
  
Line 519: Line 507:
       * o înmulțire de matrice patrătică de dimensiune KMAX are $KMAX^3$ operații       * o înmulțire de matrice patrătică de dimensiune KMAX are $KMAX^3$ operații
     * această metodă este eficientă când $KMAX << n$ (KMAX este mult mai mic decât n)     * această metodă este eficientă când $KMAX << n$ (KMAX este mult mai mic decât n)
-  * ** complexitatea spațială **: $S = O(KMAX^3)$  +  * ** complexitatea spațială **: $S = O(KMAX^2)$  
-    * explicație  +**Observație!** În ultimele calcule nu am șters constanta KMAX, întrucât apare la puterea a 2-a! $KMAX = 1000$ implică $KMAX^= 10^6$, valoare care nu mai poate fi ignorată în practică ($KMAX^2$ poate fi comparabil cu n).
-      * este nevoie să stocăm câteva matrice +
-**Observație!** În ultimele calcule nu am șters constanta KMAX, întrucât apare la puterea a 3-a! $KMAX = 100$ implică $KMAX^= 10^6$, valoare care nu mai poate fi ignorată în practică ($KMAX^3$ poate fi comparabil cu n).+
  
 === Gardurile lui Gigel (optimizare) === === Gardurile lui Gigel (optimizare) ===
Line 531: Line 517:
 == Exponențiere rapidă == == Exponențiere rapidă ==
   * $ k = 4 $   * $ k = 4 $
-  * $S_4 = (dp[1], dp[2], dp[3], dp[4]) = (1, 1, 1, 4)$+  * $S_4 = (dp[1], dp[2], dp[3], dp[4]) = (1, 1, 1, 2)$
   * $S_i = (dp[i-3], dp[i-2], dp[i-1], dp[i])$   * $S_i = (dp[i-3], dp[i-2], dp[i-1], dp[i])$
   * Răspunsul se află efectuând operația $S_n = S_4 * C^{n - 4}$, unde C are următorul conținut:  ​   * Răspunsul se află efectuând operația $S_n = S_4 * C^{n - 4}$, unde C are următorul conținut:  ​
Line 629: Line 615:
  
 <spoiler Comparație solutii (studiu de caz pentru curioși)>​ <spoiler Comparație solutii (studiu de caz pentru curioși)>​
-În arhiva ** demo-lab04.zip ** găsiți o sursă completă în care se realizează:​+Pe git găsiți o sursă completă în care se realizează:​
   * o verificare a faptului că cele 2 implementări (** gardurile_lui_Gigel** și **garduri_rapide**) produc aceleași rezultate   * o verificare a faptului că cele 2 implementări (** gardurile_lui_Gigel** și **garduri_rapide**) produc aceleași rezultate
   * un benchmark în care cele 2 implementări sunt comparate   * un benchmark în care cele 2 implementări sunt comparate
-    * pe sistem uzual (laptop) s-au obținut următoarele rezulate:+    * pe un sistem uzual (laptop) s-au obținut următoarele rezulate:
 <code bash> <code bash>
 test case: varianta simplă test case: varianta simplă
Line 865: Line 851:
 ===== Referințe ===== ===== Referințe =====
  
-[0] Capitolul ​**Dynamic Programming** ​din **Introductions ​to Algorithms** de către T. H. Cormen, ​C. E. Leiserson, ​R. L. Rivest, C. Stein +[0] Chapter ​**Dynamic Programming**, “Introduction ​to Algorithms”, Thomas ​H. Cormen, ​Charles ​E. Leiserson, ​Ronald ​L. Rivest ​and Clifford ​Stein 
 + 
 [1] [[http://​infoarena.ro/​problema/​podm]] [1] [[http://​infoarena.ro/​problema/​podm]]
  
pa/laboratoare/laborator-04.1615799269.txt.gz · Last modified: 2021/03/15 11:07 by miruna_elena.banu
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