Analiza asymptotyczna
Termin ten odnosi się do analizy wydajności algorytmu przy założeniu, że dane, na których działa algorytm (dane wejściowe ), są, mówiąc laikiem, „na tyle duże, że powiększenie ich nie zmieni wniosku”. Chociaż dokładna wielkość wkładu nie musi być określona (musimy tylko górną granicę), dane postawiła sobie ma zostać określona.
Zwróć uwagę, że do tej pory rozmawialiśmy tylko o metodzie analizy; nie sprecyzowaliśmy, jaką dokładnie wielkość analizujemy (złożoność czasowa? złożoność przestrzeni?), ani nie określiliśmy, która miara nas interesuje (najgorszy przypadek? najlepszy przypadek? średnia?).
W praktyce termin analiza asymptotyczna powszechnie odnosi się do górnej granicy złożoności czasowej algorytmu, tj. Wydajności w najgorszym przypadku mierzonej całkowitym czasem wykonywania, który jest reprezentowany przez notację duże-Oh (np. Algorytm sortowania O(nlogn)
).
Analiza zamortyzowana
Termin ten odnosi się do analizy wydajności algorytmu opartej na określonej sekwencji operacji, która jest ukierunkowana na najgorszy scenariusz - to znaczy, zamortyzowana analiza oznacza, że metryka jest wydajnością w najgorszym przypadku (chociaż nadal nie mówi, która wielkość jest mierzona ). Aby wykonać tę analizę, musimy określić rozmiar danych wejściowych, ale nie musimy przyjmować żadnych założeń co do jego formy.
Mówiąc prościej, zamortyzowana analiza polega na wybieraniu dowolnego rozmiaru danych wejściowych, a następnie „przegrywaniu” algorytmu. Zawsze, gdy trzeba podjąć decyzję zależną od wkładu, obrana jest najgorsza ścieżka¹. Po zakończeniu działania algorytmu dzielimy obliczoną złożoność przez rozmiar danych wejściowych, aby otrzymać ostateczny wynik.
¹ Uwaga: Dokładniej mówiąc, najgorsza ścieżka, jaka jest teoretycznie możliwa . Jeśli masz wektor, który dynamicznie podwaja swój rozmiar za każdym razem, gdy jego pojemność się wyczerpie, „najgorszy przypadek” nie oznacza, że będzie on musiał podwoić się po każdym wstawieniu, ponieważ wstawienia są przetwarzane jako sekwencja. Możemy (a nawet musimy) używać znanego stanu, aby matematycznie wyeliminować jak najwięcej „jeszcze gorszych” przypadków, nawet jeśli dane wejściowe pozostają nieznane.
Najważniejsza różnica
Krytyczna różnica między analizą asymptotyczną i amortyzowaną polega na tym, że pierwsza jest zależna od samego wejścia, podczas gdy druga jest zależna od sekwencji operacji, które wykona algorytm.
W związku z tym:
- Analiza asymptotyczna pozwala stwierdzić, że złożoność algorytmu, gdy otrzyma najlepsze / najgorsze / średnie dane wejściowe o wielkości zbliżającej się do N, jest ograniczona przez jakąś funkcję F (N) - gdzie N jest zmienną
- analiza zamortyzowana pozwala stwierdzić, że złożoność algorytmu, gdy otrzyma dane wejściowe o nieznanej charakterystyce, ale znanej wielkości N, nie jest gorsza niż wartość funkcji F (N) - gdzie N jest znaną wartością