How to think about algorithms - Edmonds, Jeff (Cambridge, 2008)