Predict the output
Using a budget of 10⁸ steps, what does this print?
import math
n = 100_000
budget = 10 ** 8
fits = {"n log n": n * math.log2(n) <= budget,
"n^2": n * n <= budget}
print(fits)Choose an answer, then open Show answer below to check it.
Show answer
Answer: A {'n log n': True, 'n^2': False}
Right: about 1.7 million steps fit; 10 billion do not.
Checking the largest input against a rough budget tells you which complexity class to aim for before you code.
Why not the others?
- B {'n log n': True, 'n^2': True}. 100,000 squared is 10¹⁰, a hundred times the budget.
- C {'n log n': False, 'n^2': False}. n log n is about 1.66 million, well under 10⁸.
Illustrative
Assumption: A rule of thumb for simple steps per second in a compiled language; Python runs fewer.
Text version
n = 20:
| Class | Simple steps | Time | Fits 1 s? |
|---|---|---|---|
| O(log n) | 4 | 0 s | Yes |
| O(n) | 20 | 0 s | Yes |
| O(n log n) | 86 | 1 µs | Yes |
| O(n²) | 400 | 4 µs | Yes |
| O(2ⁿ) | 1.05 million | 10.5 ms | Yes |
n = 100,000:
| Class | Simple steps | Time | Fits 1 s? |
|---|---|---|---|
| O(log n) | 17 | 0 s | Yes |
| O(n) | 100,000 | 1 ms | Yes |
| O(n log n) | 1.66 million | 16.6 ms | Yes |
| O(n²) | 10 billion | 100 s | No, over budget |
| O(2ⁿ) | too many | – | No, over budget |
n = 1,000,000:
| Class | Simple steps | Time | Fits 1 s? |
|---|---|---|---|
| O(log n) | 20 | 0 s | Yes |
| O(n) | 1 million | 10 ms | Yes |
| O(n log n) | 19.9 million | 0.199 s | Yes |
| O(n²) | 1 trillion | 2.78 hours | No, over budget |
| O(2ⁿ) | too many | – | No, over budget |