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