Zasoby, które znalazłem na temat złożoności czasowej, nie są jasne, kiedy można zignorować terminy w równaniu złożoności czasowej, w szczególności na przykładach innych niż wielomianowe.
Jest dla mnie jasne, że biorąc pod uwagę coś w formie n 2 + n + 1, ostatnie dwa terminy są nieistotne.
W szczególności, biorąc pod uwagę dwie kategorie, 2 n i n * (2 n ), czy druga jest w tej samej kolejności co pierwsza? Czy dodatkowe mnożenie tam ma znaczenie? Zwykle zasoby po prostu mówią, że x n ma charakter wykładniczy i rośnie znacznie szybciej ... a następnie iść dalej.
Rozumiem, dlaczego tak się nie stanie, ponieważ 2 n znacznie przewyższy n, ale ponieważ nie są one sumowane razem, będzie to miało duże znaczenie przy porównywaniu dwóch równań, w rzeczywistości różnica między nimi zawsze będzie czynnikiem n, co wydaje się co najmniej ważne.
n! = o((n+1)!)
rośnie asymptotycznie ściśle wolniej.Odpowiedzi:
Będziesz musiał przejść do formalnej definicji dużej litery O (
O
), aby odpowiedzieć na to pytanie.Definicja ta
f(x)
należy doO(g(x))
wtedy i tylko wtedy, gdy limit istnieje, tzn. Nie jest nieskończonością. W skrócie oznacza to, że istnieje stała , taka, że wartość nigdy nie jest większa niż .limsupx → ∞ (f(x)/g(x))
M
f(x)/g(x)
M
W przypadku twojego pytania pozwól i pozwól . Zatem jest to, co wciąż będzie rosło nieskończenie. Dlatego nie należy do .
f(n) = n ⋅ 2n
g(n) = 2n
f(n)/g(n)
n
f(n)
O(g(n))
źródło
O(f(x)/g(x))
; powiadomienie big-O jest skrótem dla zestawu funkcji, a nie pojedynczej funkcji, której wartość można ograniczyć. Myślę jednak, że to prawda, że możesz pokazać, żef(x) = O(g(x))
jeślilim(x->infinity) f(x)/g(x)
istnieje.lim sup
zamiastlim
.x
, a nie wszystkich wartościx
.Szybkim sposobem, aby przekonać się, że
n⋅2ⁿ
jest większy, jest zmiana zmiennej. Letm = 2ⁿ
. Następnien⋅2ⁿ = ( log₂m )⋅m
(biorąc logarytm podstawy 2 po obu stronachm = 2ⁿ
podarunkówn = log₂m
), możesz łatwo pokazać, żem log₂m
rośnie szybciej niżm
.źródło
lg
? Logarytm w bazie 2?lg
jest to notacja ISO dla logarytmu base-10, a nie użycie agnostyczne bazowe najczęściej używane podczas omawiania asymptotycznych czasów pracy. Zobacz en.wikipedia.org/wiki/Logarithm#Particular_basesZgadzam się, że tego
n⋅2ⁿ
nie maO(2ⁿ)
, ale pomyślałem, że powinno to być bardziej wyraźne, ponieważ maksymalne użycie limitu nie zawsze obowiązuje.Według formalnej definicji Big-O:
f(n)
jest,O(g(n))
jeśli istnieją stałec > 0
in₀ ≥ 0
takie, któren ≥ n₀
mamy dla wszystkichf(n) ≤ c⋅g(n)
. Można łatwo wykazać, że nie istnieją takie stałe dlaf(n) = n⋅2ⁿ
ig(n) = 2ⁿ
. Można jednak pokazać, żeg(n)
jest wO(f(n))
.Innymi słowy,
n⋅2ⁿ
jest ograniczony przez2ⁿ
. To jest intuicyjne. Chociaż oba są wykładnicze, a zatem jest mało prawdopodobne, aby były stosowane w najbardziej praktycznych okolicznościach, nie możemy powiedzieć, że są tego samego rzędu, ponieważ z2ⁿ
konieczności rośnie wolniej niżn⋅2ⁿ
.źródło
f(n) = 2*2^n
Myślę, że miałeś na myślin*2^n
?Nie kłócę się z innymi odpowiedziami, które mówią, że
n⋅2ⁿ
rośnie szybciej niż2ⁿ
. Alen⋅2ⁿ
wzrost jest wciąż tylko wykładniczy.Kiedy mówimy o algorytmach, często mówimy, że złożoność czasu rośnie wykładniczo. Tak, uważamy za
2ⁿ
,3ⁿ
,eⁿ
,2.000001ⁿ
, lub naszychn⋅2ⁿ
być sama grupa złożoności z wykładniczy rośnie.Aby nadać temu nieco matematyczny sens, uważamy, że funkcja
f(x)
rośnie (nie szybciej niż) wykładniczo, jeśli istnieje taka stałac > 1
, że .f(x) = O(cx)
Ponieważ
n⋅2ⁿ
stałac
może być dowolną liczbą większą niż2
, weźmy3
. Następnie:n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿ
a to mniej niż1
jakikolwiekn
.Więc
2ⁿ
rośnie wolniej niżn⋅2ⁿ
, a ostatni z kolei rośnie wolniej niż2.000001ⁿ
. Ale wszystkie trzy rosną wykładniczo.źródło
Zapytałeś: „czy druga jest w tej samej kolejności co pierwsza? Czy dodatkowe mnożenie n ma znaczenie?” To są dwa różne pytania z dwiema różnymi odpowiedziami.
n 2 ^ n rośnie asymptotycznie szybciej niż 2 ^ n. Na to pytanie odpowiedziano.
Ale możesz zapytać "jeśli algorytm A zajmuje 2 ^ n nanosekund, a algorytm B zajmuje 2 ^ n nanosekund, co jest największym n, gdzie mogę znaleźć rozwiązanie w sekundę / minutę / godzinę / dzień / miesiąc / rok? I odpowiedzi to n = 29/35/41/46/51/54 vs. 25/30/36/40/45/49 Nie ma dużej różnicy w praktyce.
Rozmiar największego problemu, jaki można rozwiązać w czasie T, wynosi w obu przypadkach O (1n T).
źródło