next up previous
Next: The New Course Up: A First Course on Previous: A First Course on

Introduction

A first course in theoretical computer science should introduce students to a variety of important computational models and show how these models can be used to specify problems (languages), measure their inherent complexity (time and space bounds and complexity classes), and determine fundamental limits on computation (computational inequalities, tradeoffs, and unsolvable problems). We describe a first course that achieves these objectives by building on the background of students in programming, computer architecture, discrete mathematics, and an introductory course on algorithms and data structures. The new course provides a good foundation for advanced courses on computational complexity (complexity classes and circuit complexity), applied theory of computation (space-time tradeoffs and I/O complexity), and parallel computational complexity (parallel models and algorithms, P-complete problems, and the VLSI model).

The first theory course has traditionally covered formal languages and automata, computability, and some material on NP-completeness, in this order. Many textbooks, such as [2-8], have been designed for courses of this type.1

In the new course we start by exploring logic circuits, deterministic and nondeterministic machines with memory, resource bounds, and P-complete and NP-complete problems. This material grounds complexity theory in concrete models, demonstrates the interrelationships between these models, and motivates the correspondences between languages and machines taught in the second half of the semester.


next up previous
Next: The New Course Up: A First Course on Previous: A First Course on
John Savage
1998-03-15