Published online by Cambridge University Press: 01 June 2011
By and large, we assume that the readers of this book have at least some intuitive knowledge about algorithms and complexity. For the sake of completeness, however, we provide in this appendix an informal introduction to fundamental concepts of computational complexity: problems, algorithms, running time, easy and hard problems, etc. For a more thorough and rigorous introduction to this topic, we refer the reader to the classical monograph by Garey and Johnson , or to other specialized books like Aho, Hopcroft and Ullman , Papadimitriou , or Papadimitriou and Steiglitz . Note that Cook et al.  and Schrijver  also provide gentle introductions to the topic, much in the spirit of this appendix.
In Section B.8, we propose a short primer on the complexity of list-generating algorithms; such algorithms are usually not discussed in basic textbooks on complexity theory, but they arise naturally in several chapters of our book.
Intuitively speaking, an algorithmic or computational problem is a generic question whose formulation contains a number of undetermined parameters. For instance, we can think of “addition” as the generic problem of adding two numbers (the numbers themselves must be specified before any specific computation can be performeed). Similarly, “solving quadratic equations” of the form ax2+bx+c = 0 is a problem which can be handled by an appropriate algorithm as soon as the numerical values of the parameters a,b, and c are known.