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 [2022/01/16 13:18]
dmihai
aa:lab:11 [2025/01/23 14:09] (current)
dmihai
Line 1: Line 1:
-====== Abstract Datatypes ======+===== Analiza amortizata ​=====
  
-1. Definiți constructori ​pentru ​un arbore binar ce poate conține ca elemente numere întregi. +Utilizați metoda agregării, metoda contabilizării și metoda potențialelor ​pentru ​a găsi costul amortizat în situațiile prezentate mai jos.
-2. Definiți axiome pentru următorii operatori:+
  
-  * ''​size : BTree → Integer''​ +$ \DeclareMathOperator{\push}{push} \DeclareMathOperator{\pop}{pop} \DeclareMathOperator{\mpop}{mpop} \DeclareMathOperator{\key}{key} \DeclareMathOperator{\cost}{cost} $
-  * ''​height : BTree → Integer''​ +
-  * ''​mirror : BTree → Tree''​ +
-  * ''​flatten : BTree → List''​+
  
-3Definiți constructori pentru o coadă (tip ''​LIFO''​) ce poate conține elemente de un tip arbitrar ''​E''​. +=== 1Stack ===
-4. Definiți axiome pentru următorii operatori pe coadă:+
  
-  * ''​deque : LIFO → LIFO''​ +Presupunând că avem o implementare a unei stive care permite operațiile $ \pop - O(1) $, $ \push - O(1) $ si $ \mpop(k) - O(k) $,  
-  * ''​top : LIFO → E''​ +demonstrați că pentru o secvență arbitrară $ S $ de $ n $ operatii, $ \cost(S) = O(n) $  
-  * ''​length : LIFTO → Integer''​+și că fiecare operație are un cost amortizat $ \cost(op) = O(1) $.
  
-5. Definiți constructori pentru un ''​Map''​ cu chei de tip ''​K''​ și valori de tip ''​V''​. +**Exemplu:** $ \push, \pop, \push, \push, \push, \mpop(2), \push, \pop, \push $
-6. Definiți axiome pentru următorii operatori pe ''​Map''​:+
  
-  * ''​get : Map × K  → V''​ +=== 2. Heap ===
-  * ''​update : Map × K × V → Map''​ +
-  * ''​exists : Map × K → Bool''​ +
-  * ''​delete : Map × K → Map''​+
  
 +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 BB, unde BB este fiu al lui AA, satisfac relația:
 +$ \key(B) \leq \key(A) $
  
 +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>​