## About this book

### Introduction

The theory of computing provides computer science with concepts, models, and formalisms for reasoning about both the resources needed to carry out computa tions and the efficiency of the computations that use these resources. lt provides tools to measure the difficulty of combinatorial problems both absolutely and in comparison with other problems. Courses in this subject help students gain an alytic skills and enable them to recognize the limits of computation. For these reasons, a course in the theory of computing is usually required in the graduate computer science curriculum. The barder question to address is which topics such a course should cover. We believe that students should learn the fundamental models of computation, the limitations of computation, and the distinctions between feasible and intractable. In particular, the phenomena ofNP-completeness and NP-hardness have pervaded much of science and transformed computer science. One option is to survey a large nurober of theoretical subjects, typically focusing on automata and formal languages. However, these subjects are less important to theoretical computer sci ence, and to computer science as a whole, now than in the past. Many students have taken such a course as part of their undergraduate education. We chose not to take that route because computability and complexity theory are the subjects that we feel deeply about and that we believe are important for students to learn. Furthermore, a graduate course should be scholarly. lt is better to treat important topics thoroughly than to survey the field.

### Keywords

Automat automata automata theory complexity complexity theory computability theory computer computer science formal language formal languages logic number theory

#### Authors and affiliations

- Steven Homer
- Alan L. Selman

- 1.Department of Computer ScienceBoston UniversityBostonUSA
- 2.Department of Computer Science and EngineeringUniversity at BuffaloBuffaloUSA

### Bibliographic information