În matematică și informatică, notația Big O este o modalitate de a compara ratele de creștere a diferitelor funcții. Este adesea utilizată pentru a compara eficiența diferiților algoritmi, ceea ce se face prin calcularea cantității de memorie necesară și a timpului necesar pentru a finaliza.

Notația Big O este adesea utilizată pentru a identifica gradul de complexitate al unei probleme, cunoscută și sub numele de clasa de complexitate a problemei. Matematicianul Paul Bachmann (1837-1920) a fost primul care a folosit această notație, în cea de-a doua ediție a cărții sale "Analytische Zahlentheorie", în 1896. Edmund Landau (1877-1938) a popularizat notația. Din acest motiv, atunci când se vorbește despre simbolurile Landau, se face referire la această notație.

Notația Big O este denumită astfel după termenul "ordinul funcției", care se referă la creșterea funcțiilor. Notația Big O este utilizată pentru a găsi limita superioară (cea mai mare valoare posibilă) a ratei de creștere a funcției, ceea ce înseamnă că se calculează cel mai lung timp necesar pentru a transforma intrarea în ieșire. Acest lucru înseamnă că un algoritm poate fi grupat în funcție de timpul pe care îl poate dura în cel mai rău caz, în care se va urma de fiecare dată calea cea mai lungă.

Mai precis, date două funcții pozitive f ( x ) {\displaystyle f(x)}f(x) și g ( x ) {\displaystyle g(x)}{\displaystyle g(x)} , spunem că f {\displaystyle f}f se află în O mare a lui g {\displaystyle g}g (scris f ∈ O ( g ) {\displaystyle f\in O(g)}{\displaystyle f\in O(g)} ) dacă pentru un număr suficient de mare de x {\displaystyle x}x , f ( x ) ≤ k g ( x ) {\displaystyle f(x)\leq k\cdot g(x)}{\displaystyle f(x)\leq k\cdot g(x)} pentru o anumită constantă k {\displaystyle k}k .

Big O este o expresie care găsește timpul de execuție în cel mai pesimist scenariu, arătând cât de eficient este un algoritm fără a fi nevoie să se ruleze programul pe un computer. Acest lucru este util și datorită faptului că diferite computere pot avea hardware diferit și, prin urmare, au nevoie de diferite cantități de timp pentru a-l finaliza. Deoarece Big O presupune întotdeauna cel mai rău caz, poate arăta o măsurătoare coerentă a vitezei: indiferent de hardware, O ( 1 ) {\displaystyle O(1)}{\displaystyle O(1)} se va finaliza întotdeauna mai repede decât O ( n ! ) {\displaystyle O(n!)}. {\displaystyle O(n!)}, deoarece acestea au niveluri diferite de eficiență.