Analiza amortizata
Utilizați metoda agregării, metoda contabilizării și metoda potențialelor pentru a găsi costul amortizat în situațiile prezentate mai jos.
$ \DeclareMathOperator{\push}{push} \DeclareMathOperator{\pop}{pop} \DeclareMathOperator{\mpop}{mpop} \DeclareMathOperator{\key}{key} \DeclareMathOperator{\cost}{cost} $
1. Stack
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) $.
Exemplu: $ \push, \pop, \push, \push, \push, \mpop(2), \push, \pop, \push $
2. Heap
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.