How to Think about Algorithms - Jeff Edmonds (Cambridge University Press, 2008)