Analiza amortizata
Utilizati aggregate method, accounting method si potential method pentru a gasi costul amortizat pentru situatiile prezentate mai jos.
$ \DeclareMathOperator{\push}{push} \DeclareMathOperator{\pop}{pop} \DeclareMathOperator{\mpop}{mpop} \DeclareMathOperator{\key}{key} \DeclareMathOperator{\cost}{cost} $
1. Stack
Presupunand ca avem o implementare a unei stive care permite operatiile $ \pop - O(1) $, $ \push - O(1) $ si $ \mpop(k) - O(k) $, demonstrati ca pentru o secventa arbitrara $ S $ de $ n $ operatii, $ \cost(S) = O(n) $ si ca fiecare operatie are un cost amortizat $ \cost(op) = O(1) $.
Exemplu: $ \push, \pop, \push, \push, \push, \mpop(2), \push, \pop, \push $
2. Heap
Un max-heap e un arbore binar aproape complet - toate nivelele cu exceptia ultimului sunt complete, iar ultimul este completat de la stanga la dreapta. Fiecare 2 noduri A si B unde B este fiu al lui A satisfac relatia: $ \key(B) \leq \key(A) $
Un max-heap se poate stoca sub forma de array, unde $ a[i] $ are copiii $ a[2i] $ si $ a[2i+1] $.
Adaugarea unui element presupune:
- adauga un element in prima pozitie libera de pe ultimul nivelele
- compara elementul adaugat cu parintele si interschimba-i daca e cazul
- repeta pasul anterior pana nodul respecta proprietatea in raport cu parintele lui sau a devenit radacina
Aratati ca fiecare inserare are un cost agregat $ \cost(op) = O(\log n) $.
3. Binary Counter
Presupunand ca avem un contor binar implementat folosind o lista de $ k $ biti, el permite doar operatia $ increment $ care adauga $ 1 $ la contor. Aceasta operatie are complexitate temporala O(k) in cel mai rau caz. Aratati insa ca operatia are un cost amortizat constant.