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/01/26 22:59]
alexandra.udrescu01
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>​ +Utilizați metoda agregării, metoda contabilizării și metoda potențialelor ​pentru ​a găsi costul amortizat în situațiile prezentate mai jos.
-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(6, Empty))))''​) +$ \DeclareMathOperator{\push}{push} \DeclareMathOperator{\pop}{pop} \DeclareMathOperator{\mpop}{mpop} \DeclareMathOperator{\key}{key} \DeclareMathOperator{\cost}{cost} $
-  * ''​reverse''​ (inversează elementele dintr-o listă)+
  
-2Definiți axiome pentru următorii operatori pe tipul ''​BTree'':​+=== 1Stack ===
  
-  * ''​mirror : BTree → BTree''​ (arborele oglindit pe verticală, i.e. pentru orice nod, copilul stâng devine copilul drept și vice-versa) +Presupunând că avem o implementare a unei stive care permite operațiile $ \pop - O(1) $$ \push O(1$ si $ \mpop(k) - O(k) $,  
-  * ''​flatten : BTree → List'' ​(lista cu toate elementele din arbore; observați că există mai multe ordini posibile)+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) $.
  
-3. Definiți axiome pentru următorii operatori pe tipul ''​Map''​:+**Exemplu:** $ \push, \pop, \push, \push, \push, \mpop(2), \push, \pop, \push $
  
-  * ''​update : Map × K × V → Map''​ (un Map cu o nouă asociere cheie:​element) +=== 2. Heap ===
-  * ''​delete : Map × K → Map''​ (șterge cheia și valoarea asociată)+
  
-4. Demonstrați următoarele propozițiifolosind inducție structurală:+Un max-heap este un arbore binar aproape complet - toate nivelurile, cu excepția ultimului, sunt complete, iar ultimul este completat de la stânga la dreapta. Fiecare două noduri AA și BBunde BB este fiu al lui AA, satisfac relația: 
 +$ \key(B) \leq \key(A) $
  
-  * $math[\forall t \in \texttt{BTree}. size(t) = size(mirror(t))] +Un max-heap se poate stoca sub formă de array, unde a[i] $ are  
-  * $math[\forall t \in \texttt{BTree}. size(t) = length(flatten(t))] +copiii ​a[2i] $ si a[2i+1] $.
-  ​* ​$math[\forall l \in \texttt{List}. append(l, Empty) = l] +
-  * $math[\forall l_1, l_2, l_3 \in \texttt{List}. append(l_1, append(l_2, l_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))].+
  
 +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>​