How do you visualize difference between O(log n) and O(n log n)?

12,028

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:

enter image description here

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
Share:
12,028
Passionate programmer
Author by

Passionate programmer

Learning Qt.

Updated on June 07, 2022

Comments

  • Passionate programmer
    Passionate programmer over 1 year

    Binary search has a average case performance as O(log n) and Quick Sort with O(n log n) is O(n log n) is same as O(n) + O(log n)

  • JUST MY correct OPINION
    JUST MY correct OPINION over 13 years
    About the best way to visualize is to use vision. Well-done.
  • mqp
    mqp over 13 years
    What is O(n) * O(log n) supposed to mean?
  • Phil
    Phil over 13 years
    take 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
    Phil over 13 years
    oops I meant "multiplying them together" by saying "result"
  • squarecandy
    squarecandy over 6 years
    Awesome. 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