Notacja dużego O

Przykład notacji Big O: as istnieje (np. ) i (np. ) takie, że ilekroć .

Notacja dużego O to notacja matematyczna opisująca ograniczające zachowanie funkcji , gdy argument dąży do określonej wartości lub nieskończoności. Big O jest członkiem rodziny notacji wymyślonych przez Paula Bachmanna , Edmunda Landaua i innych, zwanych wspólnie notacją Bachmanna-Landaua lub notacją asymptotyczną . Litera O została wybrana przez Bachmanna jako Ordnung , czyli kolejność zbliżania się .

W informatyce notacja dużego O jest używana do klasyfikowania algorytmów według tego, jak rośnie ich czas działania lub zapotrzebowanie na miejsce wraz ze wzrostem rozmiaru danych wejściowych. W analitycznej teorii liczb notacja dużego O jest często używana do wyrażenia granicy różnicy między funkcją arytmetyczną a lepiej rozumianym przybliżeniem; słynnym przykładem takiej różnicy jest reszta z twierdzenia o liczbach pierwszych . Notacja Big O jest również używana w wielu innych dziedzinach, aby zapewnić podobne szacunki.

Notacja Big O charakteryzuje funkcje według ich tempa wzrostu: różne funkcje o tej samej asymptotycznej szybkości wzrostu można przedstawić za pomocą tej samej notacji O. Litera O jest używana, ponieważ tempo wzrostu funkcji jest również określane jako rząd funkcji . Opis funkcji za pomocą notacji dużego O zwykle zapewnia jedynie górną granicę tempa wzrostu funkcji.

Z notacją dużego O jest powiązanych kilka powiązanych notacji, wykorzystujących symbole o , Ω, ω i Θ do opisania innych rodzajów granic asymptotycznych stóp wzrostu.

Definicja formalna

Niech funkcja do oszacowania będzie rzeczywistych lub zespolonych i niech porównawcza będzie funkcją o wartościach rzeczywistych Niech obie funkcje zostaną zdefiniowane na pewnym nieograniczonym podzbiorze dodatnich liczb rzeczywistych i będą ściśle wartości . Jeden pisze

jeśli wartość bezwzględna dodatnią stałą wielokrotnością dla wartości } Oznacza to, że jeśli istnieje dodatnia liczba rzeczywista, i liczbę rzeczywistą taką, że

W wielu kontekstach założenie, że interesuje nas stopa wzrostu, gdy zmienna dąży do nieskończoności, pozostaje niewypowiedziane i pisze się prościej, że

opisania zachowania w pobliżu jakiejś liczby rzeczywistej ) mówimy za

istnieją liczby dodatnie , wszystkich z ,

Ponieważ dla takich wartości , obie te definicje można ujednolicić za pomocą granicy przełożonej , }

Jeśli

