Computational Complexity - Goldreich (Cambridge University Press, 2008)