Notația Big O

Notația Big O este o notație matematică care descrie comportamentul la limită⁠(d) al unei funcții atunci când argumentul tinde la o anumită valoare sau la infinit. Este una din notațiile inventate de Paul Bachmann,[1] Edmund Landau⁠(d),[2] și alții, numite colectiv notațiile Bachmann-Landau sau notațiile asimptotice.

Exemplu de notație Big O: f(x) ∈ O (g(x)) deoarece există c > 0 (de exemplu, c = 1) și x0 (de exemplu, x0 = 5) astfel încât f(x)c g(x) pentru orice xx0.

În informatică, notația Big O este folosită pentru a clasifica algoritmii în funcție de felul în care timpul lor de rulare sau cerințele lor de spațiu cresc pe măsură ce crește dimensiunea datelor de intrare.[3] În teoria analitică a numerelor⁠(d), notația Big O este adesea folosită pentru a exprima o legătură între diferența dintre o funcție aritmetică⁠(d) și o aproximare mai bine înțeleasă; un exemplu celebru de astfel de diferență este termenul rest din teorema numerelor prime.

Notatia Big O caracterizează funcțiile după de vitezele lor de creștere: funcții diferite cu aceeași viteză de creștere pot fi reprezentate folosind aceeași notație O.

Litera O este folosită deoarece viteza de creștere a unei funcții este numită și ordin al funcției. O descriere a unei funcții în ceea ce privește notația Big O, de obicei, oferă doar o limită superioară⁠(d) a vitezei de creștere a funcției. Cu notația Big O mai sunt asociate mai multe alte notații, folosind simbolurile o, Ω, ω, și Θ, pentru a descrie alte tipuri de limite ale vitezelor de creștere asimptotică.

Notația Big O este folosită și în multe alte domenii pentru a furniza estimări similare.

Definiție formală

Fie f o funcție cu valori reale sau complexe și g o funcție cu valori reale, ambele fiind definite pe unele submulțimi nemărginite ale mulțimii numerelor reale pozitive, astfel încât g(x) să fie strict pozitivă pentru toate valorile suficient de mari ale lui x.[4] Se scrie

dacă și numai dacă pentru toate valorile suficient de mari ale lui x, valoarea absolută a lui f(x) este cel mult un multiplu constant pozitiv al lui g(x). Adică, f(x) = O(g(x)) dacă și numai dacă există un număr real pozitiv M și un număr real x0 astfel încât

În multe contexte, ipoteza că suntem interesați de viteza de creștere când variabila x tinde la infinit este lăsată nestabilită, și se scrie mai simplu că

Notația poate fi folosită și pentru a descrie comportamentul lui f în preajma unui număr real a (adesea, a = 0): se spune

dacă și numai dacă există numere pozitive δ și M astfel încât


Întrucât g(x) este aleasă în așa fel încât să fie nenulă, pentru valori ale lui x suficient de apropiate⁠(d) de a, ambele aceste definiții pot fi unificate folosind limita superioară⁠(d):


dacă și numai dacă


Exemplu

În uzul tipic, definiția oficială a notației O nu este folosită direct; mai degrabă, notația O pentru o funcție f se deduce din următoarele reguli de simplificare:

  • Dacă f(x) este o sumă de câțiva termeni, dacă există unul cu cea mai mare viteză de creștere, el poate fi păstrat și toți ceilalți omiși.
  • Dacă f(x) este un produs al mai multor factori, orice constantă (termen din produs care nu depinde de x) poate fi omisă.

De exemplu, fie f(x) = 6x4 - 2x3 + 5 și se presupune că se dorește simplificarea acestei funcții, folosind notația O, pentru a descrie viteza de creștere a acesteia când x tinde la infinit. Această funcție este suma a trei termeni: 6x4, -2x3 și 5. Din cei trei termeni, cel cu cea mai mare viteză de creștere este cel cu cel mai mare exponent în funcție de x, și anume 6x4. Acum se poate aplica a doua regulă: 6x4 este un produs de 6 și x4 în care primul factor nu depinde de x. Omiterea acestui factor are ca rezultat forma simplificată x4. Astfel, spunem că f(x) este un „big-O” al lui (x4). Matematic, putem scrie f(x) = O(x4). Se poate confirma acest calcul folosind definiția formală: fie f(x) = 6x4 - 2x3 + 5 și g(x) = x4. Aplicând definiția formală de mai sus, afirmația că f(x) = O(x4) este echivalentă cu dezvoltarea sa,