I w obu tych definicjach ( niezależnie od tego, czy ) jest skupienia domen i ja . e , w każdym sąsiedztwie być nieskończenie wiele punktów wspólnych. Ponadto, wskazano w artykule o granicy niższej i granicy wyższej , (przynajmniej na osi liczb rzeczywistych zawsze istnieje.

W informatyce powszechna jest nieco bardziej restrykcyjna definicja: muszą być funkcjami od pewnego nieograniczonego podzbioru dodatnich liczb całkowitych do nieujemnych liczb rzeczywistych; wtedy jeśli istnieją dodatnie liczby całkowite i takie, że dla wszystkich .

Przykład

W typowym użyciu notacja O jest asymptotyczna, to znaczy odnosi się do bardzo dużego x . W tej sytuacji wkład terminów, które rosną „najszybciej”, w końcu sprawi, że pozostałe staną się nieistotne. W rezultacie można zastosować następujące zasady upraszczające:

  • Jeśli f ( x ) jest sumą kilku wyrazów, to jeśli jest jeden o największym tempie wzrostu, to można go zachować, a wszystkie inne pominąć.
  • Jeśli f ( x ) jest iloczynem kilku czynników, to wszelkie stałe (czynniki w iloczynie, które nie zależą od x ) można pominąć.

Na przykład, niech f ( x ) = 6 x 4 − 2 x 3 + 5 i załóżmy, że chcemy uprościć tę funkcję, używając notacji O , aby opisać jej tempo wzrostu, gdy x dąży do nieskończoności. Ta funkcja jest sumą trzech wyrazów: 6 x 4 , −2 x 3 i 5 . Spośród tych trzech wyrazów, ten o najwyższym tempie wzrostu to ten, który ma największy wykładnik w funkcji x , czyli 6 x 4 . Teraz można zastosować drugą regułę: 6 x 4 to iloczyn 6 i x 4 , w którym pierwszy czynnik nie zależy od x . Pominięcie tego czynnika daje uproszczoną postać x 4 . Zatem mówimy, że f ( x ) jest „dużym O” z x 4 . Matematycznie możemy zapisać f ( x ) = O ( x 4 ) . Rachunek ten można potwierdzić za pomocą formalnej definicji: niech f ( x ) = 6 x 4 − 2 x 3 + 5 oraz g ( x ) = x 4 . Stosując formalną definicję z powyższego, stwierdzenie, że f ( x ) = O ( x 4 ) jest równoważne jego rozwinięciu,

dla pewnego odpowiedniego wyboru x 0 i M oraz dla wszystkich x > x 0 . Aby to udowodnić, niech 0 x = 1 i M = 13 . Wtedy dla wszystkich x > x 0 :
Więc

Stosowanie

Notacja Big O ma dwa główne obszary zastosowań:

W obu zastosowaniach funkcja g ( x ) pojawiająca się w O (·) jest zwykle wybierana tak, aby była tak prosta, jak to tylko możliwe, z pominięciem stałych czynników i wyrażeń niższego rzędu.

Istnieją dwa formalnie zbliżone, ale zauważalnie różne zastosowania tej notacji: [ potrzebne źródło ]

To rozróżnienie ma jednak zastosowanie tylko w zastosowaniu, a nie w zasadzie - formalna definicja „wielkiego O” jest taka sama dla obu przypadków, tylko z różnymi ograniczeniami dla argumentu funkcji. [ oryginalne badania? ]

Nieskończone asymptotyki

Wykresy funkcji powszechnie używanych w analizie algorytmów, przedstawiające liczbę operacji N w funkcji wielkości wejściowej n dla każdej funkcji

Notacja dużego O jest przydatna podczas analizowania algorytmów pod kątem wydajności. Na przykład czas (lub liczba kroków) potrzebny do rozwiązania problemu o rozmiarze n może wynosić T ( n ) = 4 n 2 − 2 n + 2 . W n rośnie, wyraz n 2 zaczyna dominować, więc wszystkie inne wyrazy można pominąć — na przykład, gdy n = 500 , wyraz 4 n 2 jest 1000 razy większy niż wyraz 2 n . Zignorowanie tego drugiego miałoby znikomy wpływ na wartość wyrażenia dla większości celów. Ponadto współczynniki stają się nieistotne, jeśli porównamy je z jakimkolwiek innym rzędem wyrażeń, takim jak wyrażenie zawierające termin n 3 lub n 4 . Nawet jeśli T ( n ) = 1 000 000 n 2 , jeśli U ( n ) = n 3 , to drugie zawsze przekroczy pierwsze, gdy n wzrośnie powyżej 1 000 000 ( T (1 000 000) = 1 000 000 3 = U (1 000 000) ). Ponadto liczba kroków zależy od szczegółów modelu maszyny, na której działa algorytm, ale różne typy maszyn zwykle różnią się tylko o stały współczynnik liczby kroków potrzebnych do wykonania algorytmu. Tak więc notacja dużego O oddaje to, co pozostaje: piszemy albo

Lub

i powiedzmy, że algorytm ma złożoność czasową rzędu n 2 . Znak „ = ” nie ma wyrażać „jest równy” w normalnym sensie matematycznym, ale raczej bardziej potoczne „jest”, więc drugie wyrażenie jest czasami uważane za dokładniejsze (patrz dyskusja „Znak równości” poniżej), podczas gdy pierwszy jest uważany przez niektórych za nadużycie notacji .

Nieskończenie małe asymptotyki

Duże O może być również użyte do opisania składnika błędu w przybliżeniu do funkcji matematycznej. Najbardziej znaczące terminy są zapisywane jawnie, a następnie najmniej znaczące terminy są podsumowywane jednym dużym terminem O. Rozważmy na przykład szereg wykładniczy i dwa jego wyrażenia, które są ważne, gdy x jest małe:

Drugie wyrażenie (to z O ( x 3 )) oznacza, że ​​wartość bezwzględna błędu e x − (1 + x + x 2 /2) jest co najwyżej pewnymi stałymi czasami | x 3 | gdy x jest wystarczająco bliskie 0.

Nieruchomości

Jeśli funkcję f można zapisać jako skończoną sumę innych funkcji, to najszybciej rosnąca wyznacza rząd f ( n ) . Na przykład,

W szczególności, jeśli funkcja może być ograniczona wielomianem w n , to ponieważ n dąży do nieskończoności , można pominąć wyrazy wielomianu niższego rzędu. Zbiory O ( n c ) i O ( c n ) są bardzo różne. Jeśli c jest większe niż jeden, to ten ostatni rośnie znacznie szybciej. Funkcja, która rośnie szybciej niż n c dla dowolnego c , nazywana jest superwielomianem . Taka, która rośnie wolniej niż jakakolwiek funkcja wykładnicza postaci c n , nazywana jest subwykładniczą . Algorytm może wymagać czasu, który jest zarówno superwielomianowy, jak i podwykładniczy; przykłady tego obejmują najszybsze znane algorytmy rozkładu liczb całkowitych na czynniki i funkcję n log n .

Możemy zignorować wszelkie potęgi n wewnątrz logarytmów. Zbiór O (log n ) jest dokładnie taki sam jak O (log ( n c )) . Logarytmy różnią się tylko stałym współczynnikiem (ponieważ log( n c ) = c log n ), a zatem notacja dużego O to ignoruje. Podobnie logarytmy o różnych stałych podstawach są równoważne. Z drugiej strony wykładniki o różnych podstawach nie są tego samego rzędu. Na przykład 2 n i 3 n nie są tego samego rzędu.

Zmiana jednostek może, ale nie musi, wpływać na kolejność wynikowego algorytmu. Zmiana jednostek jest równoznaczna z pomnożeniem odpowiedniej zmiennej przez stałą, gdziekolwiek się pojawi. Na przykład, jeśli algorytm działa w kolejności n 2 , zastąpienie n przez cn oznacza, że ​​algorytm działa w kolejności c 2 n 2 , a notacja dużego O ignoruje stałą c 2 . Można to zapisać jako c 2 n 2 = O( n 2 ) . Jeśli jednak algorytm działa w kolejności 2 n , zastąpienie n przez cn daje 2 cn = (2 c ) n . Ogólnie nie jest to równoważne 2 n . Zmiana zmiennych może również wpłynąć na kolejność wynikowego algorytmu. Na przykład, jeśli czas działania algorytmu wynosi O ( n ) , mierzony w kategoriach liczby n cyfr liczby wejściowej x , to jego czas działania wynosi O ( log x ) , mierzony jako funkcja samej liczby wejściowej x , ponieważ n = O (log x ) .

Produkt

Suma

fa i wtedy . Wynika z tego, że jeśli i to . Innymi słowy, to drugie wypukłym stożkiem .

Mnożenie przez stałą

Niech k będzie niezerową stałą. g . Innymi słowy, jeśli , to

Wiele zmiennych

Duże O (i małe o, Ω itd.) mogą być również używane z wieloma zmiennymi. Aby formalnie zdefiniować duże O dla wielu zmiennych, załóżmy, są dwiema zdefiniowanymi na pewnym podzbiorze . Mówimy

gdy istnieją stałe takie że dla wszystkich z dla pewnego warunek, że dla pewnego zapisać gdzie oznacza normę Czebyszewa . Na przykład oświadczenie

twierdzi, że istnieją stałe C i M takie, że

zachodzi albo lub Ta definicja pozwala wszystkim współrzędnym się do nieskończoności W szczególności oświadczenie

(tj. )

(tj. .

Zgodnie z tą definicją podzbiór, na którym zdefiniowana jest funkcja, jest istotny przy uogólnianiu stwierdzeń z ustawienia jednowymiarowego na ustawienie wielowymiarowe. Na przykład, jeśli i , to ( jeśli ograniczymy i , ale nie, jeśli są zdefiniowane na .

Nie jest to jedyne uogólnienie dużego O na funkcje wielowymiarowe iw praktyce istnieje pewna niekonsekwencja w wyborze definicji.

Sprawy notacji

Znak równości

Wyrażenie „ f ( x ) to O ( g ( x ))” zgodnie z powyższą definicją jest zwykle zapisywane jako f ( x ) = O ( g ( x )) . Niektórzy uważają to za nadużycie notacji , ponieważ użycie znaku równości może wprowadzać w błąd, ponieważ sugeruje symetrię, której nie ma to stwierdzenie. Jak de Bruijn , O ( x ) = O ( x 2 ) jest prawdziwe, ale O ( x 2 ) = O ( x ) nie. Knuth opisuje takie twierdzenia jako „jednokierunkowe równości”, ponieważ gdyby strony można było odwrócić, „moglibyśmy wydedukować śmieszne rzeczy, takie jak n = n 2 z tożsamości n = O ( n 2 ) i n 2 = O ( n 2 ) ”. W innym liście Knuth zwrócił również uwagę, że „znak równości nie jest symetryczny w stosunku do takich zapisów”, ponieważ w tym zapisie „matematycy zwykle używają znaku =, tak jak używają słowa„ jest ”w języku angielskim: Arystoteles jest człowiek, ale człowiek niekoniecznie jest Arystotelesem”.

Z tych powodów bardziej precyzyjne byłoby użycie notacji zbiorczej i zapisanie f ( x ) ∈ O ( g ( x )) (czytane jako: „ f ( x ) jest elementem O ( g ( x ))”, lub " f ( x ) jest w zbiorze O ( g ( x ))"), myśląc o O ( g ( x )) jako o klasie wszystkich funkcji h ( x ) takich, że | godz ( x )| ≤ C g ( x ) dla pewnej stałej C . Jednak użycie znaku równości jest zwyczajowe.

Inne operatory arytmetyczne

Notacja dużego O może być również używana w połączeniu z innymi operatorami arytmetycznymi w bardziej skomplikowanych równaniach. Na przykład h ( x ) + O ( f ( x )) oznacza zbiór funkcji o wzroście h ( x ) plus część, której wzrost jest ograniczony do wzrostu f ( x ). Zatem,

wyraża to samo co

Przykład

Załóżmy, że opracowywany jest algorytm do działania na zbiorze n elementów. Jego twórcy są zainteresowani znalezieniem funkcji T ( n ), która wyrazi, jak długo zajmie wykonanie algorytmu (w pewnym arbitralnym pomiarze czasu) pod względem liczby elementów w zbiorze wejściowym. Algorytm działa, najpierw wywołując podprogram w celu posortowania elementów w zbiorze, a następnie wykonując własne operacje. Sortowanie ma znaną złożoność czasową O ( n 2 ), a po wykonaniu podprogramu algorytm musi wykonać dodatkowe 55 n 3 + 2 n + 10 kroków, zanim się zakończy. Zatem całkowitą złożoność ( n ) = 55n3 + O ( n2 ) . czasową algorytmu można wyrazić jako T Tutaj terminy 2 n + 10 są podciągnięte do szybciej rosnącego O ( n 2 ). Ponownie, to użycie pomija niektóre formalne znaczenie symbolu „=”, ale pozwala na użycie notacji dużego O jako rodzaju wygodnego symbolu zastępczego.

Wiele zastosowań

W bardziej skomplikowanym użyciu O (·) może występować w różnych miejscach równania, nawet kilka razy z każdej strony. Na przykład następujące są prawdziwe dla :

Znaczenie takich stwierdzeń jest następujące: dla dowolnych funkcji, które spełniają każde O (·) po lewej stronie, istnieją pewne funkcje spełniające każde O (·) po prawej stronie, takie, że podstawienie wszystkich tych funkcji do równania daje dwie strony równe. Na przykład trzecie równanie powyżej oznacza: „Dla dowolnej funkcji f ( n ) = O (1) istnieje pewna funkcja g ( n ) = O ( e n ) taka, że ​​n f ( n ) = g ( n ). " Jeśli chodzi o powyższą „notację zestawu”, oznacza to, że klasa funkcji reprezentowana przez lewą stronę jest podzbiorem klasy funkcji reprezentowanej przez prawą stronę. W tym zastosowaniu „=” jest formalnym symbolem, który w przeciwieństwie do zwykłego użycia „=” nie jest relacją symetryczną . Zatem na przykład n O (1) = O ( e n ) nie implikuje fałszywego stwierdzenia O ( e n ) = n O (1) .

Skład

Duże O jest pisane jako wielka litera „O” pisana kursywą, jak w poniższym przykładzie: . W TeX-u tworzy się go po prostu wpisując O w trybie matematycznym. W przeciwieństwie do notacji Bachmanna-Landaua o greckiej nazwie, nie potrzebuje specjalnego symbolu. Jednak niektórzy autorzy używają zamiast

Rzędy wspólnych funkcji

Oto lista klas funkcji, które są powszechnie spotykane podczas analizowania czasu działania algorytmu. W każdym przypadku c jest stałą dodatnią, a n rośnie bez ograniczeń. Wolniej rosnące funkcje są zwykle wymienione jako pierwsze.

Notacja Nazwa Przykład
stały Określanie, czy liczba binarna jest parzysta czy nieparzysta; Obliczanie ; Korzystanie z tabeli wyszukiwania o stałym rozmiarze
podwójny logarytm Średnia liczba porównań zużytych na znalezienie elementu przy użyciu wyszukiwania interpolacyjnego w posortowanej tablicy równomiernie rozłożonych wartości
logarytmiczny Znajdowanie elementu w posortowanej tablicy za pomocą wyszukiwania binarnego lub zrównoważonego drzewa wyszukiwania oraz wszystkich operacji na stercie dwumianowej

polilogarytmiczny Kolejność łańcuchów macierzowych można rozwiązać w czasie polilogarytmicznym na równoległej maszynie o swobodnym dostępie .

potęga ułamkowa Wyszukiwanie w drzewie kd
liniowy Znalezienie elementu na nieposortowanej liście lub w nieposortowanej tablicy; dodanie dwóch n -bitowych liczb całkowitych metodą ripple carry
n gwiazda logarytmiczna n Wykonywanie triangulacji prostego wielokąta za pomocą algorytmu Seidela lub algorytmu Union-Find . Zauważ, że
liniowo , logliniowo, quasiliniowo lub „ n log n Wykonywanie szybkiej transformaty Fouriera ; najszybsze możliwe sortowanie porównawcze ; sortowanie na stosie i sortowanie przez scalanie
kwadratowy Mnożenie dwóch liczb n -cyfrowych przez mnożenie podręcznikowe ; proste algorytmy sortowania, takie jak sortowanie bąbelkowe , sortowanie przez wybieranie i sortowanie przez wstawianie ; (najgorszy przypadek) związany z niektórymi zwykle szybszymi algorytmami sortowania, takimi jak quicksort , Shellsort i tree sort
wielomianowy lub algebraiczny gramatyki przylegającej do drzewa ; maksymalne dopasowanie dla grafów dwudzielnych ; znalezienie wyznacznika z dekompozycją LU

Notacja L lub podwykładnicza Rozkładanie liczby na czynniki za pomocą sita kwadratowego lub sita pól liczbowych

wykładniczy Znalezienie (dokładnego) rozwiązania problemu komiwojażera za pomocą programowania dynamicznego ; określenie, czy dwie instrukcje logiczne są równoważne przy użyciu wyszukiwania siłowego
silnia Rozwiązanie problemu komiwojażera za pomocą wyszukiwania metodą brute-force; generowanie wszystkich nieograniczonych permutacji posetu ; znalezienie wyznacznika z rozwinięciem Laplace'a ; wyliczanie wszystkich partycji zestawu

fa jest czasami osłabiane do w celu wyprowadzenia prostszych wzorów na złożoność asymptotyczną. i do , więc podzbiorem dla dowolnego można go uznać za wielomian z jakieś większe zamówienie.

Powiązane notacje asymptotyczne

Big O jest szeroko stosowane w informatyce. Wraz z kilkoma innymi pokrewnymi notacjami tworzy rodzinę notacji Bachmanna-Landaua. [ potrzebne źródło ]

Notacja Little-o

Intuicyjnie stwierdzenie „ f ( x ) to o ( g ( x )) ” (czytaj „ f ( x ) to niewiele o g ( x ) ”) oznacza, że ​​g ( x ) rośnie znacznie szybciej niż f ( x ) . Tak jak poprzednio, niech f będzie funkcją o wartościach rzeczywistych lub zespolonych, a g funkcją o wartościach rzeczywistych, obie zdefiniowane na pewnym nieograniczonym podzbiorze dodatnich liczb rzeczywistych , tak że g ( x ) jest ściśle dodatnie dla wszystkich wystarczająco dużych wartości x . Jeden pisze

jeśli dla każdej dodatniej stałej ε istnieje stała taka, że

Na przykład jeden ma

i oba jako

Różnica między definicją notacji dużego-O a definicją małego-o polega na tym, że podczas gdy ta pierwsza musi być prawdziwa dla co najmniej jednej stałej M , druga musi być spełniona dla każdej dodatniej stałej ε , jakkolwiek małej. W ten sposób notacja little-o jest silniejszym stwierdzeniem niż odpowiadająca jej notacja big-O: każda funkcja, która jest małym-o z g, jest również dużym-O z g , ale nie każda funkcja, która jest dużym-O z g, jest również mało-o z g . Na przykład ale .

Ponieważ g ( x ) jest niezerowe lub przynajmniej staje się niezerowe poza pewnym punktem, relacja jest równoważna Do

w fakt, jak Landau pierwotnie zdefiniował notację little-o).

Little-o respektuje szereg operacji arytmetycznych. Na przykład,

jeśli c jest niezerową stałą i to do , a
jeśli i wtedy

Spełnia również relację przechodniości :

jeśli i wtedy

Notacja Big Omega

zapisem jest , czytane jako „duża ”. Istnieją dwie szeroko rozpowszechnione i niezgodne definicje tego stwierdzenia

jak ,

gdzie a jest pewną liczbą rzeczywistą, ∞ lub −∞, gdzie f i g są funkcjami rzeczywistymi zdefiniowanymi w sąsiedztwie a , i gdzie g jest dodatnie w tym sąsiedztwie.

Definicja Hardy'ego-Littlewooda jest używana głównie w analitycznej teorii liczb , a definicja Knutha głównie w teorii złożoności obliczeniowej ; definicje nie są równoważne.

Definicja Hardy'ego-Littlewooda

W 1914 roku Godfrey Harold Hardy i John Edensor Littlewood wprowadzili nowy symbol , który jest zdefiniowany w następujący sposób:

as jeśli

Tak więc jest negacją .

ci sami autorzy wprowadzili dwa nowe symbole i , jako:

as jeśli ;
jak jeśli

Tych symboli użył Edmund Landau w tym samym znaczeniu w 1924 r. Po Landau notacja nigdy nie była ponownie używana dokładnie w ten sposób; stał się i stał się . [ potrzebne źródło ]

Te trzy symbole , a także (co oznacza, że i są teraz spełnione), są obecnie używane w analitycznej teorii liczb .

Proste przykłady

Mamy

jak

a dokładniej

jako

Mamy

jako

a dokładniej

jako

Jednakże

jako

Definicja Knutha

W 1976 roku Donald Knuth opublikował artykuł uzasadniający użycie symbolu opisania silniejszej właściwości. Knuth napisał: „Dla wszystkich zastosowań, które widziałem do tej pory w informatyce, silniejszy wymóg… jest znacznie bardziej odpowiedni”. Zdefiniował

z komentarzem: „Chociaż zmieniłem definicję Hardy'ego i Littlewooda się usprawiedliwiony, ponieważ ich definicja nie jest w żadnym wypadku w powszechnym użyciu i ponieważ istnieją inne sposoby, aby powiedzieć, czego chcą powiedzieć w stosunkowo rzadkich przypadkach, gdy ich definicja ma zastosowanie”.

Rodzina notacji Bachmanna-Landaua

Notacja Nazwa Opis Definicja formalna Definicja limitu
Małe O; Mały O f jest zdominowane przez g asymptotycznie
duże O; duży och; Wielki Omikron jest asymptotycznie ograniczony powyżej przez g (do stałego współczynnika).
Wielka Teta f jest ograniczona zarówno powyżej, jak i poniżej przez g asymptotycznie i (wersja Knutha)
Z rozkazu f jest równe g asymptotycznie
Big Omega w teorii złożoności (Knuth) f jest od dołu ograniczone przez g asymptotycznie
Mała Omega f dominuje g asymptotycznie
Big Omega w teorii liczb (Hardy – Littlewood) nie jest zdominowany przez g asymptotycznie

Definicje granic zakładają, że są wystarczająco duże. \ tym sensie, że ) odpowiada _ Jednak wersja Littlewood odpowiada żadnemu takiemu opisowi)

