There are three introductory undergraduate courses in theory of computing:
- CS 577 covers algorithm design and analysis.
- CS 520 covers automata theory, computability theory, and computational complexity theory.
- CS 435 covers cryptography.
CS 577 and CS 520 form the core that all graduate students in CS are expected to have taken before graduate school; undergraduates who intend to do graduate work in CS should take both.
At the graduate level there are two introductory courses that are offered every year:
- CS 787 covers algorithms.
- CS 710 covers complexity theory.
In addition, there are three more specialized regular courses (CS 809, CS 812, CS 830), as well as the topics course CS 880, which is a full-fledged course but with a topic that depends on the offering. Those courses may not be offered every year. All graduate students interested in theory of computing are encouraged to take CS 880 whenever it is offered.
Although the material for the qualifying exam in theory of computing does not stretch far beyond the material of CS 520 and CS 577, students preparing for the exam should take CS 710 and CS 787 before the exam.