Why can constant factors and lower-order terms be dropped when describing running time?
Because for large $n$ the highest power dominates everything else — no constant is large enough to survive a change in growth rate.
* Big constants lift a curve; only the power sets its slope — so the steeper class always overtakes. *
Take two concrete examples:
- $10^2 n + 10^5$ — a linear function, despite the enormous constants
- $10^5 n^2 + 10^8 n$ — a quadratic function, despite the linear term with the huge coefficient
For small $n$ the constants are all you see: at $n=1$ the "linear" function is dominated entirely by its $10^5$ term. But run $n$ up and the ordering flips permanently. The linear function multiplies by 10 when $n$ does; the quadratic one multiplies by 100. Do that a few times and no starting constant can bridge the gap.
This is why asymptotic analysis is honest about being a large-$n$ statement. It deliberately says nothing about small inputs — and it is exactly that renunciation that makes the classification stable across machines, languages and compilers, since all those affect only the constants.
Practical corollary: a "slower" algorithm with better constants can genuinely win on small inputs. Real sort implementations exploit this, switching to insertion-sort below a few dozen elements. The asymptotics tell you which one wins eventually, not which one wins today — you still have to know your $n$.
Go deeper:
Time complexity — table of common classes — constant through exponential, with the algorithms that live in each class.