Informatyka wykorzystuje duże , duże Theta małe , małe omega i duże Omegi Knutha notacje. Analityczna teoria często wykorzystuje dużą Hardy'ego-Littlewooda (z +, - lub ± lub bez) i O notacje. Mała notacja omega używana tak często w analizie.

Zastosowanie w informatyce

Nieformalnie, zwłaszcza w informatyce, notacja dużego O często może być używana nieco inaczej do opisania asymptotycznego ścisłego powiązania, gdzie użycie notacji dużego Theta Θ może być bardziej odpowiednie w danym kontekście. [ potrzebne źródło ] Na przykład, rozważając funkcję T ( n ) = 73 n 3 + 22 n 2 + 58, wszystkie poniższe są ogólnie akceptowalne, ale ściślejsze granice (takie jak liczby 2 i 3 poniżej) są zwykle zdecydowanie preferowane przez luźniejsze granice (takie jak numer 1 poniżej).

  1. T ( n ) = O ( n 100 )
  2. T ( n ) = O ( n 3 )
  3. T ( n ) = Θ ( n 3 )

Odpowiednikami angielskich stwierdzeń są odpowiednio:

  1. T ( n ) rośnie asymptotycznie nie szybciej niż n 100
  2. T ( n ) rośnie asymptotycznie nie szybciej niż n 3
  3. T ( n ) rośnie asymptotycznie tak szybko jak n 3 .

