Big-O: Asymptotic Upper Bound
f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f ( n ) = O ( g ( n )) if there exist positive constants c c c and n 0 n_0 n 0 such that for all n ≥ n 0 n \ge n_0 n ≥ n 0 :
0 ≤ f ( n ) ≤ c ⋅ g ( n ) 0 \le f(n) \le c \cdot g(n) 0 ≤ f ( n ) ≤ c ⋅ g ( n )
In words: f f f grows at most as fast as g g g , ignoring constant factors and small inputs. O O O is pronounced “big-O”.
Big-Ω \Omega Ω : Asymptotic Lower Bound
f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f ( n ) = Ω ( g ( n )) if there exist positive constants c c c and n 0 n_0 n 0 such that for all n ≥ n 0 n \ge n_0 n ≥ n 0 :
0 ≤ c ⋅ g ( n ) ≤ f ( n ) 0 \le c \cdot g(n) \le f(n) 0 ≤ c ⋅ g ( n ) ≤ f ( n )
In words: f f f grows at least as fast as g g g . The purple circles (worst-case cost) must be above the curve c ⋅ g ( n ) c \cdot g(n) c ⋅ g ( n ) .
Big-Θ \Theta Θ : Asymptotically Tight Bound
f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f ( n ) = Θ ( g ( n )) iff f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f ( n ) = O ( g ( n )) and f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f ( n ) = Ω ( g ( n )) . In words: f f f and g g g grow at the same rate , within constant factors.
There exist c 1 , c 2 > 0 c_1, c_2 > 0 c 1 , c 2 > 0 and n 0 n_0 n 0 such that for all n ≥ n 0 n \ge n_0 n ≥ n 0 :
0 ≤ c 1 ⋅ g ( n ) ≤ f ( n ) ≤ c 2 ⋅ g ( n ) 0 \le c_1 \cdot g(n) \le f(n) \le c_2 \cdot g(n) 0 ≤ c 1 ⋅ g ( n ) ≤ f ( n ) ≤ c 2 ⋅ g ( n )
Examples
Function Big-O Big-Ω \Omega Ω Big-Θ \Theta Θ 3 n 2 + 2 n + 1 3n^2 + 2n + 1 3 n 2 + 2 n + 1 O ( n 2 ) O(n^2) O ( n 2 ) ✓, O ( n 3 ) O(n^3) O ( n 3 ) ✓Ω ( n 2 ) \Omega(n^2) Ω ( n 2 ) ✓, Ω ( n ) \Omega(n) Ω ( n ) ✓Θ ( n 2 ) \Theta(n^2) Θ ( n 2 ) ✓n log n n \log n n log n O ( n 2 ) O(n^2) O ( n 2 ) ✓, O ( n log n ) O(n \log n) O ( n log n ) ✓Ω ( n ) \Omega(n) Ω ( n ) ✓Θ ( n log n ) \Theta(n \log n) Θ ( n log n ) ✓n 2 n^2 n 2 O ( n 2 log n ) O(n^2 \log n) O ( n 2 log n ) ✓Ω ( n 2 ) \Omega(n^2) Ω ( n 2 ) ✓Cannot say n 2 = O ( n log n ) n^2 = O(n \log n) n 2 = O ( n log n ) ✗
Proving 3 n 2 + 2 n + 1 = O ( n 2 ) 3n^2 + 2n + 1 = O(n^2) 3 n 2 + 2 n + 1 = O ( n 2 )
We need c c c and n 0 n_0 n 0 such that 3 n 2 + 2 n + 1 ≤ c ⋅ n 2 3n^2 + 2n + 1 \le c \cdot n^2 3 n 2 + 2 n + 1 ≤ c ⋅ n 2 for all n ≥ n 0 n \ge n_0 n ≥ n 0 .
For n ≥ 1 n \ge 1 n ≥ 1 : 2 n ≤ 2 n 2 2n \le 2n^2 2 n ≤ 2 n 2 and 1 ≤ n 2 1 \le n^2 1 ≤ n 2 , so 3 n 2 + 2 n + 1 ≤ 3 n 2 + 2 n 2 + n 2 = 6 n 2 3n^2 + 2n + 1 \le 3n^2 + 2n^2 + n^2 = 6n^2 3 n 2 + 2 n + 1 ≤ 3 n 2 + 2 n 2 + n 2 = 6 n 2 .
Choose c = 6 c = 6 c = 6 , n 0 = 1 n_0 = 1 n 0 = 1 . ✓
Common Growth Rates
Ranked from slowest to fastest:
O ( 1 ) < O ( log n ) < O ( n ) < O ( n ) < O ( n log n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) O(1) < O(\log n) < O(\sqrt{n}) < O(n) < O(n \log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) O ( 1 ) < O ( log n ) < O ( n ) < O ( n ) < O ( n log n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n !)
The base of the logarithm is irrelevant: log 2 n \log_2 n log 2 n and log 10 n \log_{10} n log 10 n differ by a constant factor (log 2 n = log 2 10 ⋅ log 10 n \log_2 n = \log_2 10 \cdot \log_{10} n log 2 n = log 2 10 ⋅ log 10 n ), which big-O absorbs.
Practical Interpretation
O ( 1 ) O(1) O ( 1 ) : constant time, e.g. array access, arithmetic
O ( log n ) O(\log n) O ( log n ) : binary search depth, divide-and-conquer recursion depth
O ( n ) O(n) O ( n ) : single pass over all elements
O ( n log n ) O(n \log n) O ( n log n ) : efficient comparison-based sorting
O ( n 2 ) O(n^2) O ( n 2 ) : nested loops, insertion sort worst case
O ( 2 n ) O(2^n) O ( 2 n ) : enumerating all subsets
Θ \Theta Θ , O O O , and Ω \Omega Ω are Sets
Formally, O ( g ( n ) ) O(g(n)) O ( g ( n )) is a set of functions. Writing f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f ( n ) = O ( g ( n )) means f ( n ) ∈ O ( g ( n ) ) f(n) \in O(g(n)) f ( n ) ∈ O ( g ( n )) . This set perspective makes the notation transitive: if f ∈ O ( g ) f \in O(g) f ∈ O ( g ) and g ∈ O ( h ) g \in O(h) g ∈ O ( h ) , then f ∈ O ( h ) f \in O(h) f ∈ O ( h ) . Likewise for Θ \Theta Θ and Ω \Omega Ω . In addition, f ∈ Θ ( g ) f \in \Theta(g) f ∈ Θ ( g ) iff g ∈ Θ ( f ) g \in \Theta(f) g ∈ Θ ( f ) (symmetry).
Summary
Notation Meaning Mnemonic O ( g ( n ) ) O(g(n)) O ( g ( n )) Upper bound ”at most” Ω ( g ( n ) ) \Omega(g(n)) Ω ( g ( n )) Lower bound ”at least” Θ ( g ( n ) ) \Theta(g(n)) Θ ( g ( n )) Tight bound ”exactly” (within constants) Rule of thumb Drop constants and lower-order terms 3 n 2 + 4 n → O ( n 2 ) 3n^2 + 4n \to O(n^2) 3 n 2 + 4 n → O ( n 2 )