Skip to content

Big O Analysis

Definition

Big O Definition


Complexity Classes

Complexity Classes


Analysis Techniques

Analysis Techniques


Code Pattern Recognition

// O(1) - Constant
int first = arr[0];
map.get(key);

// O(log n) - Logarithmic (halving)
while (n > 0) {
    n = n / 2;  // or n >>= 1
}

// O(n) - Linear
for (int i = 0; i < n; i++) {
    // O(1) work
}

// O(n log n) - Divide and conquer with linear merge
void mergeSort(arr, l, r) {
    if (l < r) {
        int m = (l + r) / 2;
        mergeSort(arr, l, m);      // T(n/2)
        mergeSort(arr, m+1, r);    // T(n/2)
        merge(arr, l, m, r);       // O(n)
    }
}
// T(n) = 2T(n/2) + O(n) = O(n log n)

// O(n²) - Nested loops
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        // O(1) work
    }
}

// O(2ⁿ) - Two recursive calls
int fib(int n) {
    if (n <= 1) return n;
    return fib(n-1) + fib(n-2);
}

Common Mistakes

Common Mistakes


Tips & Tricks

Tips and Tricks