Tak więc, chociaż wszystkie trzy stwierdzenia są prawdziwe, każde z nich zawiera coraz więcej informacji. Jednak w niektórych dziedzinach notacja dużego O (numer 2 na powyższych listach) byłaby używana częściej niż notacja big Theta (pozycje o numerze 3 na powyższych listach). Na przykład, jeśli T ( n ) reprezentuje czas działania nowo opracowanego algorytmu dla wielkości wejściowej n , wynalazcy i użytkownicy algorytmu mogą być bardziej skłonni do wyznaczenia górnej asymptotycznej granicy czasu, jaki zajmie wykonanie tego algorytmu bez wykonywania wyraźne stwierdzenie o dolnej asymptotycznej granicy.

Inna notacja

W swojej książce „Wprowadzenie do algorytmów Cormen , Leiserson , Rivest i Stein rozważają zbiór funkcji f , które spełniają

W poprawnej notacji zbiór ten można na przykład nazwać O ( g ), gdzie

Autorzy twierdzą, że użycie operatora równości (=) do oznaczenia przynależności do zbioru zamiast operatora przynależności do zbioru (∈) jest nadużyciem notacji, ale ma to zalety. Wewnątrz równania lub nierówności użycie notacji asymptotycznej oznacza anonimową funkcję w zbiorze O ( g ), która eliminuje wyrażenia niższego rzędu i pomaga zmniejszyć nieistotny bałagan w równaniach, na przykład:

