Załóżmy, że mam na przykład listę funkcji
Jak sortować je asymptotycznie, tj. Według relacji zdefiniowanej przez
,
zakładając, że rzeczywiście są one porównywalne parami (patrz także tutaj )? Używanie definicji wydaje się niewygodne i często trudno jest udowodnić istnienie odpowiednich stałych i .
Chodzi o miary złożoności, dlatego interesuje nas zachowanie asymptotyczne, ponieważ , i zakładamy, że wszystkie funkcje przyjmują tylko wartości nieujemne ( ).
Odpowiedzi:
Jeśli potrzebujesz ścisłego dowodu, często przydatny jest następujący lemat. bardziej przydatne niż definicje.
Dzięki temu powinieneś być w stanie zamówić większość funkcji pojawiających się w analizie algorytmów¹. Jako ćwiczenie udowodnij to!
Oczywiście musisz być w stanie odpowiednio obliczyć limity. Oto kilka przydatnych sztuczek pozwalających rozbić skomplikowane funkcje na podstawowe:
Mówiąc bardziej ogólnie: jeśli masz wypukłą, ciągle różnicowalną i ściśle zwiększającą się funkcję , abyś mógł ponownie zapisać swój iloraz jakoh
,fa( n )sol( n )= h ( f∗( n ) )h ( g∗( n ) )
za pomocą isol∗∈ Ω ( 1 )
,limn→∞f∗(n)g∗(n)=∞
następnie
.limn→∞f(n)g(n)=∞
Zobacz tutaj dokładny dowód tej reguły (w języku niemieckim).
Zastanów się nad kontynuacją swoich funkcji nad rzeczywistością. Możesz teraz użyć reguły L'Hôpital ; uważaj na jego warunki²!
Kiedy wyskakują silnie, użyj wzoru Stirlinga :
Przydatne jest również utrzymanie puli podstawowych relacji, które udowodnisz raz i których często używasz, takich jak:
logarytmy rosną wolniej niż wielomiany, tj
dla wszystkich α , β > 0 .(logn)α∈o(nβ) α,β>0
kolejność wielomianów:
dla wszystkichα<β.nα∈o(nβ) α<β
wielomiany rosną wolniej niż wykładnicze:
dla wszystkichαic>1.nα∈o(cn) α c>1
Może się zdarzyć, że powyższy lemat nie ma zastosowania, ponieważ limit nie istnieje (np. Gdy funkcje oscylują). W takim przypadku weź pod uwagę następującą charakterystykę klas Landaua, stosując limonki lepsze / gorsze :
Sprawdź tu i tutaj, jeśli moja notacja mnie myli.
¹ Nota bene: Mój kolega napisał funkcję Mathematica, która robi to z powodzeniem dla wielu funkcji, więc lemat naprawdę redukuje zadanie do obliczeń mechanicznych.
² Zobacz także tutaj .
źródło
Limit[f[n]/g[n], n -> Infinity]
i rozróżnij wielkość liter.Kolejna wskazówka: czasami zastosowanie funkcji monotonicznej (takiej jak log lub exp) do funkcji sprawia, że wszystko jest wyraźniejsze.
źródło
Skiena przedstawia posortowaną listę relacji dominacji między najczęstszymi funkcjami w swojej książce, The Algorytm Design Manual:
Tutajα(n) oznacza odwrotną funkcję Ackermanna .
źródło
Wskazówka: narysuj wykresy tych funkcji za pomocą czegoś takiego jak Wolfram Alpha, aby poczuć, jak się rozwijają. Zauważ, że nie jest to zbyt precyzyjne, ale jeśli spróbujesz tego dla wystarczająco dużych liczb, powinieneś zobaczyć porównawcze wzorce wzrostu. To oczywiście nie zastąpi dowodu.
Np. Spróbuj: dziennik wydruku (log (n)) od 1 do 10000, aby zobaczyć pojedynczy wykres lub dziennik wydruku (log (n)) i dziennik wydruku (n) od 1 do 10000, aby zobaczyć porównanie.
źródło
Proponuję postępować zgodnie z definicjami różnych zapisów. Rozpocznij od dowolnej pary wyrażeń i określ ich kolejność, jak opisano poniżej. Następnie dla każdego dodatkowego elementu znajdź jego pozycję na posortowanej liście za pomocą wyszukiwania binarnego i porównania, jak poniżej. Na przykład posortujmy i 2 n , pierwsze dwie funkcje n, aby rozpocząć listę.nloglogn 2n
Itp.
źródło
Oto lista z Wikipedii , im niższa w tabeli, tym większa klasa złożoności;N.a m eStały czasCzas odwrotny AckermannaIterowany czas logarytmicznyLogarytmicznaCzas logarytmicznyCzas polilogarytmicznyMoc ułamkowaCzas liniowyCzas „n log star n”Czas quasi-liniowyCzas kwadratowyCzas sześciennyCzas wielomianowyCzas quasi-wielomianowyCzas podwykładniczy (pierwsza definicja)Czas podwykładniczy (druga definicja)Czas wykładniczy (z wykładnikiem liniowym)Czas wykładniczyCzas czynnikowyCzas trwaniaO (1)O (a(n))O ( log∗n )O (nlogn )O ( logn )p o l y( logn )O ( ndo) , gdzie 0 < c < 1O (n)O (n log∗n )O ( n logn )O ( n2))O ( n3))p o ly( n ) = 2O ( logn )2)O (pol y(logn ) )O ( 2nϵ) , ϵ > 02)o (n)2)O (n)2)p o ly( n )O (n!)
Uwaga :p o l y( x ) = xO (1)
źródło