Concept · Algorithms & complexity

Big-O notation

Describe how an algorithm's time or memory grows with input size, ignoring constants, so you can compare approaches before running them.

3 mintime complexityspace complexityasymptoticamortized

Big-O notation describes how the cost of an algorithm — time or memory — grows as its input grows. It keeps only the fastest-growing term and drops constant factors, so 3n² + 10n + 7 steps is simply O(n²). It answers "what happens when the input is 100 times bigger?", not "how many milliseconds will this take?".

The common classes

Classn = 1,000n = 1,000,000Typical source
O(1)11array index, hash-map lookup
O(log n)~10~20binary search, balanced-tree lookup
O(n)1,0001,000,000one pass over the input
O(n log n)~10,000~20,000,000efficient sorting
O(n²)1,000,00010¹²nested loops over the input
O(2ⁿ)astronomicalastronomicaltrying every subset

Working it out

  • Sequential steps add, and the biggest term wins: an O(n) scan then an O(n log n) sort is O(n log n).
  • Nested loops multiply: a loop over n items containing a loop over n items is O(n²) — including hidden loops such as slices.Contains or Array.prototype.includes inside a loop.
  • Halving the problem each step gives O(log n).
  • Space complexity counts extra memory, including the recursion stack.

Say which case you mean. Hash-map lookups are O(1) on average but O(n) in the pathological worst case; quicksort averages O(n log n) and can degrade to O(n²). Amortized cost spreads occasional expensive operations over many cheap ones — appending to a dynamic array is amortized O(1) even though a resize copies everything.

Where it misleads

Big-O ignores constants and memory layout, so for small inputs a "worse" algorithm often wins: a linear scan of 20 contiguous integers beats a hash lookup, and insertion sort beats merge sort on tiny arrays (which is why real sort implementations switch to it). Use Big-O to rule out approaches that can't scale, then measure. The algorithms lesson applies it to real code, and latency numbers put constants back in.

Learn it in depth