W4236: Introduction to Computational Complexity
Spring 2010

Introduction | Topics | Prerequisites | 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/

Introduction

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?

Questions 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.

Prerequisites

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 not required.

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.

Grading

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.   For 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 assignment.

The problem sets will require you to do proofs. Some problems will be quite challenging; you are advised to start the problem sets early.  You are encouraged to discuss the course material and the homework problems with each other in small groups (2-3 people), as long as you list all discussion 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 appropriately acknowledged.

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 here. Please contact the instructor with any questions.

Readings

The required text for this course is: The following books may also be useful. In addition to these books, additional references for advanced topics may be given later in the course.

Schedule of Topics

Click here for a preliminary course schedule.

Problem Sets

Click here to get to the homework page.

Powerpoint preview of course