O (·) nie jest funkcją, więc w jaki sposób funkcja może być jej równa?


47

Całkowicie rozumiem, co oznacza duża notacjaMój problem polega na tym, że mówimy , gdzie jest czasem działania algorytmu na wejściu wielkości .OT(n)=O(f(n))T(n)n

Rozumiem semantykę tego. Ale i to dwie różne rzeczy.T(n)O(f(n))

T(n) jest dokładną liczbą, ale nie jest funkcją, która wyrzuca liczbę, więc technicznie nie możemy powiedzieć, że równa się , jeśli ktoś zapyta Ci co to jest wartość od , jaka byłaby twoja odpowiedź? Nie ma odpowiedzi.O(f(n))T(n) O(f(n))O(f(n))


7
Po prostu symbol = w T(n)=O(f(n)) nie oznacza „równa się”. Pytanie opiera się na tym założeniu. Czy znalazłeś źródło, które tak mówi?
ShreevatsaR

20
To tylko jeden z wielu sposobów, w jaki notacja matematyczna jest nadużywana :(
Technical_difficulty

13
Jeśli 64 jest liczbą, to jak mogę być 64?
TaW,

7
Wikipedia jest zawsze dobrym miejscem, aby zacząć szukać odpowiedzi - zawiera sekcję omawiającą dokładnie ten punkt.
Dukeling,

3
@mathreadler Nie ma algorytmu. Myślenie, że wielka-O mówi o algorytmie, przypomina myślenie, że liczba dziesiętna mówi o czyimś wzroście. big-O to notacja mówiąca o tempie wzrostu funkcji matematycznych; dziesiętny to zapis liczbowy. Funkcja matematyczna może, ale nie musi, być czasem działania jakiegoś algorytmu; liczba może być, ale nie musi być, czyimś wzrostem.
David Richerby

Odpowiedzi:


107

Ściśle mówiąc, O(f(n)) jest zbiorem funkcji. Zatem wartość O(f(n)) jest po prostu zbiorem wszystkich funkcji, które rosną asymptotycznie nie szybciej niż f(n) . Notacja T(n)=O(f(n)) to tylko konwencjonalny sposób zapisu, że T(n)O(f(n)) .

Zauważ, że wyjaśnia to również pewne zastrzeżenia notacjiNa przykład piszemy, że , ale nigdy nie piszemy, że . Cytując Donalda Knutha (Sztuka programowania komputerowego, 1.2.11.1):O(1/2)n2+n=O(n2)O(n2)=(1/2)n2+n

Najważniejszą kwestią jest koncepcja równości jednokierunkowej . [...] Jeśli i są formułami zawierającymi notację, wówczas notacja oznacza, że ​​zestaw funkcji oznaczonych przez jest zawarty w zestawie oznaczonym przez .α(n)β(n)Oα(n)=β(n)α(n)β ( n )β(n)


3
Nie rozumiem drugiego akapitu. Zgadzam się, że pisząc , mamy na myśli . Ale nie należy interpretować jako ustawionej równości, ponieważ nie ma sensu (jest to błąd typu!). Jeśli tak, to dlaczego mówisz ale w akapicie drugim? f O ( f ( n ) ) O ( f ( n ) ) = O ( g ( n ) ) O ( f ( n ) ) O ( g ( n ) ) O ( n 2 ) O ( n 3 ) O (f=O(f(n))fO(f(n))O(f(n))=O(g(n))O(f(n))O(g(n))O(n2)O(n3)O(n3)O(n2)
Alex Vong,

7
ponieważ gdy oba są ustawione, interpretujemy to jakoO(n2)O(n3)
RiaD

1
Używałbym słów w miejscach, w których jest to rzeczywiście potrzebne. W obliczeniach zwykle potrzebujesz tylko jednostronnej rzeczy
RiaD

11
Nigdy nie widziałem O (n ^ 2) = O (n ^ 3) w żadnym tekście lub innym poważnym źródle. Czy możesz podać jeden?
Jak

1
Jeśli chcemy być bardziej rygorystyczni, i nie są funkcjami, i są. Ale „z jakiegoś powodu” nie widziałem, żeby ktoś pisał w tekście przeznaczonym do czytania przez ludzi. n 3 f n n 3 n n 2O ( n n 3 )f(n)n3fnn3nn2O(nn3)
JiK

43

O jest funkcją tj. akceptuje funkcję i daje zestaw funkcji, które dzielą asymptotyczną granicę (co najwyżej) . I ściśle mówiąc, poprawną notacją jest więc lub krótki ale zwyczajowo w matematyce, nauce i CS używa się zwyczajnie zmienna gdzieś w wyrażeniu, która oznacza, że ​​rozważasz funkcje argumentu po obu stronach. Więc jest również całkiem w porządku.

O:(NR)P(NR)fO(f)
ff
(nT(n))O(nf(n))
TO(f)
nT(n)O(f(n))T(n)=O(f(n))nT(n)O(f(n))T(n)=O(f(n))jest całkiem błędne, jak podejrzewasz. Jest jednak bardzo powszechnie używany, więc zdecydowanie pamiętaj, co ludzie mają na myśli, pisząc to.

Odradzałbym pisanie , ale opinie są różne .T(n)=O(f(n))


11
OT(n)=O(f(n) jest całkowicie standardowym zastosowaniem notacji, więc twierdzenie, że jest błędne, jest nieprzydatne. (Jak, IMO, twierdzi, że jest funkcją; to technicznie prawda, ale nie jest to naprawdę pomocny sposób pomyśleć o tym.)O
David Richerby,

38
@DavidRicherby niektóre rzeczy są całkowicie standardowe, ale nie powinny. jest jednym przykładem. Pewnie dobrze jest wiedzieć, co ludzie przez to rozumieją (tak jak już PO), ale jak nie jest pomocne potwierdzenie, że notacja ta jest technicznie nieprawdziwa? Dlaczego miałbyś to wykorzystać? Nawet jeśli wersja nie jest dwuznaczna, nie jest też jednym, a im więcej osób przełączy się na tę notację, tym lepiej. Zawsze lepiej jest trzymać się tego, co faktycznie ma sens matematyczny, chyba że pisanie jest znacznie trudniejsze. jest doskonale czytelny i łatwy do napisania. = T(n)=O(f(n))=
leftaroundabout

1
@leftaroundabout Położyłeś na to palec, gdy mówisz „chyba, że ​​pisanie jest o wiele bardziej niezręczne” - Praca z jest rzeczywiście znacznie trudniejsza do pisania, z wyjątkiem specjalnego przypadku, w którym nie ma wyrażeń na LHS i dokładnie jeden na RHS. (Zobacz np. Pracę z takimi asymptotykami jak moja odpowiedź i porównaj to z odpowiedzią, która rezygnuje ze wszystkich zalet notacji O () i musi opierać się na nieuzasadnionym założeniu.) Celem notacji jest wspomaganie myślenia i istnieje o wiele więcej do zyskania tutaj poprzez zmianę znaczenia „=”O ( )O()
ShreevatsaR,

2
@ShreevatsaR nie jestem pewien, dokąd się wybierasz. Nie przeczytałem bardzo dokładnie posta z linkami, ale TBH twój post tam wydaje się najbardziej skomplikowany i potrzebuje dobrych reguł (nieco niejasnych, „nie mogę teraz znaleźć tego w książce”) , podczas gdy inne odpowiedzi łatwo podać rozwiązanie od pierwszych zasad. W każdym razie, co powstrzymuje cię od zamiany znaków „nadużywanych” i odpowiednio? =
lewo około

1
@ShreevatsaR Zgadzam się, że zbudowanie zestawu reguł / twierdzeń jest przedmiotem teorii. Ale najważniejsze jest jasne sformalizowanie każdej reguły, kiedy dokładnie ma ona zastosowanie . Teoria typów IMO jest najlepszym rozwiązaniem, ale zestawy naiwne są wystarczająco blisko w praktyce. Naiwne „równania” wyrażeń algebraicznych obejmujące symbole / / nie są jednak. - „Sprawiają, że myślisz o formalizmie teorii mnogości”, „misja zrealizowana!”, „Która nie pasuje do ludzkiej myśli…” - prawda? W praktyce mówienie o relacjach typu „a-a” jest dokładnie tym, co robisz z teorią typów. o ΘOoΘ
leftaroundabout

13

Formalnie rzecz biorąc, jest zbiorem funkcji tak że dla pewnej stałej i wszystkie wystarczająco duże  . Zatem najbardziej pedantycznie dokładnym sposobem pisania byłoby . Jednak użycie zamiast  jest całkowicie standardowe, a oznacza po prostu . Zasadniczo nigdy nie jest to dwuznaczne, ponieważ prawie nigdy nie manipulujemy zbiorem .O(f(n))gg(n)kf(n)knT(n)O(f(n))=T(n)=O(f(n))T(n)O(f(n))O(f(n))

W pewnym sensie użycie równości powoduje, że oznacza „jakąś funkcję taką, że dla wszystkich wystarczająco dużych  ”, a to oznacza, że ​​możesz pisać takie rzeczy jak . Zauważ, że jest to o wiele dokładniejsze niż, np. lub .O(f(n))gg(n)fg(n)nf(n)=3n+O(logn)f(n)=Θ(n)f(n)=O(n+logn)


Możesz także wpisać . Chociaż przyznaję, że przydatne może być zakończenie obliczeń wieloetapowych za pomocą . f ( n ) = = 3 n + O ( log n )f(n)3nO(logn)f(n)==3n+O(logn)
leftaroundabout

Przegrupowanie działa tylko w samodzielnych instrukcjach. Jest to o wiele bardziej powszechne w środku obliczeń, gdy tego rodzaju rzeczy nie działają i gdzie wiele funkcji zostaje wchłoniętych razem w notacji Landaua. (Rzeczy takie jak ). f(x)=ex(e2x+O(x))=ex+o(1)
David Richerby,

4
Uważam, że takie obliczenia są wstrząsające; te znaki równości nie są już dwukierunkowe. Nie jestem pewien, czy jest więcej problemów z pisaniem . Przypuszczam, że to także nadużycie zapisu; w zasadzie przeciążasz operatora , podczas gdy ja wolę podnosić i aby również operować na zestawach. = + f(x)ex(e2x+O(x))ex+o(1)=+
leftaroundabout

Możliwe byłoby użycie nieco innych notacji dla zbioru funkcji asymptotycznych, , a dla nieokreślonego elementu tego zbioru, powiedz . Tak więc, jeśli , można napisać zamiast niejednoznacznego . Następnie możesz pisać bez problemu . Inne możliwe oznaczenia dla nieokreślonego elementu mogą być , ... O ( h ) f - g O ( h ) f = g + O ( h ) f = g + O ( h ) O ( h ) = f - g O ( h ) ˙ O ( h ) O ( h )O(h)O(h)fgO(h)f=g+O(h)f=g+O(h)O(h)=fgO(h)O˙(h)O^(h)
Michel Fioc

11

Prolog: Duża notacja jest klasycznym przykładem potęgi i niejednoznaczności niektórych notacji jako części języka kochanego przez ludzki umysł. Bez względu na to, jak wiele zamieszania to spowodowało, wybór zapisu stanowi przekazanie pomysłów, które możemy łatwo zidentyfikować i na które zgodzimy się skutecznie.O

Całkowicie rozumiem, co oznacza duża notacjaMój problem polega na tym, że mówimy , gdzie jest czasem działania algorytmu na wejściu wielkości .OT(n)=O(f(n))T(n)n

Przepraszamy, ale nie masz problemu, jeśli rozumiesz znaczenie dużej notacjiO

Rozumiem semantykę tego. Ale i to dwie różne rzeczy. jest dokładną liczbą, ale nie jest funkcją, która wyrzuca liczbę, więc technicznie nie możemy powiedzieć, że równa się , jeśli ktoś zapyta Ci co to jest wartość od , jaka byłaby twoja odpowiedź? Nie ma odpowiedzi.T(n)O(f(n))T(n)O(f(n))T(n) O ( f ( n ) ) O ( f ( n ) ) O(f(n))O(f(n))

Ważna jest semantyka . Ważne jest (jak) ludzie mogą łatwo zgodzić się na jedną z jej precyzyjnych interpretacji, które opisają asymptotyczne zachowanie lub złożoność czasu lub przestrzeni, którymi jesteśmy zainteresowani. Domyślna precyzyjna interpretacja / definicja , zgodnie z tłumaczeniem z Wikipedii ,T(n)=O(f(n))

T jest funkcją o wartości rzeczywistej lub zespolonej, a jest funkcją o wartościach rzeczywistych, obie zdefiniowane w pewnym nieograniczonym podzbiorze rzeczywistych liczb dodatnich, tak że jest ściśle dodatnie dla wszystkich wystarczająco dużych wartości . Dla wszystkich wystarczająco dużych wartości wartość bezwzględna jest co najwyżej dodatnią stałą wielokrotnością . Oznacza to, że istnieje dodatnia liczba rzeczywista i liczba rzeczywista taka, żeff(n)nnT(n)f(n)Mn0

 for all nn0,|T(n)|Mf(n) for all nn0.

Uwaga: ta interpretacja jest uważana za definicję . Wszelkie inne interpretacje i zrozumienia, które mogą ci bardzo pomóc na różne sposoby, są wtórne i następcze. Wszyscy (cóż, przynajmniej każdy tutaj odpowiadający) zgadza się na tę interpretację / definicję / semantykę. Tak długo, jak możesz zastosować tę interpretację, prawdopodobnie jesteś dobry przez większość czasu. Zrelaksuj się i bądź wygodny. Nie chcesz za dużo myśleć, tak jak nie myślisz za dużo o nieregularności języka angielskiego, francuskiego lub większości języków naturalnych. Wystarczy użyć zapisu według tej definicji.

T(n)O ( f ( n ) ) T ( n ) O ( f ( n ) ) O ( f ( n ) ) jest dokładną liczbą, ale nie jest funkcją, która wyrzuca liczbę, więc technicznie nie możemy powiedzieć, że równa się , jeśli ktoś zapyta Ci co to jest wartość od , jaka byłaby twoja odpowiedź? Nie ma odpowiedzi.O(f(n))T(n) O(f(n))O(f(n))

Rzeczywiście, nie ma odpowiedzi, ponieważ pytanie jest źle postawione. nie oznacza dokładnej liczby. Ma oznaczać funkcję o nazwie i której parametrem formalnym jest (co jest w pewnym sensie ograniczone do in ). Jest to tak samo poprawne, a tym bardziej, jeśli napiszemy . Jeśli jest funkcją odwzorowującą do a jest funkcją odwzorowującą do , konwencjonalne jest również zapisywanie lubT(n)Tnnf(n)T=O(f)Tnn2fnn3f(n)=O(n3)n2=O(n3)O. Należy również pamiętać, że definicja nie mówi, że jest funkcją, czy nie. Nie mówi wcale, że lewa strona powinna być w ogóle równa prawej stronie! Masz rację, podejrzewając, że znak równości nie oznacza równości w jej zwykłym znaczeniu , w którym możesz zmienić obie strony równości i powinna być poparta równoważną relacją. (Innym jeszcze bardziej znanym przykładem nadużycia znaku równości jest użycie znaku równości w celu przypisania w większości języków programowania, zamiast bardziej kłopotliwego, jak w niektórych językach).O:=

Jeśli martwimy się tylko o tę jedną równość (również zaczynam nadużywać języka. To nie jest równość ; jednak jest to równość, ponieważ w zapisie znajduje się znak równości lub można ją interpretować jako pewien rodzaj równości ), , ta odpowiedź jest gotowa.T(n)=O(f(n))

Jednak pytanie faktycznie trwa. Co to znaczy, na przykład, ? Ta równość nie jest objęta powyższą definicją. Chcielibyśmy wprowadzić kolejną konwencję, konwencję zastępczą . Oto pełne oświadczenie o konwencji zastępczej, jak podano w Wikipedii .f(n)=3n+O(logn)

W bardziej skomplikowanym użyciu 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 .O()n

(n+1)2=n2+O(n)
(n+O(n1/2))(n+O(logn))2=n3+O(n5/2)
nO(1)=O(en)

Znaczenie takich instrukcji jest następujące: dla wszystkich funkcji, które spełniają każde po lewej stronie, są pewne funkcje spełniające każde po prawej stronie, takie jak podstawienie wszystkich tych funkcji do równania wyrównuje obie strony. Na przykład trzecie równanie powyżej oznacza: „Dla dowolnej funkcji istnieje funkcja taka, że . ”O()O()f(n)=O(1)g(n)=O(en)nf(n)=g(n)

Możesz tu sprawdzić inny przykład konwencji symbolu zastępczego w akcji.

Być może zauważyliście już, że nie użyłem teoretycznego wyjaśnienia dużej adnotacji. Wszystko, co zrobiłem, to po prostu pokazać, nawet bez wyjaśnienia teoretycznego, takiego jak „ jest zbiorem funkcji”, wciąż możemy w pełni i doskonale zrozumieć dużą adnotację. Jeśli uznasz, że to teoretyczne wyjaśnienie jest przydatne, idź dalej.OO(f(n))O

Możesz sprawdzić sekcję „notacja asymptotyczna” CLRS, aby uzyskać bardziej szczegółowy wzorzec analizy i użycia dla rodziny notacji dla zachowania asymptotycznego, takiego jak duże , , małe , małe , użycie wielu zmiennych i więcej. Wpis Wikipedia jest także całkiem dobre referencje.ΘΩoω

Wreszcie istnieje pewna niejednoznaczność / kontrowersje związane z dużą notacją z wieloma zmiennymi 1 i 2 . Możesz zastanowić się dwa razy, kiedy ich używasz.O


10

W Podręczniku projektowania algorytmów [1] można znaleźć akapit na ten temat:

Notacja Big Oh [w tym , i ] zapewnia szorstkie pojęcie równości przy porównywaniu funkcji. Nieco niepokojące jest wyrażenie takie jak , ale jego znaczenie można zawsze rozwiązać, wracając do definicji w kategoriach górnej i dolnej granicy. Być może najbardziej pouczające jest przeczytanie tutaj „=” jako „ jednej z funkcji, które są ”. Oczywiście, jest jedną z funkcji, które są .OΩΘn2=O(n3)n 2 O ( n 3 )n2O(n3)

Ściśle mówiąc (jak zauważył komentarz Davida Richerby'ego ), daje ci szorstkie pojęcie równości, szorstkie pojęcie mniejszej lub równej, i i szorstkie pojęcie większej niż lub równej -do.ΘOΩ

Niemniej jednak zgadzam się z odpowiedzią Vincenzo : możesz po prostu interpretować jako zestaw funkcji, a symbol = jako ustawiony symbol członkostwa .O(f(n))


[1] Skiena, SS The Algorytm Design Manual (wydanie drugie). Springer (2008)


7

Zazwyczaj zdania takie jak można interpretować jako

f=O(g)
there exists hO(g) such that f=h.

Staje się to bardziej przydatne w kontekstach takich, jak wspomina David Richerby, gdzie piszemy co oznacza, że ​​„istnieje takie, że . ”f(n)=n3+O(n2)g(n)O(n2)f(n)=n2+g(n)

Uważam, że taka egzystencjalna interpretacja kwantyfikatora jest tak przydatna, że ​​kusi mnie pisanie takich rzeczy

f(n)O(n3)

które niektórzy uznają za bardziej rażące naruszenie stylu, ale jest to po prostu sposób na oszczędność miejsca „istnieje takie, że ”.Cf(n)Cn3


W swoim podręczniku Jeff Edmonds używa .
Theodore Norvell,

2

Wiele innych plakatów wyjaśniło, że Big-O można traktować jako oznaczający zbiór funkcji i że notacja wskazuje, że (jako funkcja ) znajduje się w zestaw oznaczony przez (ponownie biorąc pod uwagę jako parametr). W tekście angielskim możesz napisać „ jest w ”, aby uniknąć nieporozumień.n2=O(n3)n2nO(n3)nn2O(n3)

Chociaż notacja może być myląca, może pomóc myśleć o i jako częściach tej samej notacji, to znaczy traktować jak jeden symbol. Różni się niewiele od tego, co robimy, gdy piszemy w języku programowania: dwa symbole obok siebie stają się jednym w naszych oczach.O==O>=

Innym trudnym aspektem notacji jest to, że zmienna działająca jako parametr nie jest jednoznacznie identyfikowana ani związana , tak jak w deklaracji funkcji lub notacji lambda. Może to być szczególnie mylące, gdy w grę wchodzą dwie zmienne, jak w lub nawet bardziej w wyrażeniu takim jak ponieważ można sugerować, że jest stałą. Z drugiej strony niektóre algorytmy mają złożoność w zestawie Big-O, który technicznie zmienia się w zależności od dwóch zmiennych, podczas gdy w praktyce jeden z nich jest stały. Co więcej, może istnieć wiele rozsądnych sposobów pomiaru złożoności jednego algorytmu. Na przykład, jeśli dane wejściowe to liczba, algorytm może mieć wartość w wartościO(mn)O(nc)cO(n)nliczby, ale w rozmiarze bitu liczby. (Chociaż w teorii złożoności per se, rozmiar bitu jest zwykle właściwym parametrem.)O(2b)

Wszystko po to, by powiedzieć, że Big-O jest nieformalnym zapisem, prześladowanym przez niedokładność, i często trzeba użyć innego kontekstu, aby zrozumieć, co mówi autor.

Jak zawsze, najlepiej unikać zamieszania we własnym piśmie, i sugeruję unikanie i użycie zamiast niego lub angielskim „… jest w…”=OO


" " zazwyczaj należy rozumieć jako " -squared jest duży-O z -cubed" lub " -squared jest kolejność -cubed". n2=O(n3)nnnn
David Richerby,

2

Aby podkreślić punkt, który został kilkakrotnie poruszony, pozwólcie, że cytuję z NG de Bruijn, Metody asymptotyczne w analizie :

Wspólną interpretację wszystkich tych wzorów można wyrazić w następujący sposób. Każde wyrażenie obejmujące symbol należy traktować jako klasę funkcji. Jeśli weźmie się pod uwagę zakres , wówczas oznacza klasę wszystkich funkcji w postaci , przy czym , . A oznacza, że ​​klasa jest zawarta w klasieO0<x<O(1)+O(x2)f(x)+g(x)f(x)=O(1)(0<x<)g(x)=O(x2)(0<x<)x1O(1)=O(1)+O(x2)x1O(1)O(1)+O(x2). Czasami lewa strona relacji nie jest klasą, ale pojedynczą funkcją [...]. Zatem relacja oznacza, że ​​funkcja po lewej jest członkiem klasy po prawej.

Oczywiste jest, że znak jest naprawdę niewłaściwym znakiem dla takich relacji, ponieważ sugeruje symetrię i nie ma takiej symetrii. Na przykład jest poprawne, ale jest fałszywe. Po tym ostrzeżeniu używanie znaku nie zaszkodzi jednak i będziemy go utrzymywać wyłącznie z tego powodu, że jest to zwyczajowe.=O(x)=O(x2)(x)O(x2)=O(x)(x)=

Donald Knuth zwrócił również uwagę, że matematycy często używają znaku ponieważ używają słowa „jest” w języku angielskim. „Arystoteles jest mężczyzną, ale człowiek niekoniecznie jest Arystotelesem”.=

Powiedziawszy to, notacja Bendera i Orszaga (z Zaawansowanych metod matematycznych dla naukowców i inżynierów ) jest znacznie mniej myląca i warto ją rozważyć. W odniesieniu do pewnego limitu mówimy:

f(x)g(x)(xx0)

(wymawiane „ jest asymptotyczne do ”) oznaczafg

limxx0f(x)g(x)=1

i:

f(x)g(x)(xx0)

(wymawiane „ jest nieznaczne w porównaniu do ”) oznaczafg

limxx0f(x)g(x)=0

Ale przypuszczam, że zaletą notacji big-oh jest to, że stały czynnik jest arbitralny. (A dla notacji „o-oh” stałym czynnikiem jest cokolwiek z ciebie.)


0

Omówiłem to na stackoverflow ; chociaż być może najbardziej poprawna odpowiedź na OP została już podana powyżej (klasy równoważności, przekształcone poniżej jako nr 1), oto pełna odpowiedź:

  1. zestawy : „ ” oznacza , tj. członkostwo w zestawie, np. „zbiór funkcji asymptotycznie ograniczony przez ”. Jest to standardowe matematyczne podejście do asymptotycznej notacji, o którym wiem. Ten zestaw ma częściową kolejność odpowiadającą podzbiorowi, np. (niektóre zestawy mogą być nieporównywalne; DAG; zobacz hierarchię wielomianów dla interesującego przykład).f=O()fO(){12x2,(5x2x+5),2.5x,...}x2O(x2)<O(x3)=O(x3+x)

    Uwaga. „ ” oznacza . Należy jednak zauważyć, że w przeciwieństwie do powyższego, jest to relacja równoważności (oczywiście naiwna relacja X jak w iff nie jest klasą równoważności, ponieważ nie implikuje ; banalna relacja równoważności „zarówno element ” jest być może zabawna w konceptualizacji, ale matematycznie nieciekawa, podczas gdy w wiele klas równoważności dzieli przestrzeń funkcji).f=Θ()fΘ()f X gfO(g)fO(g)gf(g)O(g)Θ

  2. wyrażenie wieloznaczne : Możesz przeformułować wstecz definicję : po pewnym promieniu odliczania w pobliżu źródła (tj. istnieje , taki że dla wszystkich ...), istnieje pasmo ograniczone stałymi wielokrotnościami które ograniczają (tj. ) ... a więc możemy to przeprogramować, aby po prostu zastąpić dowolne wyrażenie z wyrażeniem , to znaczy zamień go na samą granicę plus warunek błędu, na którym nam nie zależy (warunek błędu ograniczony przez dlafΘ(g)x0x>x0gfLOWg(x)f(x)HIGHg(x)O(g)k1g(x)+err(x)0err(x)k2g(x)x>x0i potencjalnie nieograniczone dla ) ..... więc na przykład, jeśli powiedzieliśmy , moglibyśmy powiedzieć gdzie tym błędem jest . Nigdy jednak tego nie zapisalibyśmy ... bo to trochę głupie. Uważam jednak, że takie myślenie może być uzasadnione i zachowałoby pojęcie równości. (Przestrzegam tutaj właściwego traktowania znaków ujemnych, co może być ważne).xx0f=2Θ(x2)f(x)=2k1x2+err(x)0err(x)k2x2

    za. Zmodyfikuj powyższe odpowiednio dla zamiastOΘ


Część 1 wydaje się teraz działać. Ale obsługa terminu błędu w 2 jest nadal nieprawidłowa. Nie możesz pisać jako dla żadnego pozytywnego terminu . A jeśli masz zamiar napisać, powiedzmy, , to nie sądzę, że to naprawdę prawda, że ​​„nie przejmujesz się” terminem błędu, ponieważ termin błędu wynosiłby , który jest znacznie, znacznie większy niż . x2k1x3+errerrx2=2x+err2xx2x2
David Richerby,

0

Bardziej dokładna odpowiedź byłaby taka, że ​​gdy mówimy, że funkcja f jest „dużym O funkcji g”. (Ie x ^ 2 + x to O (x ^ 2)) mówimy, że f (x) <C * g (x) dla pewnej wartości C i k gdzie x> k. Oznacza to, że g jest górną granicą dla zachowania f.

Przykład

x ^ 2 + 10x 4 to O (x ^ 2 + x), które samo w sobie jest O (x ^ 2)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.