# Lista 7 Zadanie 4. :::info Kacper Olejak (300814) ::: ## Treść zadania. ![](https://i.imgur.com/w8FBCTX.png) Zakładam, że procedury zostały przedstawione na wykładzie, stąd brak ich pseudokodu. ### `insert` : O(1) Dodajemy do struktury kopca nowy węzeł. Koszt tej operacji to $O(1)$. Zmiana potencjalu w tym przypadku $= 1$. Koszt zamortyzowany $:= 1 + O(1) = O(1)$ ### `deletemin` : O($d_{max}$) = O($log_{n}$) *d_max* - maksymalna liczba dzieci w jakimkolwiek węźle w kopcu Najpierw odcinamy minimalny korzeń i przenosimy dzieci do listy korzeni. Mamy maksymalnie $d_{max}$ dzieci do przyłączenia. Koszt tego to $O(d_{max})$ Niektóre z nich mogą stracić zaznaczenie. Zmiana potencjału w tym przypadku jest $<= d_{max}$. Stąd koszt zamortyzowany tej częśći to $O(d_{max})$. Teraz łączymy ze sobą drzewa o jednakowym stopniu. Załóżmy, że wykonujemy $t$ połączeń i dostajemy $d$ drzew. Mamy więc $t+d$ drzew od których zaczęlismy. Potencjał zmniejszył się o $t$. Stąd koszt zamortyzowany tej części to $O(d)$ i $d <= d_{max}$. Więc ostatecznie mamy koszt zamortyzowany = $O(d_{max})$. ### `decreasekey` : O(1) *Węzeł nazywamy **zaznaczonym** w momencie, gdy stracił drugiego syna.* Rozważmy przypadki: - węzęł nie musi się przemieścić; wtedy potencjał nie ulega zmianie, potrzebujemy $O(1)$ operacji elementarnych stąd koszt zamortyzowany = $O(1)$. - węzęł musi się przemieścić, nazwijmy go $A$, wykonujemy kroki: (i) Przenosimy go do listy korzeni w $O(1)$. Potencjał wzrośnie o $<= 1$: O $1$ jeśli $A$ nie był *zaznaczony*, o $-1$ jeśli był. (ii) Sprawdzamy zaznaczonych przodków $A$ i przenosimy ich do listy korzeni w $O(1)$. Potencjał wzrasta o $1$ (bo mamy nowy korzeń) i zmniejsza się o $2$, bo węzeł zostaje odznaczony. Stąd koszt zamortyzowany $= O(1) - 1 = 0$. (bez znaczenia na ilość zaznaczonych przodków). (iii) Przodek mógł zostać zaznaczony. Koszt tej operacji to $O(1)$ a potencjał wzrasta o $2$. Podsumowując zamortyzowany koszt mamy $O(1)$. ### `meld` : O(1) Łączymy dwa kopce, meld jest zdefiniowany leniwie. Zmiana potencjału w tym przypadku = 0. Koszt zamortyzowany $:= 0 + O(1)$ ### `findmin` : O(1) Nie zmieniamy nic w kopcu. Struktura pamięta wskaźnik na minimalny element. Koszt zamortyzowany $:= O(1)$