https://medium.com/@sydabailey/simplify-your-understanding-of-big-o-notation-and-algorithmic-complexity-dfe20a277b7b