Description:Reviewing in a systematic way the most significant results obtained in the study of computational complexity, this book follows a balanced approach which is partly algorithmic and partly structuralist, assuming a basic knowledge of computational theory, elementary logic and programming techniques. From an algorithmic point of view, Introduction to the Theory of Complexity presents many "natural" problems and limits their complexity by illustrating algorithms which solve them. From a structural point of view, the book concerned with properties of complexity classes, inclusions between classes, implications between several hypotheses about complexity classes, and identification of structural properties of problems that affect their computational complexity. In addition, the book contains a wealth of worked examples and numerous problems.