Announcements
-
Class and Labs start Wednesday 21 January
Course Info
Instructor: Prof. Andrew Danner
Class: MW 9:00am-10:15am Science Center 204
Lab A: W 1:05-2:35pm Martin 227
Office hours: M 10:30am-12:00pm, R 1:30-2:40pm Martin 306
Textbook: Introduction to the Theory of Computation 3e by Michael Sipser (any edition is ok) Errata.
Clickers: You will need an iClicker (physical device, not the app) for this class. Register your iClicker here.
Edstem: CS46 Q&A forum
Course Description
Welcome to CS46: Theory of Computation! This course is an introduction to the formal systems that are commonly used as abstract models for computational processes. We will study a variety of computational models, and classify and solve problems in each of them. While computers are now ubiquitous and the idea of an algorithm seems natural, where did these ideas originate? Why, for instance, do we have memory on our machines --- is it necessary for computation, or simply a convenience? Do other methods of computation even exist? Could we solve more interesting problems with another model?
Along the way, this course will develop mathematical concepts which are fundamentally important for computer science: decidability, undecidability, and computational complexity. We will go beyond simply saying "this problem seems hard" and show that some computational problems are inherently harder than others, or simply unsolvable by computers. We will examine the limits of computers and computation, and consider the consequences of these limits. By approaching these topics from a formal standpoint, this course aims to teach students how to describe and to reason precisely about computational objects.
Course Goals
By the end of this course, you will have developed the following knowledge and skills:
-
You will know how to analyze the powers and limits of various models of computation.
-
You will learn and understand several standard proof techniques, including induction, contradiction, and diagonalization.
-
You will be able to identify problems that are computationally intractable and argue why these problems might be hard to solve efficiently.
Above all, the goal of this course is to instill a deep understanding of the limits of computation, and how to think about these in a thorough and systemic way.
Student Responsibilities
CS46 is different from most other computer science courses, in that the course focuses on abstract thinking about problems. It does not ask you (often) to implement every solution in code. This course is much more about reasoning about which problems are solvable by computers, and less about actually solving every problem with a coded project. To succeed in this course, you should consistently do the following:
-
Attend class and lab sessions:
The primary introduction to course material is through class instruction. Attending class is essential for understanding the subject. Lab sessions provide additional time to work on solutions. Lab attendance is mandatory.
-
Participate actively in the learning process:
The best way to learn this material is through constant effort. This means trying to work out proofs yourself rather than simply reading through solutions. During class we will often derive solutions collaboratively. Labs provide additional time to experiment with solutions. There is a very strong correlation between students who ask questions (in class/lab/office hours/EdStem) and students who do well in this class.
-
Start the homework assignments early:
CS46 is not a coding-heavy course; it is a course with an emphasis on rigorous thought and explanation. It is extremely difficult to bang out proofs and solutions at the last minute. I understand that it is not always possible to put serious time into an assignment early. However, even 30-60 minutes will be helpful, to ensure that you understand what the problems ask of you and you start thinking about how to solve them early.
-
Seek help early:
It is essential in this class that you not fall behind. If you find yourself falling behind, or if you’re having trouble grasping a concept, come to office hours. Ask (and answer!) questions on the course discussion forum. Set up an appointment to talk with me. Or just stop by my office when my door is open.
Schedule
| WEEK | DAY | ANNOUNCEMENTS | TOPIC & READING | LABS |
| 1 | Jan 21 | Course Introduction
| ||
| 2 | Jan 26 | Proof methods, DFAs, regular languages
|
| |
Jan 28 | ||||
| 3 | Feb 02 | Drop/Add Ends | NFAs and Regular Expressions |
|
Feb 04 | ||||
| 4 | Feb 09 | Non-regular languages, CFGs |
| |
Feb 11 | ||||
| 5 | Feb 16 | Pushdown automata |
| |
Feb 18 | ||||
| 6 | Feb 23 | Non-context-free languages, TM Intro |
| |
Feb 25 | Exam 1 | |||
| 7 | Mar 02 | Turing Machine Variants |
| |
Mar 04 | ||||
Mar 09 | Spring Break | |||
Mar 11 | ||||
| 8 | Mar 16 | Decidability and Undecidability |
| |
Mar 18 | ||||
| 9 | Mar 23 | Reductions |
| |
Mar 25 | Exam 2 Last Day to Declare CR/NC (Mar 27) | |||
| 10 | Mar 30 | Rice's Theorem |
| |
Apr 01 | ||||
| 11 | Apr 06 | Time Complexity |
| |
Apr 08 | ||||
| 12 | Apr 13 | NP and NP-completeness |
| |
Apr 15 | Exam 3 | |||
| 13 | Apr 20 | The Recursion Theorem |
| |
Apr 22 | ||||
| 14 | Apr 27 | Wrapup and Review |
| |
Apr 29 | ||||
May 07 | Final Exams Start | |||
May 14 | Final Exams End | |||