https://medium.com/@smithcoen21/10-algorithms-every-machine-learning-enthusiast-should-know-68f3a6b1b823