Course Home Activities Academic Honesty Communication Policies Exams Schedule Faculty (Home)

CSC 341: Automata, Formal Languages, and Complexity Theory
Spring 2019

Basic Information

Instructor: Fahmida Hamid
Class Times:
  • CSC341-01:MWF (9:00 AM - 9:50 PM) @ Noyce-3821
  • CSC341-02:MWF (1:00 PM - 1:50 PM) @ Noyce-1302
Office: Noyce-3811
Office Hours: Tue (3:00 PM - 6:00 PM) and Thurs (3:00 PM - 6:00 PM)


CSC 207 and either MAT 218, CSC 208 or MAT 208


Introduction to the Theory of Computation, third edition, Michael Sipser.
CENGAGE Learning. ISBN-13: 978-1-133-18779-0, ISBN-10: 1-133-18779-X.

Course Overview

In your journey through computation, you likely have noticed that many problems can be solved with the same solution through a skill you have honed called abstraction. Through this process, you may have noticed more nuanced connections between problems. Some problems require some translation before being solved using the solution to another problem. Some problems are immune this sort of transformation and feel fundamentally more difficult than others. Some problems feel downright impossible: are they actually impossible?

In this course, we study the theory of computation where we use mathematics to model problems of increasing complexity and study their relationships with each other. Although some applications may be discussed from time to time, this course will emphasize the formal underpinnings and theory of computer science.
By going through this modeling process, we can:

  • Deeply understand a problem and its potential corner cases.
  • Prove properties of a problem, e.g., the correctness of potential solutions or whether said problem has a solution at all.
  • Reduce one problem to others of similar complexity.
  • Categorize this problem as easier or harder than other problems in a precise way.
By the end of the course, we will explore the limits of computation.
  • Are there problems that are intractable in practice?
  • Are there problems that can provably never have a solution?
After this course, you will be able to:
  • Manipulate and reason about mathematical definitions like computer programs.
  • Model problems using mathematics and use these models to perform the techniques described above.
  • Understand when a problem is intractable or undecidable.