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/17 15:53]
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:+$ \DeclareMathOperator{\push}{push} \DeclareMathOperator{\pop}{pop} \DeclareMathOperator{\mpop}{mpop} \DeclareMathOperator{\key}{key} \DeclareMathOperator{\cost}{cost} $
  
-  * ''​size : BTree → Integer''​ (numărul total de valori din arbore) +=== 1Stack ===
-  * ''​height : BTree → Integer''​ (numărul de nivele al arborelui) +
-  * ''​mirror : BTree → BTree''​ (arborele oglindit pe verticală, i.e. pentru orice nod, copilul stâng devine copilul drept și vice-versa) +
-  * ''​flatten : BTree → List''​ (lista cu toate elementele din arbore; observați că există mai multe ordini posibile)+
  
-3. Definiți constructori ​pentru o coadă (tip ''​FIFO''​ce poate conține elemente de un tip arbitrar ''​E''​.+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) $.
  
-4. Definiți axiome pentru următorii operatori pe coadă:+**Exemplu:** $ \push, \pop, \push, \push, \push, \mpop(2), \push, \pop, \push $
  
-  * ''​deque : FIFO → FIFO''​ (coada fără primul element adăugat, i.e. cel mai vechi) +=== 2Heap ===
-  * ''​top : FIFO → E''​ (primul, cel mai vechi adăugat, element) +
-  * ''​length : FIFO → Integer''​ (numărul de elemente din coadă)+
  
-5. Definiți constructori pentru ​un ''​Map'' ​cu chei de tip ''​K'' ​și valori de tip ''​V''​.+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) $
  
-6. Definiți axiome pentru următorii operatori pe ''​Map'':​+Un max-heap se poate stoca sub formă de array, unde $ a[i] $ are  
 +copiii $ a[2i] $ si $ a[2i+1] $.
  
-  * ''​get : Map × K  → V''​ (elementul asociat cu o cheie dată) +Adăugarea unui element constă în următorii pași: 
-  ​* ''​update : Map × K × V → Map''​ (un Map cu o nouă asociere cheie:element) +  ​- adaugă un element ​în prima poziție liberă de pe ultimul nivelele 
-  ​* ''​exists : Map × K → Bool''​ (verifică dacă cheia dată are o valoare asociată) +  ​- compară elementul adăugat cu părintele și interschimbă-i dacă e cazul 
-  ​* ''​delete : Map × K → Map''​ (șterge cheia și valoarea asociată)+  ​- 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>​