pentru un x0 și un M aleși adecvat și pentru orice x > x0. Pentru a demonstra acest lucru, fie x0 = 1 și M = 13. Atunci, pentru orice x > x0:

așa că

Utilizare

Notația Big O are două domenii principale de aplicare:

În ambele aplicații, funcția g(x) care apare în cadrul lui O (...) este de obicei aleasă așa încât să fie cât mai simplă posibil, omițând factori constanți și termeni de ordin inferior.

Există două utilizări formale apropiate, dar cu totul diferite, ale acestei notații:

Distincția aceasta există doar în practică, nu și în principiu — definiția formală pentru „big O” este aceeași pentru ambele cazuri, cu limite diferite pentru argumentul funcției.

Asimptotica infinită

Graficele funcțiilor utilizate în mod obișnuit în analiza algoritmilor, care arată numărul de operații N în raport cu dimensiunea intrării n pentru fiecare funcție

Notația Big O este utilă atunci când se analizează eficiența algoritmilor⁠(d). De exemplu, timpul (sau numărul de pași) necesar pentru a rezolva o problemă de dimensiune n poate fi găsit a fi T(n) = 4n2 - 2n + 2. Când n crește foarte mult, termenul n2 ajunge să domine, astfel încât toți ceilalți termeni pot fi neglijați, de exemplu, atunci când n = 500, termenul 4n2 este de 1000 de ori mai mare ca termenul 2n. Ignorarea acestuia din urmă ar avea un efect neglijabil asupra valorii expresiei pentru cele mai multe scopuri. Mai mult, coeficienții devin irelevanți dacă comparăm cu oricare alt ordin al expresiei, cum ar fi o expresie care conține un termen n3 sau n4. Chiar dacă T(n) = 1.000.000 n2, dacă U(n) = n3, acesta din urmă îl va depăși întotdeauna pe primul când n crește mai mare decât 1.000.000 (T(1.000.000) = 1.000.0003 = U(1.000.000)). În plus, numărul de pași depinde de detaliile modelului mașinii pe care rulează algoritmul, dar diferite tipuri de mașini variază de obicei doar printr-un factor constant în numărul de pași necesari pentru executarea unui algoritm. Deci, notația Big O surprinde ceea ce rămâne: se scrie fie

fie

și se spune că algoritmul are complexitate de ordinul lui n2. Egalul nu mai reprezintă aici egalitate în sensul matematic normal, ci mai degrabă un „este“ mai popular, astfel încât a doua expresie este uneori considerată mai precisă (a se vedea discuția de mai jos despre semnul egal) în timp ce prima este considerată de unii ca un abuz de notație⁠(d).[5]

Asimptotica infinitezimală

Big O poate fi folosită și pentru a descrie termenul de eroare într-o aproximare a unei funcții matematice. Termenii cei mai semnificativi sunt scriși explicit, iar termenii cel mai puțin semnificativi sunt rezumați într-un singur termen Big O. Considerăm, de exemplu, seria exponențială⁠(d) și două expresii ale acesteia care sunt valabile atunci când x este mic:

Cea de a doua expresie (cea cu O(x3)) înseamnă că valoarea absolută a erorii ex - (1 + x2/2) este de cel mult o constantă înmulțită cu | x3 | când x este suficient de aproape de 0.

Proprietăți

Dacă funcția f poate fi scrisă ca o sumă finită a altor funcții, atunci cea mai rapidă creștere determină ordinul lui f(n). De exemplu,

