If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Funkcje w notacji asymptotycznej

Kiedy używamy notacji asymptotycznej w celu zobrazowania tempa wzrostu czasu wykonywania algorytmu, wyrażanego wielkością zmiennej wejściowej n, warto mieć kilka rzeczy na uwadze.
Zacznijmy od czegoś prostego. Załóżmy, że algorytm potrzebuje stałą ilość czasu, niezależnie od wielkości zmiennej wejściowej. Na przykład, jeżeli otrzymałeś tablicę, która jest już posortowana w kolejności rosnącej i trzeba by znaleźć minimalny element, zajęłoby to stałą ilość czasu, ponieważ minimalny element musi być pod indeksem 0. Z uwagi na to, że chcemy wykorzystać funkcję zmiennej n w notacji asymptotycznej, można powiedzieć, że ten algorytm działa w \Theta, left parenthesis, n, start superscript, 0, end superscript, right parenthesis czasie. Dlaczego? Ponieważ n, start superscript, 0, end superscript, equals, 1 i czas działania algorytmu mieści się w zakresie stałej 1. W praktyce, nie piszemy \Theta, left parenthesis, n, start superscript, 0, end superscript, right parenthesis, ale \Theta, left parenthesis, 1, right parenthesis.
Załóżmy, że czas, potrzebny na wykonanie algorytmu można szacować jako \Theta, left parenthesis, log, start base, 10, end base, n, right parenthesis. Możemy również powiedzieć, że czas był \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis. Jak długo podstawa logarytmu jest stałą, nie ma znaczenia jakiej podstawy użyjemy w notacji asymptotycznej. Dlaczego nie? Ponieważ istnieje następujący wzór matematyczny:
log, start base, a, end base, n, equals, start fraction, log, start base, b, end base, n, divided by, log, start base, b, end base, a, end fraction
dla wszystkich liczb dodatnich a,b oraz n. W związku z tym, jeżeli a i b są stałymi, to log, start base, a, end base, n i log, start base, b, end base, n różnią się tylko współczynnikiem log, start base, b, end base, a, i jest to wspóczynnik, który możemy pominąć w notacji asymptotycznej.
Możemy zatem powiedzieć, że w najgorszym wypadku, czas wykonywania algorytmu wyszukiwania binarnego to \Theta, left parenthesis, log, start base, a, end base, n, right parenthesis dla każdej dodatniej stałej a. Dlaczego? Liczba prób to co najwyżej log, start base, 2, end base, n, plus, 1, generowanie i testowanie każdej próby zabiera stałą ilość czasu, i definiowanie oraz zwracanie zajmuje również stałą ilość czasu. W praktyce piszemy, że wyszukiwanie binarne zajmuje \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis czasu ponieważ informatycy lubią myśleć w kategoriach potęgi z 2.
Dla funkcji, których często używamy podczas analizy algorytmów używając notacji asymptotycznej istnieje pewien porządek. Jeżeli a oraz b są stałe i a, is less than, b, wtedy czas wykonania wynosi \Theta, left parenthesis, n, start superscript, a, end superscript, right parenthesis rośnie wolniej niż czas wykonania \Theta, left parenthesis, n, start superscript, b, end superscript, right parenthesis. Na przykład, czas wykonania \Theta, left parenthesis, n, right parenthesis, który wynosi \Theta, left parenthesis, n, start superscript, 1, end superscript, right parenthesis, rośnie wolniej niż czas wykonania \Theta, left parenthesis, n, squared, right parenthesis. Wykładniki nie muszą nawet być liczbami całkowitymi. Na przykład, czas wykonania \Theta, left parenthesis, n, squared, right parenthesis rośnie wolniej niż czas wykonania \Theta, left parenthesis, n, squared, square root of, n, end square root, right parenthesis, który wynosi \Theta, left parenthesis, n, start superscript, 2, point, 5, end superscript, right parenthesis.
Na poniższym wykresie porównano tempo wzrostu n,n, squared, oraz n, start superscript, 2, comma, 5, end superscript:
Wykres porównujący tempo wzrostu n, n do kwadratu, oraz n do potęgi 2,5
Logarytmy rosną wolniej niż wielomiany. Oznacza to, że \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis rośnie wolniej niż \Theta, left parenthesis, n, start superscript, a, end superscript, right parenthesis dla każdej dodatniej stałej a. Ale ponieważ wartość log, start base, 2, end base, n zwiększa się ze wzrostem n, \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis rośnie szybciej niż \Theta, left parenthesis, 1, right parenthesis.
Na poniższym wykresie porównano tempo wzrostu 1,n, oraz log, start base, 2, end base, n:
Porównanie funkcji stałej równej 1, logarytmu o podstawie 2 z n, oraz n
Oto lista funkcji w notacji asymptotycznej, z którymi mamy często do czynienia podczas analizowania algorytmów, w kolejności od najwolniej do najszybciej rosnących.
  1. \Theta, left parenthesis, 1, right parenthesis
  2. \Theta, left parenthesis, log, start base, 2, end base, n, right parenthesis
  3. \Theta, left parenthesis, n, right parenthesis
  4. \Theta, left parenthesis, n, log, start base, 2, end base, n, right parenthesis
  5. \Theta, left parenthesis, n, squared, right parenthesis
  6. \Theta, left parenthesis, n, squared, log, start base, 2, end base, n, right parenthesis
  7. \Theta, left parenthesis, n, cubed, right parenthesis
  8. \Theta, left parenthesis, 2, start superscript, n, end superscript, right parenthesis
  9. \Theta, left parenthesis, n, !, right parenthesis
Należy zauważyć, że funkcja wykładnicza a, start superscript, n, end superscript, gdzie a, is greater than, 1, rośnie szybciej niż jakakolwiek funkcja wielomianowa n, start superscript, b, end superscript, gdzie b jest stałą.
Ta lista nie jest oczywiście pełna, jest wiele funkcji, które opisują złożoności obliczeniowe czy czasy wykonania różne od tych powyżej. Zapewne napotkasz niektóre z nich w swojej podróży przez krainę informatyki.

Materiał powstał we współpracy profesorów z Dartmouth Computer Science Thomasa Cormena i Devina Balkcoma oraz zespołu nauczycieli informatyki Khan Academy. Materiał jest udostępniony na licencji CC-BY-NC-SA.