[Note: this webpage last modified Thursday, 17-Feb-2011 14:00:01 EST]
For the project, you will choose a "hard" problem that is not known to be in P and investigate everything that is known about it - what complexity classes is it known to be in, are there approximation algorithms for the problem, what are the best-known algorithms, are there restricted versions that are in P, etc. I will provide more details as we get into the semester. Here is the preliminary information.
You can work with a partner or alone (so a group of 2 or 1). If working with a partner, you will be graded accordingly, with the expectation that the project is more substantial than a single person project.
Proposal will be due to-be-determined, Midpoint due to-be-determined, Final presentation will be the last week of classes.
For the final presentation, you will turn in a writeup of your project that should be in the format of a research paper. The writeup should describe the background and major results relevant to your project, and should give complete proofs for one or more of the results. The writeup should also discuss applications of the results you present and potential future avenues of exploration (e.g., what are the major open questions). I would expect the project writeups to be about 10 pages, but there is no page minimum or maximum. You will have 20 minutes for the presentation.
Grade breakdown: 20% proposal, 30% midpoint, 50% final. For each of those, the grade will be 70% what you hand in and 30% the presentation to the class.
If working in pairs, you will grade each other and yourself as well. I will take that into consideration.
The easiest project idea is to pick some problem not known to be in P and do a survey of what is known about this problem - give proofs of completeness, explain the best-known algorithms (both exact and approximation), explain what the best-known "hardness of approximation" result is known for the problem. If you want to focus on the practical side, you can focus your efforts on implementing an algorithm or algorithms for the problem you choose (whether to do one or multiple algorithms depends on how complicated the algorithm is, and how much work it is to implement it). You could also try the algorithm(s) out on real-world situations that need to be solved.
Here are some interesting "hard" problems that you could look at.