În special, dacă o funcție poate fi legată de un polinom în n, atunci când n tinde spre infinit, se pot ignora termenii de grad mai mic ai polinomului. De asemenea, mulțimile O(nc) și O(cn) sunt foarte diferiți. Dacă c este mai mare decât unu, atunci acesta crește mult mai repede. O funcție care crește mai repede decât nc pentru oricare c se numește superpolinomială. Una care crește mai lent decât orice funcție exponențială de forma cn se numește subexponențială. Un algoritm poate necesita timp atât superpolimonial cât și subexponențial; printre astfel de exemple se numără algoritmii cei mai rapizi cunoscuți pentru factorizarea numerelor întregi și funcția nlog n.

Se poate ignora orice putere a lui n din interiorul logaritmilor. Mulțimea O (log n) este exact același cu O (log nc). Logaritmii diferă numai printr-un factor constant (întrucât log nc = c log n) și astfel notația Big O ignoră termenul. Similar, logaritmii cu diferite baze constante sunt echivalenți. Pe de altă parte, exponențialele cu baze diferite nu sunt de același ordin. De exemplu, 2n nu este același lucru cu 3n.

Schimbarea unităților poate sau nu poate afecta ordinul algoritmului rezultat. Modificarea unităților este echivalentă cu înmulțirea variabilei corespunzătoare cu o constantă oriunde apare. De exemplu, dacă un algoritm rulează în timp de ordinul lui n2, înlocuirea n cu cn înseamnă că algoritmul rulează în timp de ordinul lui c2n2, iar notația Big O ignoră constanta c2. Aceasta se poate scrie ca c2n2 = O(n2). Dacă, totuși, un algoritm rulează în timp de ordinul lui 2n, înlocuirea lui n cu cn dă timp de ordinul 2cn = (2c)n. Aceasta nu este echivalentă cu 2n în general. Schimbarea variabilelor poate afecta, de asemenea, ordinul algoritmului rezultat. De exemplu, dacă timpul de execuție al algoritmului este O(n) atunci când este măsurat în termeni de număr n de cifre al unui număr de intrare x, timpul său de execuție este O(log x) ca funcție de numărul de intrare x însuși, deoarece n = O(log x).

Produsul

Suma

Aceasta înseamnă că , ceea ce înseamnă că este un con convex.

Înmulțirea cu o constantă

Fie k o constantă. Atunci:
dacă k este nenul.

Mai multe variabile

Big O (și little o, Ω, etc.) pot fi utilizate și cu mai multe variabile. Pentru a defini Big O în mod formal pentru mai multe variabile, se presupune că f și g sunt două funcții definite pe o anumită submulțime a lui . Se spune că

dacă și numai dacă [6]

În mod echivalent, condiția pentru unii poate fi înlocuită cu condiția , unde cu se notează norma Cebîșev⁠(d). De exemplu, afirmația

spune că există constantele C și M astfel încât

unde g(n, m) se definește ca

Această definiție permite ca toate componentele lui să crească până la infinit. În special, afirmația

(de exemplu, ) este destul de diferită de

(de exemplu, ).

Sub această definiție, submulțimea pe care este definită o funcție este semnificativă atunci când se generalizează afirmațiile de la contextul univariabilă la cel multivariabilă. De exemplu, dacă și , atunci dacă se restrâng f și g la , dar nu dacă acestea sunt definite pe .

Aceasta nu este singura generalizare a notației Big O la funcții multivariabilă, dar în practică există o oarecare inconsistență în alegerea definiției.[7]

Chestiuni de notație

Semnul egal

Afirmația f(x) este O(g(x)), așa cum este definită mai sus, se scrie de obicei ca f(x) = O(g(x)). Unii consideră că acest lucru este un abuz de notație⁠(d), deoarece utilizarea semnului egal ar putea fi înșelătoare, deoarece sugerează o simetrie, pe care această afirmație nu o are. După cum spune de Bruijn⁠(d), este adevărat că O(x) = O(x2), dar nu și că O(x2) = O(x).[8] Knuth denumește astfel de afirmații „egalități unidirecționale”, deoarece dacă s-ar inversa cele două părți, „am putea deduce lucruri ridicole cum ar fi n = n2 din identitățile n = O(n2)și n2 = O(n2).” [9]

