(ponieważ jest to dłuższa odpowiedź, przeczytaj pogrubienie w celu podsumowania )
Weźmy twój przykład i przejdźmy go krok po kroku, rozumiejąc cel tego, co robimy. Zaczynamy od twojej funkcji i celu znalezienia jej notacji Big Oh:
f(n) = 6n+4
Po pierwsze, niech O(g(n))
będzie zapis Big Oh, którego szukamy f(n)
. Z definicji Big Oh, musimy znaleźć uproszczone, w g(n)
którym istnieją pewne stałe c
i n0
gdzie c*g(n) >= f(n)
jest prawdziwe dla wszystkich n
większych niż n0
.
Najpierw wybierzmy g(n) = 6n + 4
(który dałby O(6n+4)
w Big Oh). W tym przypadku widzimy, że c = 1
każda wartość n0
spełni wymagania matematyczne z naszej definicji Big Oh, ponieważ g(n)
zawsze jest równa f(n)
:
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
W tym momencie spełniliśmy wymagania matematyczne. Gdybyśmy się zatrzymaliO(6n+4)
, jasne jest, że nie jest to bardziej pomocne niż pisanie f(n)
, więc pominęłoby to prawdziwy cel notacji Big Oh: zrozumieć ogólną złożoność czasową algorytmu! Przejdźmy zatem do następnego kroku: uproszczenia.
Po pierwsze, czy możemy uprościć 6n
tak wielką Big Oh O(4)
? Nie! (Ćwicz dla czytelnika, jeśli nie rozumie dlaczego)
Po drugie, czy możemy uprościć 4
tak, aby Big Oh był O(6n)
? Tak! W takim przypadku g(n) = 6n
:
c*g(n) >= f(n)
c*6n >= 6n + 4
W tym momencie wybierzmy c = 2
od tego czasu lewa strona będzie rosła szybciej (o 12) niż prawa strona (o 6) dla każdego przyrostu n
.
2*6n >= 6n + 4
Teraz musimy znaleźć dodatnią, n0
gdzie powyższe równanie jest prawdziwe dla wszystkich n
większych niż ta wartość. Ponieważ wiemy już, że lewa strona rośnie szybciej niż prawa, wszystko, co musimy zrobić, to znaleźć jedno pozytywne rozwiązanie. Zatem, ponieważ n0 = 2
sprawia, że powyższa prawda jest prawdą, wiemy o tym g(n)=6n
lub O(6n)
jest to potencjalna notacja Big Oh f(n)
.
Czy możemy uprościć 6
tak, aby Big Oh był O(n)
? Tak! W takim przypadku g(n) = n
:
c*g(n) >= f(n)
c*n >= 6n + 4
Wybierzmy, c = 7
ponieważ lewa zwiększy się szybciej niż prawa.
7*n >= 6n + 4
Widzimy, że powyższe będzie prawdziwe dla wszystkich n
większych lub równych n0 = 4
. Zatem O(n)
potencjalna notacja Big Oh f(n)
. Czy możemy g(n)
już uprościć ? Nie!
Wreszcie stwierdziliśmy, że najprostszą notacją Big Oh f(n)
jest O(n)
. Dlaczego przez to wszystko przeszliśmy? Ponieważ teraz wiemy, że f(n)
jest liniowy , ponieważ jego notacja Big Oh ma liniową złożoność O(n)
. Zaletą jest to, że teraz możemy porównać złożoność czasową z f(n)
innymi algorytmami! Na przykład, teraz wiemy, że f(n)
jest porównywalny do czasu złożoności funkcji h(n) = 123n + 72
, i(n) = n
, j(n) = .0002n + 1234
, etc; ponieważ stosując ten sam proces uproszczenia opisany powyżej, wszystkie mają liniową złożoność czasową wynoszącą O(n)
.
Słodkie!!!