Rozszerzenia notacji Bachmanna-Landaua

  Innym zapisem używanym czasami w informatyce jest Õ (czytaj miękkie-O ): f ( n ) = Õ ( g ( n )) jest skrótem dla f ( n ) = O ( g ( n ) log k n ) dla pewnego k . Niektórzy autorzy piszą O * w tym samym celu. Zasadniczo jest to notacja dużego O, ignorująca czynniki logarytmiczne, ponieważ efekty szybkości wzrostu niektórych innych funkcji superlogarytmicznych wskazują na eksplozję szybkości wzrostu dla parametrów wejściowych o dużych rozmiarach, która jest ważniejsza dla przewidywania złej wydajności w czasie wykonywania niż dokładniejsze -efekty punktowe wnoszone przez logarytmiczny czynnik(i) wzrostu. Notacja ta jest często używana, aby uniknąć „wychwytywania nitek” w ramach tempa wzrostu, które są określane jako zbyt ściśle ograniczone dla rozpatrywanych spraw (ponieważ log k n wynosi zawsze o ( n ε ) dla dowolnej stałej k i dowolnego ε > 0 ).

Również notacja L , zdefiniowana jako

jest wygodny dla funkcji, które są między wielomianem a wykładnikiem pod względem . .

Uogólnienia i powiązane zastosowania

