Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:11 [2023/09/21 21:33]
dmihai
aa:lab:11 [2025/01/23 14:09] (current)
dmihai
Line 1: Line 1:
-====== ​ADTs și inducție structurală ​====== +===== Analiza amortizata ​=====
-   +
-<note important>​Solutii:​ https://​docs.google.com/​document/​d/​17AOXQdvTY_8GuC5lGnqfvegCs6BQMOc-21wYoHQDMJQ/​edit?​usp=drivesdk</​note>​ +
-1. Definiți axiome pentru următorii operatori pe tipul ''​List'':​+
  
-  * ''​append''​ (concatenarea unei liste la o alta; ''​append(Cons(8,​ Cons(12, Empty)), Cons(3, Cons(6, Empty))) = Cons(8, Cons(12, Cons(3, Cons(6Empty))))''​) +Utilizați metoda agregăriimetoda contabilizării și metoda potențialelor pentru a găsi costul amortizat în situațiile prezentate mai jos.
-  * ''​reverse''​ (inversează elementele dintr-o listă)+
  
-2. Definiți axiome pentru următorii operatori pe tipul ''​BTree'':​+$ \DeclareMathOperator{\push}{push} \DeclareMathOperator{\pop}{pop} \DeclareMathOperator{\mpop}{mpop} \DeclareMathOperator{\key}{key} \DeclareMathOperator{\cost}{cost} $
  
-  * ''​mirror : BTree → BTree''​ (arborele oglindit pe verticală, i.e. pentru orice nod, copilul stâng devine copilul drept și vice-versa) +=== 1Stack ===
-  * ''​flatten : BTree → List''​ (lista cu toate elementele din arbore; observați că există mai multe ordini posibile)+
  
-3. Definiți axiome ​pentru ​următorii operatori pe tipul ''​Map'':​+Presupunând că avem o implementare a unei stive care permite operațiile $ \pop - O(1) $, $ \push - O(1) $ si $ \mpop(k) - O(k) $,  
 +demonstrați că pentru ​o secvență arbitrară $ S $ de $ n $ operatii, $ \cost(S) = O(n) $  
 +și că fiecare operație are un cost amortizat $ \cost(op) = O(1) $.
  
-  ​''​update ​Map × K × V → Map''​ (un Map cu o nouă asociere cheie:​element) +**Exemplu:** $ \push, \pop, \push, \push, \push, \mpop(2), \push, \pop, \push $
-  ​''​delete : Map × K → Map'' ​(șterge cheia și valoarea asociată)+
  
-4Demonstrați următoarele propoziții,​ folosind inducție structurală:​+=== 2Heap ===
  
-  * $math[\forall t \in \texttt{BTree}. size(t) = size(mirror(t))] +Un max-heap este un arbore binar aproape complet - toate nivelurilecu excepția ultimuluisunt completeiar ultimul este completat de la stânga la dreaptaFiecare două noduri AA și BBunde BB este fiu al lui AAsatisfac relația: 
-  * $math[\forall t \in \texttt{BTree}. size(t) = length(flatten(t))] +$ \key(B) \leq \key(A$
-  * $math[\forall l \in \texttt{List}. append(lEmpty) = l] +
-  * $math[\forall l_1l_2l_3 \in \texttt{List}append(l_1append(l_2l_3)) = append(append(l_1,​ l_2), l_3))] +
-  ​* ​$math[\forall l_1, l_2 \in \texttt{List}. length(append(l_1, l_2)) = length(append(l_2,​ l_1))] +
-  * $math[\forall l_1, l_2 \in \texttt{List}. reverse(append(l_1, l_2)) = append(reverse(l_2),​ reverse(l_1))].+
  
 +Un max-heap se poate stoca sub formă de array, unde $ a[i] $ are 
 +copiii $ a[2i] $ si $ a[2i+1] $.
 +
 +Adăugarea unui element constă în următorii pași:
 +  - adaugă un element în prima poziție liberă de pe ultimul nivelele
 +  - compară elementul adăugat cu părintele și interschimbă-i dacă e cazul
 +  - repetă pasul anterior până nodul respectă proprietatea în raport cu părintele lui sau a devenit rădăcina
 +
 +Arătați că fiecare inserare are un cost agregat de $ \cost(op) = O(\log n) $.
 +
 +
 +=== 3. Binary Counter ===
 +
 +Presupunând că avem un contor binar implementat folosind o listă de \( k \) biți, acesta permite doar operația \( increment \), care adaugă \( 1 \) la contor. Această operație are complexitate temporală \( O(k) \) în cel mai rău caz. Arătați însă că operația are un cost amortizat constant.
 +
 +<​note>​
 +Soluțiile acestui laborator se găsesc [[https://​ocw.cs.pub.ro/​ppcarte/​doku.php?​id=aa:​lab:​sol:​11|aici]]
 +</​note>​