Next: The New Course
Up: A First Course on
Previous: A First Course on
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: The New Course
Up: A First Course on
Previous: A First Course on
John Savage
1998-03-15