Navigation
Calculators Pricing Blog About Contact
Get Started
Get Started Login
⏱️

Big O Calculator

Calculate time complexity and Big O notation for algorithms and code.

Estimated Runtime
Operations Required
n = 100
n = 10,000
n = 1,000,000

What Is Big O Notation?

Big O notation is a mathematical notation used in computer science to describe the time complexity or space complexity of an algorithm. It characterizes how an algorithm's runtime or memory usage grows as the input size (n) increases, focusing on the worst-case scenario.

Big O provides a standardized way to compare algorithm efficiency independent of hardware, programming language, or constant factors. It answers the critical question: "How does performance scale when data size doubles, triples, or grows to millions of elements?"

Why Big O matters: An O(n²) algorithm might run fine on 100 items (10,000 operations) but become unusably slow at 10,000 items (100 million operations). Big O helps you choose algorithms that scale efficiently for real-world data sizes.

Common Time Complexities (Best to Worst)

O(1) — Constant Time

Runtime is constant regardless of input size. The algorithm executes in the same time whether n = 10 or n = 1,000,000.

Examples:

  • Accessing an array element by index: array[5]
  • Hash table lookup (average case)
  • Inserting/removing at the end of a dynamic array
  • Mathematical operations: addition, comparison, assignment
f(n) = 5 → O(1)
Constant factors (5, 10, 100) are dropped in Big O

O(log n) — Logarithmic Time

Runtime grows logarithmically. Doubling input size adds only a constant amount of work. Extremely efficient for large datasets.

Examples:

  • Binary search in a sorted array
  • Balanced binary search tree operations (search, insert, delete)
  • Finding an element in a sorted array using divide-and-conquer
f(n) = 3 log₂(n) + 7 → O(log n)
Base of log and constants don't matter in Big O

O(n) — Linear Time

Runtime grows linearly with input size. Doubling n doubles runtime. Most fundamental algorithms are linear.

Examples:

  • Iterating through an array once: for (i = 0; i < n; i++)
  • Linear search (finding element in unsorted array)
  • Calculating sum or average of array elements
  • Copying an array
f(n) = 4n + 12 → O(n)
Keep highest-order term, drop constants

O(n log n) — Linearithmic Time

Common in efficient sorting algorithms. Slightly worse than linear but much better than quadratic.

Examples:

  • Merge sort, quicksort (average case), heapsort
  • Fast Fourier Transform (FFT)
  • Sorting then processing sorted data
f(n) = n log₂(n) + 5n → O(n log n)
n log n dominates n for large n

O(n²) — Quadratic Time

Runtime grows with the square of input size. Doubling n quadruples runtime. Common in nested loops.

Examples:

  • Bubble sort, selection sort, insertion sort
  • Nested loops over the same array:
for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
        // O(n²)
  • Checking all pairs in an array
  • Simple matrix multiplication

O(2ⁿ) — Exponential Time

Runtime doubles with each additional input element. Becomes impractical very quickly.

Examples:

  • Recursive Fibonacci (naive implementation)
  • Solving the Traveling Salesman Problem by brute force
  • Generating all subsets of a set (power set)

Warning: Exponential algorithms are only feasible for very small inputs (n < 20-30). At n = 50, an O(2ⁿ) algorithm requires ~1 quadrillion operations.

O(n!) — Factorial Time

Runtime grows factorially. The worst possible complexity for practical purposes.

Examples:

  • Generating all permutations of a set
  • Brute-force solution to the Traveling Salesman Problem

At n = 10, factorial is 3.6 million. At n = 20, it's 2.4 × 10¹⁸ (2.4 quintillion).

How to Analyze Code for Big O

Step 1: Count Basic Operations

Identify loops, recursive calls, and operations that depend on input size n.

Step 2: Determine How Operations Scale

  • Single loop 0 to n: O(n)
  • Nested loops (both 0 to n): O(n²)
  • Halving n repeatedly (binary search): O(log n)
  • Recursive doubling (exponential growth): O(2ⁿ)

Step 3: Keep the Dominant Term

If f(n) = 3n² + 5n + 100, drop lower-order terms and constants:

3n² + 5n + 100 → O(n²)
n² dominates n and constants for large n

Step 4: Ignore Constant Multipliers

O(5n) = O(n), O(100n log n) = O(n log n). Constants don't affect how the function scales.

Example Analysis

function findDuplicates(array):
    for i = 0 to n-1:              // O(n)
        for j = i+1 to n-1:        // O(n) worst case
            if array[i] == array[j]:
                return true
    return false

Analysis: Outer loop runs n times, inner loop runs up to n times → nested loops → O(n²)

Space Complexity

Big O also describes memory usage. Space complexity measures how much additional memory an algorithm needs as input size grows.

Examples

  • O(1) space: Sorting array in-place (bubble sort), swapping two variables
  • O(n) space: Creating a copy of the array, recursive call stack for linear recursion
  • O(log n) space: Recursive call stack for binary search
  • O(n²) space: Creating a 2D matrix to solve dynamic programming problems

Trade-offs: Often you can reduce time complexity by using more space (memoization in dynamic programming), or save space by accepting longer runtime (in-place vs. out-of-place algorithms).

Real-World Impact of Big O

Performance at Scale

Assume 1 operation = 1 microsecond (1 µs). Here's how long different complexities take for various input sizes:

