(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 ci n0gdzie c*g(n) >= f(n)jest prawdziwe dla wszystkich nwię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 = 1każda wartość n0speł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ć 6ntak wielką Big Oh O(4)? Nie! (Ćwicz dla czytelnika, jeśli nie rozumie dlaczego)
Po drugie, czy możemy uprościć 4tak, 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 = 2od 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ą, n0gdzie powyższe równanie jest prawdziwe dla wszystkich nwię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 = 2sprawia, że powyższa prawda jest prawdą, wiemy o tym g(n)=6nlub O(6n)jest to potencjalna notacja Big Oh f(n).
Czy możemy uprościć 6tak, aby Big Oh był O(n)? Tak! W takim przypadku g(n) = n:
c*g(n) >= f(n)
c*n >= 6n + 4
Wybierzmy, c = 7ponieważ lewa zwiększy się szybciej niż prawa.
7*n >= 6n + 4
Widzimy, że powyższe będzie prawdziwe dla wszystkich nwię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!!!