## Levels of complexity (in the real world)

In CS school, we learned about computational complexity (and if you start tuning out you can just skip to the next paragraph). Some algorithms take “linear time” - an amount of time roughly equal to the data that you have. So if you have n pieces of data, computing on them will take about n units of time. (and if your data size doubles, it’ll take twice as long.) Some take “quadratic time” - so if your data size doubles, it’ll take 4 times as long. Some take “exponential time”, like 2^n, so if your data set gets *just one piece bigger*, the program will take twice as long. (and of course you could fill in any other function; some things take n^3 time, or log(n) time, or whatever.) So you want to do as many algorithms that are “linear time” or “logarithmic time” (n, or log(n)) if possible, and avoid things that are quadratic if you can, and really avoid anything that takes exponential time.

In the real world, I feel like you get different kinds of complexity:
- problems with helpers
- neutral problems