Source: https://web.mit.edu/16.070/www/lecture/big_o.pdf