Din aceste motive, ar fi mai precis să folosim notația mulțimilor⁠(d) și să scriem f(x) ∈ O(g(x)), considerând O(g(x)) ca clasă a tuturor funcțiilor h(x) astfel încât | h(x) | ≤ C | g(x) | pentru o constantă C.[9] Cu toate acestea, utilizarea semnului egal este obișnuită. Knuth a subliniat că „matematicienii folosesc în mod obișnuit semnul = așa cum folosesc cuvântul «este» în limba engleză: Aristotel este un om, dar un om nu este neapărat Aristotel.”[10]

Alți operatori aritmetici

Notația Big O poate fi utilizată și în combinație cu alți operatori aritmetici în ecuații mai complicate. De exemplu, cu h(x) + O(f(x)) se notează colecția de funcții având creșterea h(x) plus o parte a cărei creștere este limitată la f(x). Prin urmare,

exprimă același lucru ca și

Exemplu

Să presupunem că se dezvoltă un algoritm care să funcționeze pe o mulțime de n elemente. Dezvoltatorii săi sunt interesați să găsească o funcție T(n) care să exprime cât timp va dura rularea algoritmului (în unele măsurători arbitrare ale timpului) în termeni de număr de elemente din mulțimea de intrare. Algoritmul funcționează apelând mai întâi o subrutină pentru sortarea elementelor din mulțime și efectuarea propriilor operații. Sortarea are o complexitate în timp cunoscută de O(n2), iar după executarea subrutinei algoritmul trebuie să mai ruleze încă 55n3 + 2n + 10 pași înainte de a se termina. Astfel, complexitatea în timp a algoritmului poate fi exprimată ca T(n) = 55 n3 + O(n2). Aici termenii 2n + 10 sunt subsumați în cadrul lui O(n2) cu creștere mai rapidă. Din nou, această utilizare ignoră o parte din semnificația formală a simbolului „=”, dar permite utilizarea notației Big O ca un substitut convenabil.

Utilizări multiple

În utilizarea mai complicată, O (...) poate să apară în diferite locuri într-o ecuație, chiar și de mai multe ori pe fiecare parte. De exemplu, următoarele sunt valabile pentru :

Semnificația acestor afirmații este următoarea: pentru orice funcție care satisface fiecare O (...) din partea stângă, există câteva funcții care satisfac fiecare O (...) din partea dreaptă, astfel încât substituind toate aceste funcții, ecuația face ca cele două părți să fie egale. De exemplu, a treia ecuație de mai sus înseamnă: „Pentru orice funcție f(n) = O(1), există o funcție g(n) = O(en) astfel încât nf(n) = g(n).” În ceea ce privește „notația mulțimilor” de mai sus, înțelesul este că clasa de funcții reprezentată de partea stângă este o submulțime a clasei de funcții reprezentate de partea dreaptă. În această utilizare, „=” este un simbol formal care, spre deosebire de utilizarea obișnuită a lui „=”, nu este o relație simetrică⁠(d). Astfel, de exemplu, nO(1) = O(en) nu implică și afirmația falsă O(en) = nO(1)

Scriere

Big O constă doar dintr-un „O” majuscul. Spre deosebire de notațiile cu nume grecești Bachmann-Landau, nu are nevoie de un simbol special. Cu toate acestea, variantele caligrafice frecvent utilizate, cum ar fi , sunt disponibile în sistemele LaTeX și în sisteme de fonturi derivate.[11]

Ordinul de mărime al unor funcții comune

Mai jos sunt enumerate clase de funcții care se întâlnesc frecvent când se analizează timpul de funcționare al unui algoritm. În fiecare caz, c este o constantă pozitivă și n crește fără limitări. Funcțiile cu o creștere mai lentă sunt în general enumerate mai întâi.

NotațieNumeExemple
constantăDeterminarea dacă un număr binar este par sau impar; Calculul lui ; Utilizarea unei tabele de corespondență⁠(d) de dimensiuni constante
dublu logaritmicăNumărul de comparații folosit pentru a găsi un element folosind căutarea prin interpolare⁠(d) într-un tabel sortat de valori uniform distribuite
logaritmicăGăsirea unui element într-un tablou sortat cu căutare binară sau cu un arbore⁠(d) de căutare echilibrat, precum și toate operațiile pe un heap binomial⁠(d)


