Processing math: 100%

What is Big O Notation and Time Complexity?

Given an array = [1, 3, 4, 5, ..., 11], if we have a function, e,g, such as the one for finding the sum of this array:


def find_sum(array):
    total = 0
    for each i in array:
        total += i
    return total


we often would like to understand/describe the complexity of the function we've wrote, which can be done with the concept of time complexity and big O notation.


Time Complexity is a way of showing how the runtime of a function increases as the size of the input increases, there are different types of time complexity such as:

  • linear time complexity
  • constant time complexity (stays as a constant)
  • quadratic time complexity

Big O Notation expresses in a mathimetical way.
  • linear time complexity: O(n)
  • constant time complexity (stays as a constant): O(1)
  • quadratic time complexity: O(n^2)

For example, the time T of the find_sum function in terms of the number of input n can be expressed as:

T=an+b

To derive the big O notation based on this expression, follow two steps:

  1. find the fastest growing term (which is an since b is constant)
  2. take out the coefficient (which is a in an, and n is left -> O(n))

So the problem left is how to derive the expression for T=an+b, a simple approach by line by line can be described as follows:


def find_sum(array):
    total = 0 -> O(1)
    for each i in array: -> this line and the following will result in O(n)
        total += i -> O(1)
    return total -> O(1)


So the total T=O(1)+n \times O(1) + O(1), which can be expressed as T=an+b where b denotes the constant for two O(1)s.


For more details, have a look at the excellent video from CS Dojo.