This is the full syllabus for COMPSCI 501. It includes text from the index, schedule, and requirements pages -- if those are later updated, I may or may not get to update this page.
COMPSCI 501 counts as an upper-level undergraduate elective course for computer science majors, a menu course for math majors in the computing track, and a theory core for M.S. students in computer science. Undergraduate and graduate students will have the same assignments and the same grade scale.
Instructor Contact Info: David Mix Barrington, 210 CMPSCI building, 545-4329, office hours for Spring 2026: TBA
I generally answer my email fairly reliably. I do answer my other email address, but less often, and it doesn't forward to my main address.
TA Contact Info: Quinn Mayo, Joshua Russell,
UCA Contact Info: Bennett Gillig, Isik Ulusan.
Office Hours: (LGRT 220 unless specified)
The course is primarily intended for undergraduates in computer science and related majors such as mathematics or computer engineering, for master's students in computer science, and for graduate students in other fields with the appropriate background and interest. COMPSCI 311 (theory of algorithms) is the primary prerequisite, though this may be negotiable for students with a strong mathematics background. The mathematical techniques taught in COMPSCI 250 (or similar courses like MATH 300 or MATH 455) will be used heavily. No programming will be assigned, but familiarity with programming at the level of at least COMPSCI 187 (data structures) will sometimes be assumed. This is probably the mathematically most difficult course in the COMPSCI undergraduate curriculum. It is a semi-elective course -- it fills requirements for any CMPSCI major and many MATH majors, but should be taken only by students whose mathematical ability and/or motivation is average or above relative to COMPSCI majors.
The textbook for the course is Introduction to the Theory of Computation by Michael Sipser, third edition. This is a very good book: I will be following it very closely for my lectures, and it is a very good long-term reference, but it is rather expensive. I will be using the third edition -- the second edition has pretty much the same material (except for extra material on CFL's that I won't be using) but exercise numbers will differ. The book information has been posted on SPIRE, and thus the University's ECampus textbook entity has copies of the book available.
Lectures, typically 4-6 totaling 90-120 minutes per week, will be asynchronous and recorded on Echo360. They will follow the textbook pretty closely.
I taught this course in Spring 2021 as a fully remote class, and before that in Spring 2017, when it was considerably smaller, so I've debated how to implement it for Spring 2022 and thereafter, coming up with a "semi-flipped" model.
We have two synchronous class meetings per week, Mondays and Wednesdays 5:30-6:45 p.m. in room S131 of the Integrative Learning Center.
My plan is to have ten discussion meetings (as in COMPSCI 250 or 311) on most Mondays. You'll be divided into groups of about four students and work together on a set of problems, with staff circulating around the room.
For lectures, we have the recorded ones from 2021, with slides, delivered by me or by Rik Sengupta, broken into five videos each week (60 total, averaging about 20 minutes each). These will be asynchronous and will be on Echo360.
Then, with the other 16 class sessions, we will have "semi-lectures". I'll address the main points of each of recorded lectures, but not in as much detail as the lectures will do. I'll also have more opportunity to work examples on the "blackboard", and respond to student questions. These will be recorded on Echo360.
We'll be using Piazza for most internal communications, Gradescope for exams and homework, and Moodle mostly to link things.
Reading assignments are from Sipser, An Introduction to the Theory of Computation, third (or second) edition, available through the university's eCampus entity and elsewhere.
Class meetings are MW 5:30-6:45 in room S131 ILC.
The Spring 2021 lectures are asynchronous and will be on Echo360. There are five lectures for each week of classes, and the chapter and section numbers from Sipser are given for each week below.
On most Monday class sessions there will be synchronous in-class discussions, where students will be presented with a problem and solve in in groups using breakout rooms. Attendance is required -- if you cannot make a meeting for good reasons, apply for an excused absence on the Moodle site.
The remaining class sessions will be "semi-lectures" and attendance will not be graded. They will be recorded on Echo360.
There will be one midterm exam, during class time on Wednesday 2 April, with a review session during the previous semi-lecture. There will be a final exam scheduled by the University during finals period.
PART I: Regular, Context-Free and Computable Languages
Week 1 Video Lectures: Basics, Induction, Regular Expressions (0, 1.3)
Mon 02 Feb Semi-Lecture 1
Wed 04 Feb Semi-Lecture 2 (UGRAD ADD/DROP)
Week 2 Video Lectures: Finite Automata, Kleene, Myhill-Nerode (1)
Mon 09 Feb Feb Semi-Lecture 3
Wed 11 Feb Discussion #1 (GRAD ADD/DROP)
Week 3 Video Lectures: Context-Free Languages (2.1-2.3)
Mon 16 Feb NO CLASS (Presidents' Day holiday)
Wed 18 Feb Semi-Lecture 4
Thu 19 Feb Discussion #2 (MONDAY SCHEDULE)
Fri 20 Feb HW#1 due at 11:59 p.m.
Sat 21 Feb Late deadline for HW#1 at 11:59 p.m.
Week 4 Video Lectures: Turing Machines, CT Thesis (3)
Mon 23 Feb Semi-Lecture 5
Wed 25 Feb Discussion #3
Week 5 Video Lectures: Decidability (4)
Mon 02 Mar Semi-Lecture 6
Wed 04 Mar Discussion #4
Fri 06 Mar HW#2 due at 11:59 p.m.
Sat 07 Mar Late deadline for HW#2 at 11:59 p.m.
Week 6 Video Lectures: Reducibility (5)
Mon 09 Mar Semi-Lecture 7
Wed 11 Mar Discussion #5
SPRING BREAK
Week 7 Video Lectures: Recursion Theorem, Kolmogorov (6.1, 6.4)
Mon 23 Mar Semi-Lecture 8
Wed 25 Mar Discussion #6
Fri 27 Mar HW#3 due at 11:59 p.m.
Sat 28 Mar Late deadline for HW#3 at 11:59 p.m.
Week 8 Review and MIDTERM on Ch. 1-6
Mon 30 Mar Review Session
Wed 01 Apr MIDTERM EXAM, ILC 131, 5:30-7:30 pm, on Chapters 1-6 (Weeks 1-7)
PART II: Complexity Theory
Week 9 Video Lectures: Time Complexity, P and NP (7.1-7.3)
Mon 06 Apr Semi-Lecture 9
Wed 08 Apr Discussion #7
Fri 10 Apr HW#4 due at 11:59 p.m.
Sat 11 Apr Late deadline for HW#4 at 11:59 p.m.
Week 10 Video Lectures: NP Completeness (7.4, 7.5)
Mon 13 Apr Semi-Lecture 10
Wed 15 Apr Semi-Lecture 11
Fri 17 Apr NO CLASS (MONDAY SCHEDULE BUT CLASS CANCELED)
Mon 20 Apr NO CLASS (Patriots' Day holiday)
Week 11 Video Lectures: Space Complexity (8.1-8.3)
Wed 22 Apr Semi-Lecture 12 and Discussion #8
Fri 24 Apr HW#5 due at 11:59 p.m.
Sat 25 Apr Late deadline for HW#5 at 11:59 p.m.
Week 12 Video Lectures: Logspace Complexity (8.4-8.6)
Mon 27 Apr Discussion #9
Week 13 Video Lectures: Circuit Complexity and the NC Classes
Wed 29 Apr Semi-Lecture 13
Mon 04 May Discussion #10
Wed 06 May Review Session for Final Exam
Fri 08 May HW#6 due at 11:59 p.m.
Sat 09 May Late deadline for HW#6 at 11:59 p.m.
FINAL EXAM (cumulative): TBA during exam period
Your grade in COMPSCI 501 will be based on the following:
All work submitted must be your own in presentation. How much outside help is allowed depends on the course component.
Last modified 26 January 2026