polilogaritmicăOrdonarea lanțurilor de matrice poate fi rezolvată în timp polilogaritmic pe o mașină cu acces aleator paralel.


putere fracționarăCăutarea într-un arbore k-d⁠(d)
liniarăGăsirea unui element într-o listă neordonată sau într-un tablou neordonat; adunarea a doi întregi pe n biți prin sumatoare cu transport.
n Logaritm iterat nEfectuarea de triangulări ale unui poligon simplu folosind algoritmul lui Seidel, sau algoritmul union–find.
linearitmică, logliniară, sau cvasiliniarăEfecturea unei transformări Fourier rapide⁠(d); Cea mai rapidă sortare cu comparație⁠(d); heapsort⁠(d) and merge sort
pătraticăÎnmulțirea a două numere cu n cifre printr-un algoritm simplu; algoritmi de sortare simpli, cum ar fi bubble sort⁠(d), selection sort⁠(d) și insertion sort⁠(d); limita (în cel mai rău caz) a unor algoritmi de regulă mai rapizi, ca quicksort, shellsort⁠(d), și tree sort⁠(d)
polinomială sau algebricăParsarea unor gramatici cu arbori adjuncți⁠(d); cuplajul⁠(d) maxim pentru grafuri bipartite; găsirea determinantului prin descompunere LU⁠(d)


Notația L⁠(d) sausubexponențialăFactorizarea unui număr folosind ciurul pătratic⁠(d) sau ciurul algebric⁠(d)


exponențtialăGăsirea soluției (exacte) a problemei comis-voiajorului folosind programare dinamică⁠(d); aflarea dacă două afirmații logice sunt echivalente folosind căutarea cu forță brută⁠(d)
factorialăRezolvarea problemei comis-voiajorului prin căutarea cu forță brută; generarea tuturor permutațiilor nerestricționate ale unei mulțimi parțial ordonate⁠(d); găsirea determinantului prin dezvoltare Laplace; enumerarea tuturor partițiilor unei mulțimi⁠(d)

Afirmația este uneori relaxată la pentru a obține formule mai simple pentru complexitatea asimptotică. Pentru orice k > 0 și c > 0, este o submulțime a lui pentru orice , deci poate fi considerat ca un polinom de grad mai mare.

Notații asimptotice asociate

Big O este cea mai frecvent folosită notație asimptotică pentru compararea funcțiilor. Împreună cu alte notații asociate, ea formează familia notațiilor Bachmann-Landau.

Notația Little-o