Big O n = 10 n = 100 n = 1,000 n = 10,000
O(1) 1 µs 1 µs 1 µs 1 µs
O(log n) 3 µs 7 µs 10 µs 13 µs
O(n) 10 µs 100 µs 1 ms 10 ms
O(n log n) 33 µs 664 µs 10 ms 130 ms
O(n²) 100 µs 10 ms 1 sec 100 sec
O(2ⁿ) 1 ms 4 × 10¹⁶ years

Key insight: O(n²) becomes impractical above 10,000 elements. O(2ⁿ) is only viable for tiny inputs (n < 20-25).

Industry Applications

  • Google Search: Uses O(log n) algorithms to search billions of pages in milliseconds
  • Database indexing: B-tree indexes provide O(log n) lookup instead of O(n) table scans
  • Social media feeds: O(n log n) sorting to rank millions of posts by relevance
  • GPS routing: Dijkstra's algorithm (O(E log V)) finds shortest paths in road networks

Algorithm Optimization Strategies

1. Use Better Data Structures

  • Array → Hash table: O(n) search → O(1) search
  • Unsorted array → Sorted array: O(n) search → O(log n) binary search
  • Linked list → Array: O(n) access → O(1) access by index
  • Array → Heap: O(n) find min → O(1) peek, O(log n) extract

2. Avoid Nested Loops When Possible

  • Use hash tables to eliminate inner loops (two-sum problem: O(n²) → O(n))
  • Sort first, then use two pointers instead of nested iteration
  • Precompute values to avoid redundant calculations

3. Divide and Conquer

  • Break problem into smaller subproblems (merge sort, binary search)
  • Often reduces O(n²) to O(n log n)

4. Dynamic Programming / Memoization

  • Cache results of expensive recursive calls
  • Fibonacci: O(2ⁿ) → O(n) with memoization
  • Trade space for time (O(n) space to save exponential time)

5. Early Exit Conditions

  • Stop searching once you find the answer
  • Use heuristics to prune search space
  • Best-case improvements (worst-case Big O unchanged)

Common Big O Misconceptions

Misconception 1: Big O Tells You Exact Runtime

Reality: Big O describes growth rate, not absolute speed. O(n) with a constant factor of 1,000,000 can be slower than O(n²) with factor of 1 for small n.

Misconception 2: Lower Big O Is Always Faster

Reality: For small inputs (n < 100), a simple O(n²) algorithm may outperform a complex O(n log n) algorithm due to lower overhead. Big O matters most at scale.

Misconception 3: Constants Don't Matter

Reality: Big O ignores constants because they don't affect scaling, but in practice, O(100n) is 100× slower than O(n). Constants matter—they're just not part of Big O notation.

Misconception 4: Best Case = Typical Performance

Reality: Big O usually describes worst-case complexity. Quicksort is O(n log n) average case but O(n²) worst case (already sorted data with poor pivot selection).

Misconception 5: Big O Only Applies to Sorting/Searching

Reality: Big O applies to any algorithm: graphics rendering, machine learning training, database queries, network protocols, encryption, compression, etc.

Remember: Big O is a tool for understanding scalability, not a guarantee of performance. Real-world optimization requires profiling, testing, and considering hardware, caching, and other factors beyond algorithmic complexity.

Frequently Asked Questions

Big O notation measures how an algorithm's runtime or space complexity grows as the input size (n) increases. It describes the worst-case scenario growth rate, ignoring constant factors and lower-order terms. O(n) means linear growth, O(n²) means quadratic growth, etc.
O(n) means runtime grows linearly with input size (doubling n doubles time). O(log n) means runtime grows logarithmically (doubling n adds a constant amount). O(log n) is much faster: at n=1,000,000, O(n) requires 1M operations while O(log n) requires only ~20.
Big O focuses on how algorithms scale, not absolute performance. O(5n) and O(1000n) both scale linearly, so both are O(n). Constants matter in practice but don't change the fundamental growth rate that Big O describes.
O(1) constant time is the fastest—runtime doesn't depend on input size. Examples: array access by index, hash table lookup (average case), stack push/pop. No algorithm can be faster than O(1).
O(n log n) is excellent for sorting and many divide-and-conquer algorithms. It's the best achievable for comparison-based sorting. It's much better than O(n²) but slightly slower than O(n). Most efficient sorting algorithms (merge sort, quicksort, heapsort) are O(n log n).
O(2ⁿ) exponential time is only acceptable for very small inputs (n < 20-25). Examples: brute-force password cracking (intentionally slow), some dynamic programming problems, recursive Fibonacci (naive). For n=30, you're already at 1 billion operations.
Multiply the complexities. Two nested loops both running 0 to n give O(n) × O(n) = O(n²). If outer loop is O(n) and inner is O(log n), total is O(n log n). If loops are independent (one after another), add them: O(n) + O(n) = O(n).

Embed this Calculator

Copy the code below and paste it into your website's HTML. Your visitors can use this calculator for free.

px × px
<iframe src="https://calculatorteam.com/embed/big-o-calculator" width="100%" height="600" style="border:none;border-radius:12px;" loading="lazy" title="Big O Calculator"></iframe>

Report an Issue

Let us know what's wrong with this calculator. We'll review and fix it as soon as possible.