An introductory course in theoretical computer science, aimed at giving students the power of using mathematical abstraction and rigorous proof to understand computation. Thus equipped, students will be able to design and use algorithms that apply to a wide variety of computational problems, with confidence about their correctness and efficiency, as well as recognize when a problem may have no algorithmic solution. At the same time, they will gain an appreciation for the beautiful mathematical theory of computation that is independent of (indeed, predates) the technology on which it is implemented.
- Syllabus, Content Plan, and Textbooks
- Schedule, Lecture Notes, Assignments
- Ed (forum for discussions, announcements, Q&A, communication with course staff)
- Gradescope (for submitting and receiving feedback on assignments)
- Canvas (has lecture recordings - check both Panopto and Zoom cloud recordings)
- Participation Portfolio Guidelines and Examples