How do you visualize difference between O(log n) and O(n log n)?
Solution 1
Imagine a database with with every person in the world. That's 6.7 billion entries. O(log n) is a lookup on an indexed column (e.g. primary key). O(n log n) is returning the entire population in sorted order on an unindexed column.
- O(log n) was finished before you finished reading the first word of that sentence.
- O(n log n) is still calculating...
Another way to imagine it:
log n
is proportional to the number of digits in n.
n log n
is n times greater.
Try writing the number 1000
once versus writing it one thousand times. The first takes O(log n) time, the second takes O(n log n) time.
Now try that again with 6700000000
. Writing it once is still trivial. Now try writing it 6.7 billion times. Even if you could write it once per second you'd be dead before you finished.
Solution 2
You could visualize it in a plot, see here for example:
Solution 3
No, O(n log n)
= O(n) * O(log n)
In mathematics, when you have an expression (i.e. e=mc^2), if there is no operator, then you multiply.
Normally the way to visualize O(n log n) is "do something which takes log n
computations n
times."
If you had an algorithm which first iterated over a list, then did a binary search of that list (which would be N + log N
) you can express that simply as O(n)
because the n
dwarfs the log n
for large values of n
Solution 4
A (log n)
plot increases, but is concave downward, which means:
- It increases when n gets larger
- It's rate of increasing decreases when n gets larger
A (n log n)
plot increases, and is (slightly) concave upward, which means:
- It increases when n gets larger
- It's rate of increasing (slightly) increases when n gets larger

Comments
-
Passionate programmer over 1 year
Binary search has a average case performance as
O(log n)
and Quick Sort withO(n log n)
isO(n log n)
is same as O(n) + O(log n) -
JUST MY correct OPINION over 13 yearsAbout the best way to visualize is to use vision. Well-done.
-
mqp over 13 yearsWhat is
O(n) * O(log n)
supposed to mean? -
Phil over 13 yearstake a function from the class O(n), and another function from the class O(log n), the resulting function is in the class O(n log n). That's what is meant by O(n)*O(log n) = O(n log n)
-
Phil over 13 yearsoops I meant "multiplying them together" by saying "result"
-
squarecandy over 6 yearsAwesome. Thanks for pointing out this resource. I used Wolfram to plot 4 common types of Computational Complexity discussed in Week 3 of Harvard's CS50 course. wolframalpha.com/input/… youtube.com/embed/IM9sHGlYV5A