Grokking Algorithms: An illustrated guide for programmers and curious people [pdf]