Intuitiv, afirmația „f(x) este o(g(x))” (a se citi f(x) este little-o de g(x) înseamnă că g(x) crește mult mai rapid decât f(x). Fie f ca înainte o funcție cu valori reale sau complexe și g o funcție cu valori reale, ambele fiind definite pe unele submulțimi nemărginite ale numerelor reale pozitive, astfel încât g(x) să fie strict pozitivă pentru toate valorile suficient de mari ale lui x. Se scrie

dacă pentru orice constantă pozitivă ε există o constantă N astfel încât

[12]

De exemplu, avem

și

Diferența dintre definiția anterioară pentru notația big-O și definiția aceasta a lui little-o este că, în timp ce prima trebuie să fie adevărată pentru cel puțin o constantă M, aceasta din urmă trebuie să fie valabilă pentru orice constantă pozitivă ε , oricât de mică ar fi.[5] În acest fel, notația little-o face o afirmație mai puternică decât notația big-O corespunzătoare: orice funcție care este little-o a lui g este de asemenea big O al lui g, dar nu orice funcție care este big-O al lui g este și little-o de g. De exemplu, dar

Deoarece g(x) este nenul, sau cel puțin devine nenul dincolo de un anumit punct, relația f(x) = o(g(x)) este echivalentă cu

(și așa a definit, de fapt, Landau [12] notația little-o).

Little-o respectă o serie de operații aritmetice. De exemplu,

dacă c este o constantă nenulă și atunci , și
dacă și atunci

De asemenea, ea satisface o relație de tranzitivitate:

dacă și atunci

Notația Big Omega

Există două definiții foarte răspândite și incompatibile ale afirmației

unde a este un număr real, ∞ sau -∞, unde f și g sunt funcții reale definite într-o vecinătate a lui a și unde g este pozitivă în această vecinătate.

Prima (cronologic) este folosită în teoria analitică a numerelor⁠(d), iar cealaltă în teoria complexității. Când se întâlnesc cele două subiecte, această situație este generatoare de confuzie.

Definiția Hardy-Littlewood

În 1914, G.H. Hardy⁠(d) și John Edensor Littlewood⁠(d) au introdus noul simbol ,[13] care este definit după cum urmează:

Prin urmare este negarea lui .

În 1916, aceiași autori au introdus cele două noi simboluri și , definite astfel:[14]

;

Aceste simboluri au fost folosite de Edmund Landau⁠(d), cu aceleași semnificații, în 1924.[15] După Landau, notațiile nu au fost niciodată folosite din nou exact așa; a devenit și a devenit .

Aceste trei simboluri , precum și (ceea ce înseamnă că sunt satisfăcute ambele relații și ), sunt acum utilizate în prezent în teoria analitică a numerelor⁠(d).[16] [17]

Exemple simple

Avem

și mai precis

Avem

și mai precis

dar

Definiția Knuth

În 1976, Donald Knuth a publicat o lucrare pentru a justifica utilizarea simbolului pentru a descrie o proprietate mai puternică. Knuth a scris: „Pentru toate aplicațiile pe care le-am văzut până acum în domeniul informaticii, o cerință mai puternică [...] este mult mai potrivită”. El a definit

cu comentariul: „Deși am schimbat definiția dată de Hardy și a Littlewood pentru , mă simt justificat în acest sens, deoarece definiția lor nu este deloc folosită pe scară largă și pentru că există și alte modalități de a spune ceea ce vor ei să spună în cazurile relativ rare în care se aplică definiția lor.”[18]

Familia de notații Bachmann-Landau

NotațiaNume[18]DescriereDefiniție formalăLimit Definition[19][20][21][18][13]
Small O; Small Ohf este dominată de g asimptotic
Big O; Big Oh; Big Omicron este mărginită superior de g (până la un factor constant) asimptotic
Big Thetaf este mărginită atât superior cât și inferior de g asimptotic și (versiunea Knuth)
De ordinul luif este egal cu g asimptotic
Big Omega în teoria numerelor (Hardy–Littlewood) nu este dominată de g asimptotic
Big Omega în teoria complexității (Knuth)f este mărginit inferior de g asimptotic
Small Omegaf domină g asimptotic

Definițiile limitelor presupun pentru n suficient de mare. Tabelul este (parțial) sortat de la cel mai mic la cel mai mare, în sensul că o, O, Θ, ~, Ω (versiunea lui Knuth), ω pe funcții corespund cu <, ≤, ≈, =, ≥, > pe dreapta reală[21] (versiunea Hardy-Littlewood a lui Ω nu corespunde însă unei astfel de descrieri).

Informatica folosește Big O, big Theta Θ, little o, omega ω și notația Big Omega Ω a lui Knuth.[22] Teoria analitică a numerelor utilizează adesea big O, small o, Big Omega Ω a lui Hardy-Littlewood (cu sau fără indicele +, - sau ±) și notațiile .[16] Notația small omega ω nu este utilizată la fel de des în analiză.[23]

Utilizarea în informatică

În mod informal, în special în domeniul informaticii, notația big O poate fi folosită oarecum diferit pentru a descrie o legătură asimptotică strânsă acolo unde notația Theta Θ ar putea fi mai potrivită într-un anumit context. De exemplu, atunci când se analizează o funcție T(n) = 73n3 + 22n2 + 58, toate afirmațiile următoare sunt în general acceptabile, dar limite mai stricte (cum ar fi numerele 2 și 3 de mai jos) sunt de obicei preferate în locul limitelor mai relaxate (cum ar fi numărul 1 de mai jos).

  1. T(n) = O(n100)
  2. T(n) = O(n3)
  3. T(n) = Θ(n3)

Afirmațiile echivalente în română sunt:

  1. T(n) crește asymptotic nu mai repede decât n100
  2. T(n) crește asymptotic nu mai repede decât n3
  3. T(n) crește asimptotic la fel de repede ca n3.

Deci, în timp ce toate cele trei afirmații sunt adevărate, în fiecare din ele există progresiv mai multe informații. În unele domenii, cu toate acestea, notația Big O (numărul 2 din listele de mai sus) ar fi folosită mai frecvent decât notația Big Theta (punctele 3 din listele de mai sus). De exemplu, dacă T(n) reprezintă timpul de funcționare a algoritmului nou dezvoltat pentru dimensiunea de intrare n, inventatorii și utilizatorii algoritmului ar putea fi mai înclinați să pună o limită asimptotică superioară timpului cât va dura funcționarea lui, fără a face vreo afirmație explicită despre limita inferioară asimptotică.

Alte notații

În cartea lor Introducere în algoritmi⁠(d), Cormen⁠(d), Leiserson⁠(d), Rivest și Stein⁠(d) iau în considerare mulțimea funcțiilor f care satisfac

Într-o notație corectă, această mulțime poate fi, de exemplu, numită O(g), unde

există constante pozitive c și astfel încât pentru toți .[24]

Autorii afirmă că folosirea operatorului de egalitate (=) pentru a nota apartenența la mulțime, în locul operatorului de apartenență încetățenit (∈), este un abuz de notație, dar acest lucru are avantaje.[25] Într-o ecuație sau inegalitate, folosirea unei notații asimptotice reprezintă o funcție anonimă din mulțimea O(g), care elimină termenii de ordin inferior și ajută la reducerea aglomerării inutile în ecuații, de exemplu: [26]

Extensii la notațiile Bachmann-Landau

O altă notație folosită uneori în domeniul informaticii este Õ (citiți soft-O): f(n) = Õ(g(n)) este o prescurtare pentru f(n) = O(g(n) log k g(n)) pentru un anume k. În esență, este o notație Big O, ignorând factorii logaritmici, deoarece efectele ratei de creștere a unei alte funcții superlogaritmice indică o explozie a ratei de creștere pentru parametrii de intrare de dimensiuni mari, care este mai importantă pentru a prezice relele performanțe efectele mai fine cu care contribuie de factorul (factorii) de creștere logaritmică. Această notație este adesea folosită pentru a evita „pierderea în amănunte” în cadrul vitezelor de creștere care sunt declarate ca fiind prea strâns mărginite pentru chestiunea relevantă (întrucât logk n este întotdeauna o(nε) pentru orice constantă k și orice ε > 0).

De asemenea, notația L⁠(d), definită ca

este convenabilă pentru funcțiile care sunt între polinomială și exponențială în raport cu .

Generalizări și utilizări conexe

Generalizarea funcțiilor care iau valori în orice spațiu vectorial normat este simplă (înlocuind valoarea absolută cu norma), unde f și g nu este nevoie săi aibă valori în același spațiu. O generalizare a funcțiilor g cu valori în orice grup topologic⁠(d) este de asemenea posibilă. „Procesul de limitare” xx0 poate fi și el generalizat prin introducerea unei baze de filtrare⁠(d) arbitrare, adică a rețelelor⁠(d) direcționate f și g. Notația o poate fi folosită pentru a defini derivate și diferențiabilitatea în spații destul de generale, precum și echivalența (asimptotică) a funcțiilor,

care este o relație de echivalență și o noțiune mai restrictivă decât relația „f este Θ(g)” de mai sus. (Se reduce la lim f/g = 1 dacă f și g sunt funcții cu valoare reală pozitivă.) De exemplu, 2x este Θ(x), dar 2x - x nu este o(x).

Istorie (notații Bachmann-Landau, Hardy și Vinogradov)

Simbolul O a fost introdus pentru prima dată de teoreticianul numerelor Paul Bachmann în 1894, în al doilea volum al cărții sale Analytische Zahlentheorie („Teoria analitică a numerelor⁠(d)”), al cărei prim volum (care nu conținea încă notația Big O) a fost publicat în 1892.[1] Teoreticianul numerelor Edmund Landau⁠(d) a adoptat-o și, astfel, a fost inspirat să introducă în 1909 notația o; [2] aici ambele sunt numite acum simboluri Landau. Aceste notații au fost folosite în matematica aplicată în anii 1950 pentru analiza asimptotică.[27] Simbolul (în sensul „nu este o de”) a fost introdus în 1914 de Hardy și Littlewood.[13] Hardy și Littlewood au introdus, de asemenea, în 1918 simbolurile („dreapta”) și („stânga”), [14] precursori ai simbolurilor moderne („nu este mai mică decât small o de”) și („nu este mai mare decât small o de”). Astfel, simbolurile Omega (cu semnificațiile lor originale) sunt uneori denumite și „simboluri Landau”. Această notație a devenit frecvent folosită în teoria numerelor cel puțin din anii 1950.[28] În anii 1970, Big O a fost popularizată în domeniul informaticii de către Donald Knuth, care a introdus notația aferentă Theta și a propus o altă definiție pentru notația Omega.[18]

Landau nu a folosit niciodată Theta mare și simboluri omega-mic.

Simbolurile lui Hardy erau (din punct de vedere al notației O moderne)

  and  

(Hardy însă nu a definit niciodată și nu a folosit notația , nici , așa cum s-a afirmat uneori). De asemenea, Hardy a introdus simbolurile și (precum și alte simboluri) în tratatul său din 1910, „Orders of Infinity”, și îl folosește doar în trei lucrări (1910-1913). În restul de aproape 400 de lucrări și cărți, el folosește consistent simbolurile Landau O și o.

Notația lui Hardy nu mai este folosită. Pe de altă parte, în 1930,[29] teoreticianului rus al numerelor Ivan Matveievici Vinogradov⁠(d) a introdus notația lui, , care este folosită din ce în ce mai mult în teoria numerelor în locul notației . Avem

și în mod obișnuit ambele notații sunt utilizate în aceeași lucrare.

Big O reprezenta inițial „de ordinul lui” ("Ordnung", Bachmann 1894) și este așadar o literă latină. Nici Bachmann, nici Landau nu o numesc vreodată „Omicron”. Simbolul a fost considerat mult mai târziu (1976) de către Knuth drept omicron mare[18] probabil în legătură cu definiția sa a simbolului Omega. Nu se folosește cifra zero.

Note

Lectură suplimentară

  • Hardy, G. H. (). Orders of Infinity: The 'Infinitärcalcül' of Paul du Bois-Reymond. Cambridge University Press. 
  • Knuth, Donald (). „1.2.11: Asymptotic Representations”. Fundamental Algorithms. The Art of Computer Programming. 1 (ed. 3rd). Addison–Wesley. ISBN 978-0-201-89683-1. 
  • Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (). „3.1: Asymptotic notation”. Introduction to Algorithms (ed. 2nd). MIT Press and McGraw–Hill. ISBN 978-0-262-03293-3. 
  • Sipser, Michael (). Introduction to the Theory of Computation. PWS Publishing. pp. 226–228. ISBN 978-0-534-94728-6. 
  • Avigad, Jeremy; Donnelly, Kevin (). Formalizing O notation in Isabelle/HOL (PDF). International Joint Conference on Automated Reasoning. doi:10.1007/978-3-540-25984-8_27. 
  • Black, Paul E. (). Black, Paul E., ed. „big-O notation”. Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. Accesat în . 
  • Black, Paul E. (). Black, Paul E., ed. „little-o notation”. Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. Accesat în . 
  • Black, Paul E. (). Black, Paul E., ed. „Ω”. Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. Accesat în . 
  • Black, Paul E. (). Black, Paul E., ed. „ω”. Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. Accesat în . 
  • Black, Paul E. (). Black, Paul E., ed. „Θ”. Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. Accesat în . 

Legături externe