Koszt zamortyzowany
Koszt zamortyzowany – miara złożoności obliczeniowej operacji na strukturze danych. Koszt zamortyzowany operacji jest średnim czasem wykonania przypadającym na jedną operację w pesymistycznym ciągu operacji.
Analiza kosztu zamortyzowanego zajmuje się oszacowaniem czasu niezbędnego do wykonania ciągu operacji, a nie pojedynczej operacji. Może się bowiem zdarzyć, że wykonanie całego ciągu jest mniej kosztowne niż wskazywałaby na to złożoność obliczeniowa jednej operacji, ponieważ tylko niektóre ciągi operacji są możliwe.
Koszt zamortyzowany różni się od kosztu średniego tym, że bierze pod uwagę ciąg operacji i nie jest metodą probabilistyczną. O ile koszt średni reprezentuje wartość oczekiwaną złożoności czasowej operacji, tak koszt zamortyzowany stanowi oszacowany dla pesymistycznego przypadku średniego koszt operacji w ciągu.
Metody analizy kosztu zamortyzowanego
edytujPoszczególne metody analizy kosztu zamortyzowanego poniżej będą zilustrowane analizą kosztu operacji na stosie z operacjami Push(x), która wkłada element na stos, i Multipop(k), która zdejmuje ze stosu elementów. Niech oznacza liczbę elementów na stosie. Pesymistyczna złożoność pojedynczej operacji Multipop może być ponieważ może nastąpić zdjęcie kolejno wszystkich elementów stosu. Analiza kosztu zamortyzowanego posłuży do lepszego oszacowania złożoności tej operacji jako części ciągów operacji na stosie.
Metoda kosztu sumarycznego
edytujJeżeli można oszacować sumaryczny koszt ciągu operacji na strukturze danych przez funkcję to mówimy, że zamortyzowany koszt jednej operacji wynosi W przeciwieństwie do dwóch pozostałych metod, jeżeli w ciągu znajdują się operacje kilku typów, przy tej metodzie zamortyzowany koszt jest przypisywany niezależnie od typu operacji.
- Przykład
- Ponieważ każdy element włożony na stos może zostać z niego zdjęty co najwyżej raz, liczba operacji zdjęcia elementu ze stosu w ramach Multipop na początkowo pustym stosie nie może przekroczyć liczby operacji Push, która z kolei nie przekracza Zatem sumaryczny koszt operacji na stosie jest a koszt zamortyzowany (przypadający na pojedynczą operację) wynosi
Metoda księgowania
edytujW metodzie księgowania koszt zamortyzowany jednej operacji jest równy sumie jej kosztu faktycznego oraz kredytu, który można przypisać lub odebrać elementom struktury. Operacje, których koszt zamortyzowany przewyższa koszt faktyczny dodają do elementów struktury kredyt, który jest potem wykorzystywany na „opłacenie” operacji, których koszt rzeczywisty jest większy.
- Przykład
- Każdemu elementowi stosu będziemy przyporządkowywać jeden „kredyt”, który będzie wykorzystywany na opłacenie operacji zdjęcia tego elementu ze stosu. Operacja Push będzie więc miała koszt zamortyzowany 2 (koszt rzeczywisty + jeden kredyt), a operacja Multipop będzie miała koszt zamortyzowany 0 (jej koszt rzeczywisty jest równoważony przez odbierany elementom stosu kredyt). Obie operacje mają więc koszt zamortyzowany
Metoda potencjału
edytujW analizie kosztu zamortyzowanego metodą potencjału przypisujemy strukturze danych w jej stanie po wykonaniu -tej operacji w ciągu liczbę rzeczywistą która reprezentuje potencjał struktury danych. Podobnie jak w przypadku kredytu, operacje mogą zwiększać lub zmniejszać potencjał struktury, a sam potencjał może być rozpatrywany jako suma kredytów we wszystkich elementach struktury, z tym, że nie jest on związany z żadnym jej elementem, a z całą strukturą. Koszt zamortyzowany -tej operacji na strukturze danych określamy następująco:
gdzie jest rzeczywistym jej kosztem. Sumaryczny koszt zamortyzowany ciągu operacji jest równy
- Przykład
- Definiujemy funkcję potencjału jako liczbę elementów na stosie. Koszt zamortyzowany operacji Push, wykonanej jako -ta operacja w ciągu, wynosi
- (potencjał rośnie o 1),
- natomiast jeżeli i-tą operacją jest Multipop(k), to jej koszt zamortyzowany wynosi
- gdzie
- ponieważ rzeczywisty koszt operacji wynosi a jednocześnie potencjał struktury danych spada o
- Obie operacje mają zatem złożoność
Zobacz też
edytujBibliografia
edytuj- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Wprowadzenie do algorytmów. Diks, K. et al (tłum). Wyd. 8. Warszawa: Wydawnictwa Naukowo-Techniczne, 2007, s. 411–420. ISBN 978-83-204-3328-9.