Differences
This shows you the differences between two versions of the page.
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ă) | + | |
- | 2. Definiți axiome pentru următorii operatori pe tipul ''BTree'': | + | === 1. Stack === |
- | * ''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ții, folosind 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 BB, unde 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> | ||