Introduction to Computational
Introduction | Topics |
| Grading | Readings
| Schedule of Topics
| Problem Sets
Instructor: Rocco Servedio (517 CSB, office hours Wed 9-11)
Email: rocco at cs dot columbia dot etcetera.
Teaching Assistant: Li-Yang Tan. Email: liyang at cs dot
columbia dot youknowtherest. Office hours: Tues/Thurs 12:10-1:10.
Course website: http://www.cs.columbia.edu/~rocco/Teaching/S10/cs4236/
Many computational problems (such as multiplying two numbers, or sorting
a list of numbers) are known to be "easy" in the sense that we have
efficient algorithms for them. Unfortunately, many other computational
problems of great practical importance (such as factoring large numbers,
or finding the shortest tour that passes through all the cities on a map)
seem to be difficult, in the sense that no efficient algorithms
are known. Are these problems really inherently
difficult -- do no efficient
algorithms exist? -- or do we just need to come up with cleverer
algorithms that can solve these problems efficiently?
such as these lie at the heart of computational complexity, which
is the study of the fundamental abilities and limitations of efficient
computation. Over the past few decades, computational complexity
has emerged as one of the most dynamic, interesting and important areas in
computer science; indeed, the core question of computational
complexity theory ("does P equal NP?") is now widely viewed as one
of the most famous and important open questions in all of computer
science and mathematics.
Computational complexity has given us more than just questions,
though; it has made fundamental contributions to our understanding of
many central ideas and topics in computer science.
To give a few examples, our understanding of many interesting and
practically important optimization problems was revolutionized by
the theory of NP-completeness several decades ago.
More recently, the use of randomness as a tool for designing efficient
algorithms was pioneered in computational complexity.
Even the notion of mathematical proof has undergone a revolution
as a consequence of interactive proofs and probabilistically
checkable proofs (PCPs) in complexity theory! We'll study
all these topics, and more, in this class.
List of Topics
This is a preliminary list; we may cover more or less material
depending on how the semester progresses.
Basic resources for computation (time, space, nondeterminism) and
their associated complexity classes (P, NP, PSPACE and more)
Relationships among resources (P versus NP, time versus space, and more)
Reductions & completeness (NP completeness, PSPACE completeness,
Counting problems, #P
Randomness as a computational resource; associated
Nonuniform models of computation; circuit complexity; lower bounds
Interactive proofs & IP=PSPACE
Probabilistically checkable proofs (PCP) and inapproximability
The prerequisite for this course is an introductory course on
theory of computation, i.e. W3261 (or the equivalent
at another university), with a good grade (B+ or higher). If you do
not formally meet this requirement but still wish to take this course,
you must come to my office hours to discuss your background.
A prior course in algorithms such as W3139 or W4231 is also helpful but is
More concretely, you should be familiar with the following topics:
Ideally you will have had some exposure to the material in Chapter 7
of Sipser's book, but this is not required.
Prior acquaintance with P, NP-completeness and the like is also helpful
but definitely not required.
General mathematical maturity (e.g. comfort with proofs) will be assumed.
Important: Big-O notation and basic analysis of algorithms.
Chapter 3 in "Introduction to Algorithms" by
Cormen, Leicerson, Rivest and Stein is more than sufficient.
Important: Basic discrete math. The course
Computer Science 3203 and the "Mathematical Background" section
(Appendix VIII) of CLRS are good sources here.
Important: You should be comfortable with
reading and writing proofs.
Chapter 0 of Sipser's book "Introduction to the Theory of Computation"
is a good source here.
Important: You should be comfortable with the basics of Turing
machines and computability theory. Chapters 3, 4 and 5 of Sipser's book
are good sources here.
The requirements of the course are as follows:
The biweekly problem sets will be due on Thursdays at 1:10pm (at
the start of class).
You are allowed six late days for the semester.
Each late day is exactly 24 hours. Late days
cannot be subdivided -- five minutes late counts as one late day,
and turning one problem in late makes the whole set late.
an exception, you must have your undergraduate advisor (for undergrads) or your
graduate advisor (for graduate students) contact me. Late days cannot
be used for the take-home final.
If you exceed the 6 allocated late days, each additional late day
you take will result in a 15% penalty in the score for that entire
Biweekly problem sets (70% of grade).
Your solutions must be typed and printed. You should submit a hard copy to
the TA at the start of class; if you cannot submit a hard copy,
you may use the "Drop Box" in Courseworks (
click here for more information on this).
Take-home final exam (30% of grade).
The problem sets will require you to do proofs. Some problems
will be quite challenging; you are advised to start the problem
You are encouraged to discuss the course material and the homework
with each other in small groups (2-3 people), as long as you list all
partners on your problem set.
Discussion of homework problems may include
brainstorming and verbally walking through possible solutions, but should
not include one person telling the others how to solve the problem.
In addition, each person must write up their solutions entirely
on their own;
you may not look at another student's written solutions.
You may consult outside materials, but you may not consult solutions
to previous years' assignments, whether they are official course
solutions or student solutions. All materials you consult must be
Please consult me if you have any questions about this policy.
When in doubt play it safe. If I suspect that you have turned in a homework
assignment which you don't understand, you may be asked to orally defend
your solutions. If you turn in a homework assignment
in violation of the above policies, the highest grade you will receive
on that assignment is 0, and you may receive a negative grade.
Students are expected to adhere to the Academic Honesty policy of the
Computer Science Department; this policy can be found in full
Please contact the instructor with any questions.
The required text for this course is:
The following books may also be useful. In addition to these
references for advanced topics may be given later in the course.
C.H. Papadimitriou. Computational
Complexity. This book is available on-line and at the
Columbia University bookstore.
This is an excellent introduction
to complexity theory. However, much of the material from the
the second half of the course is not covered in this book,
so it is crucial that you attend lectures.
M.J. Sipser. Introduction to the Theory of Computation.
This is a more introductory book than Papadimitriou; it has very
clear explanations but doesn't cover very much of the material we'll be
doing in this course.
S. Arora and B. Barak. Computational Complexity:
A Modern Approach. Good book for a sophisticated reader; detailed
coverage of many topics, including currently active research areas.
M. R. Garey & D. S. Johnson. Computers and Intractability:
A Guide to the Theory of NP-completeness.
The classic work on NP-completeness.
D. Z. Du and K. Ko. Theory of Computational Complexity.
An advanced book with lots of details about many topics.
J..E. Hopcroft and J.D. Ullman. Introduction to Automata Theory,
Languages, and Computation. Somewhat terse, but a good reference for
much of the material we'll be covering early in the course.
Schedule of Topics
Click here for a preliminary course schedule.
Click here to get to the homework page.
Powerpoint preview of course