Uogólnienie na funkcje przyjmujące wartości w dowolnej znormalizowanej przestrzeni wektorowej jest proste (zastąpienie wartości bezwzględnych normami), gdzie f i g nie muszą przyjmować wartości w tej samej przestrzeni. Możliwe jest również uogólnienie na funkcje g przyjmujące wartości w dowolnej grupie topologicznej [ potrzebne źródło ] . „Proces ograniczania” x xo można również uogólnić wprowadzając dowolną podstawę filtru , czyli do sieci skierowanych f i g . Notacja o może służyć do definiowania pochodnych i różniczkowalności w dość ogólnych przestrzeniach, a także (asymptotycznej) równoważności funkcji,

która jest relacją równoważności i pojęciem bardziej restrykcyjnym niż relacja „ f to Θ ( g )” z góry. (Redukuje się do lim f / g = 1, jeśli f i g są dodatnimi funkcjami o wartościach rzeczywistych.) Na przykład 2 x to Θ ( x ), ale 2 x - x nie jest o ( x ).

Historia (notacje Bachmanna-Landaua, Hardy'ego i Vinogradova)

Symbol O został po raz pierwszy wprowadzony przez teoretyka liczb Paula Bachmanna w 1894 roku w drugim tomie jego książki Analytische Zahlentheorie („ analityczna teoria liczb ”). Przyjął to teoretyk liczb Edmund Landau iw ten sposób zainspirował się do wprowadzenia w 1909 r. Notacji o; stąd oba są teraz nazywane symbolami Landaua. Notacje te były używane w matematyce stosowanej w latach pięćdziesiątych XX wieku do analizy asymptotycznej. Symbol (w znaczeniu „nie jest o ” przez Hardy'ego i Littlewooda. Hardy i Littlewood wprowadzili również w 1916 symbole („prawo” i („lewo”), prekursory współczesnych symboli („nie jest mniejsze niż małe o”) i („nie jest większe niż małe o”). Dlatego symbole Omega (z ich oryginalnym znaczeniem) są czasami określane jako „symbole Landau”. Ten zapis się powszechnie używany w teorii liczb co najmniej od lat pięćdziesiątych XX wieku W latach siedemdziesiątych wielkie O zostało spopularyzowane w informatyce przez Donalda Knutha , który wprowadził powiązaną notację Theta i zaproponował inną definicję notacji Omega.

Landau nigdy nie używał dużych symboli Theta i małych symboli Omega.

Symbole Hardy'ego były (według współczesnej notacji O )

i

użył notacji , ani , jak to donoszono) Hardy wprowadził symbole a wykorzystał je tylko w trzech artykułach (1910–1913 ). W swoich prawie 400 pozostałych artykułach i książkach konsekwentnie używał symboli Landau O i O.

Notacja Hardy'ego nie jest już używana. Z drugiej strony, w latach trzydziestych XX wieku rosyjski teoretyk liczb Iwan Matwiejewicz Winogradow swoją , która jest coraz częściej stosowana w teorii liczb zamiast Mamy

i często oba zapisy są używane w tym samym artykule.

Big-O pierwotnie oznacza „zakon” („Ordnung”, Bachmann 1894), a zatem jest literą łacińską. Ani Bachmann, ani Landau nigdy nie nazywają go „Omicron”. Symbol został znacznie później (1976) postrzegany przez Knutha jako duży omikron , prawdopodobnie w odniesieniu do jego definicji symbolu Omega . Nie należy używać cyfry zero .

Zobacz też

Referencje i notatki

Dalsza lektura

Linki zewnętrzne