Why do we ignore co-efficients in Big O notation?
Solution 1:
The purpose of the Big-O notation is to find what is the dominant factor in the asymptotic behavior of a function as the value tends towards the infinity.
As we walk through the function domain, some factors become more important than others.
Imagine f(n) = n^3+n^2
. As n
goes to infinity, n^2
becomes less and less relevant when compared with n^3
.
But that's just the intuition behind the definition. In practice we ignore some portions of the function because of the formal definition:
f(x) = O(g(x))
asx->infinity
if and only if there is a positive real
M
and a realx_0
such as
|f(x)| <= M|g(x)|
for allx > x_0
.
That's in wikipedia. What that actually means is that there is a point (after x_0
) after which some multiple of g(x)
dominates f(x)
. That definition acts like a loose upper bound on the value of f(x)
.
From that we can derive many other properties, like f(x)+K = O(f(x))
, f(x^n+x^n-1)=O(x^n)
, etc. It's just a matter of using the definition to prove those.
In special, the intuition behind removing the coefficient (K*f(x) = O(f(x))
) lies in what we try to measure with computational complexity. Ultimately it's all about time (or any resource, actually). But it's hard to know how much time each operation take. One algorithm may perform 2n
operations and the other n
, but the latter may have a large constant time associated with it. So, for this purpose, isn't easy to reason about the difference between n
and 2n
.
Solution 2:
From a (complexity) theory point of view, the coefficients represent hardware details that we can ignore. Specifically, the Linear Speedup Theorem dictates that for any problem we can always throw an exponentially increasing amount of hardware (money) at a computer to get a linear boost in speed.
Therefore, modulo expensive hardware purchases two algorithms that solve the same problem, one at twice the speed of the other for all input sizes, are considered essentially the same.
Big-O (Landau) notation has its origins independently in number theory, where one of its uses is to create a kind of equivalence between functions: if a given function is bounded above by another and simultaneously is bounded below by a scaled version of that same other function, then the two functions are essentially the same from an asymptotic point of view. The definition of Big-O (actually, "Big-Theta") captures this situation: the "Big-O" (Theta) of the two functions are exactly equal.
The fact that Big-O notation allows us to disregard the leading constant when comparing the growth of functions makes Big-O an ideal vehicle to measure various qualities of algorithms while respecting (ignoring) the "freebie" optimizations offered by the Linear Speedup Theorem.