In CS 301 we explore the nature of computation and what it means to compute. We study important models of computation such as finite automata, push-down automata, and Turing machines, and investigate their fundamental computational power. Topics include deterministic versus non-deterministic computation, and a theoretical basis for the study of NP-completeness.


Prerequisites: CS 102, CS 201
Suggested course(s) to take next: CS 302, CS 312

I really enjoy teaching Theory of Computation, in part because it is so different from any other course in the major. The course develops a keen understanding and intuition for just what computation is - what it means and what it is all about - and it also involves some very fun and challenging problems that are very much like puzzle solving at a mathematical level. After taking this class, you realize that computational science is really a very old discipline, with important implications to human thought.
-- Prof. Dickerson