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:

  1. adauga un element in prima pozitie libera de pe ultimul nivelele
  2. compara elementul adaugat cu parintele si interschimba-i daca e cazul
  3. 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.

Soluțiile acestui laborator se găsesc aici