Rozumiem, że jest szybszy niż \ Theta (n \ log n) i wolniejszy niż \ Theta (n / \ log n) . Trudno mi zrozumieć, jak faktycznie porównać \ Theta (n \ log n) i \ Theta (n / \ log n) z \ Theta (n ^ f) gdzie 0 <f <1 .Θ ( n log n ) Θ ( n / log n ) Θ ( n log n ) Θ ( n / log n ) Θ ( n f ) 0 < f < 1
Na przykład, jak zdecydować vs. lub
W takich przypadkach chciałbym uzyskać wskazówki dotyczące postępowania. Dziękuję Ci.
jako dla dużej , dla i dużej .n1−k>logn n n/logn>nk k<1 n
źródło
W przypadku wielu algorytmów czasami zdarza się, że stałe są różne, powodując, że jeden lub drugi jest szybszy lub wolniejszy dla mniejszych rozmiarów danych i nie jest tak uporządkowany według złożoności algorytmu.
To powiedziawszy, jeśli weźmiemy pod uwagę bardzo duże rozmiary danych, tj. który w końcu wygrywa, to
O(n^f)
jest szybszy niżO(n/log n)
dla0 < f < 1
.Duża część złożoności algorytmu polega na określeniu, który algorytm jest ostatecznie szybszy, dlatego często wystarczająca jest wiedza, że
O(n^f)
jest on szybszy niżO(n/log n)
dla0 < f < 1
.Ogólna zasada jest taka, że mnożenie (lub dzielenie) przez
log n
będzie ostatecznie nieistotne w porównaniu do mnożenia (lub dzielenie) przezn^f
dowolnef > 0
.Aby to wyraźniej pokazać, zastanówmy się, co się stanie, gdy n wzrośnie.
Zauważ, że spada szybciej? To jest
n^f
kolumna.Nawet jeśli
f
był bliższy 1,n^f
kolumna zacznie się po prostu wolniej, ale gdy n podwaja się, szybkość zmiany mianownika przyspiesza, podczas gdy mianownikn/log n
kolumny wydaje się zmieniać ze stałą szybkością.Narysujmy konkretny przypadek na wykresie
Źródło: Wolfram Alpha
Wybrałem
O(n^k)
taki, któryk
jest dość bliski 1 (at0.9
). Wybrałem również stałe, aby początkowo byłyO(n^k)
wolniejsze. Zauważ jednak, że ostatecznie „wygrywa” i zajmuje mniej czasu niżO(n/log n)
.źródło
n^k
ostatecznie będzie szybszy, nawet jeśli wybrane zostaną stałe, tak że początkowo będzie on wolniejszy.Pomyśl o jak o . Na przykład . Wtedy łatwo jest porównać wzrostnf nn1−f n2/3=n/n1/3
Pamiętaj, że rośnie asymptotycznie wolniej niż jakikolwiek , dla każdego .logn nε ε>0
źródło
Porównując czasy działania, zawsze pomocne jest porównanie ich przy użyciu dużych wartości n. Dla mnie pomaga to budować intuicję, która funkcja jest wolniejsza
W twoim przypadku pomyśl o n = 10 ^ 10 i a = .5
Dlatego O (n ^ a) jest szybsze niż O (n / logn), kiedy 0 <a <1 Użyłem tylko jednej wartości, jednak możesz użyć wielu wartości, aby zbudować intuicję na temat funkcji
źródło
O(10^9)
, ale główna kwestia próbowania liczb w celu zbudowania intuicji jest słuszna.Niech oznacza „f rośnie asymptotycznie wolniej niż g”, to możesz zastosować następującą łatwą regułę dla polilogarytmiki? Funkcje:f≺g
Relacja porządku między krotkami jest leksykograficzna. Tj. i(2,10)<(3,5) (2,10)>(2,5)
Dotyczy twojego przykładu:
Można powiedzieć: moc n dominuje moc log, która dominuje moc log log.
Źródło: Concrete Mathematics, str. 441
źródło