[Note: this webpage last modified Friday, 04-Feb-2011 19:44:51 EST]
The final project is worth 10% of your final grade. The goal of this project is that you learn some topic independently. You can look below for ideas. You will either look at some current "cutting-edge" research paper, master a "textbook-type" topic that we have not covered in class, or investigate the more practical aspects of needing to solve hard problems in the real world. I expect that you will spend a few hours per week on this until the project proposal is due, then ramp it up after that, and finally spend a good amount of time at the end polishing a writeup and presentation.
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 Oct 22, Midpoint due Nov 22, Final presentation will be the last week of classes.
Here is a link to a sample proposal that you can use as a template: Jeff-Kinne-CS620-Project-Proposal.doc .
Here is a link to my project midpoint document: project-midpoint.pdf. Note that I have not really put enough time into this to do a great job. I hope that many of you have more to show for your efforts than I do so far...
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. You can email me to reserve your slot; the schedule is kept on an announcement in blackboard. You should email your paper to me 24 hours before your presentation. I will wait to grade the paper until Wednesday December 15, so you can resubmit the paperif you continue to work on your project after the presentation.
Grade breakdown: 20% proposal, 30% midpoint, 50% final. For each of those (except midpoint), 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.
There are three main types of projects I have in mind.
For the first, you would look at a recent research article, study the article, understand it, and think about potential future avenues of investigation (open questions raised by the article). You will likely end up also looking for a survey article or textbook describing the general area of the paper, and will use the survey or textbook to learn/understand the basic definitions.
The second type of project is to study something that is a "standard textbook type topic" that we just did not cover in this course. For each of these, you can look in the textbook we are using, look for survey articles, and look for lecture notes. You can try looking at some of the resources linked from http://www.kinnejeff.com/theory-links.html.
The third type of project is to look at how NP-hard problems and other problems we do not know of poly-time solutions for (e.g., some BPP problems as well) are actually solved in practice. This will involve finding what algorithms are currently used in practice, understanding those algorithms, and if possible experimenting with those algorithms (either by coding them yourself or using freely available code/libraries).
Standard textbook type topics (do a google search, or look in the
index/table of contents in our textbook or other textbooks, or look
here for a survey article):
Communication complexity (how many bits need to be communicated between
distant parties to compute some function cooperatively),
Branching programs (a model of space-bounded computation),
Query complexity (how many bits need to be looked at in the input
to compute some function).
Each of those three areas are areas were lower bounds are actually
known. That is, we know of "hard" problems with respect to
communication complexity, branching programs, and query complexity.
These hardness results have been used in other areas of theoretical
computer science.
Quantum computing,
Counting problems (e.g., #P).
These two are interesting "generalizations" of randomized computation,
where just like the rest of complexity most of the fundamental
questions remain open (e.g., does #P=P, does BQP=P).
See here for a survey on quantum computing.
Approximation algorithms for NP-hard problems,
Hardness of approximation results for NP-hard problems,
Fixed-parameter tractable algorithms for NP-hard problems,
Average-case analysis of algorithms.
Approximation algorithms, fixed-parameter tractability, and average-case
algorithms are some ways that we can try to deal with NP-hard problems
without having to solve them exactly, efficiently, on all inputs.
If we have a solution that is close to correct, or correct on most
inputs, or is efficient on the types of inputs we need to solve in
some application, then that might be good enough. So these areas are the
theoretical foundation for these attempts at dealing with NP-hard
problems.
For lecture notes on approximation algorithms, search online; for
example, see
here.
See here and here for a survey on fixed-parameter tractability.
You can also look at the wikipedia article on NP-complete problems
for some background on the issues of approximation, etc.
You can also look at a CACM article about the
P versus NP problem by Fortnow
that includes a part about different ways
to deail with NP-complete problems. For hardness of approximation,
you could start by looking at a CACM article by
Sudhan. You can also search on google for the name of your
NP-hard problem and terms like linear programming, semidefinite
programming, approximation algorithm. Include the search term lecture
notes to find lecture notes (often easier to read than the research
papers). You can search google for the name of the problem and
fixed parameter tractable or kernelization to see if there are those
types of algorithms for you problem.
Exact algorithms for NP-hard problems.
See a recent survey. Also, see a recent example of a
paper that has an
exponential-time algorithm for an NP-hard problem that is an improvement
over what was known before.
Game theory and mechanism design.
This is an area that is very popular right now, is relatively young, and
is really growing. You can think of this as the intersection of
economics and theory of computing. The types of problems that are
considered are problems like, "how can we design an auction to
have certain properties - like fairness, honesty, or security".
See here for a textbook on this subject, and
here
for a CACM article giving an overview of game theory. And
here is another CACM article about
Nash equilibria.
You could just peruse the Complexity Zoo until you find a complexity class that looks interesting to look at.
Or you could look through A Short History of Computational Complexity by Fortnow and Homer for topics that might interest you.
Or you could browse through the theory section of the CACM's website or the ACM SIGACT News for ideas.
Recent research papers you might be interested in:
The Program-Enumeration Bottleneck in Average-Case Complexity by Luca Trevisan.
Constructive Proofs of Concentration Bounds by Russell Impagliazzo and Valentine Kabanets.
A Note on Circuit Lower Bounds from Derandomization by Dieter van Melkebeek.
Pseudorandom Generators, Typically-Correct Derandomization, and Circuit Lower Bounds by Jeff Kinne, Dieter van Melkebeek, and Ronen Shaltiel. See also some surveys releated to derandomization: by Impagliazzo, by Kabanets, by Wigderson and Shaltiel, by Miltersen. See also the sections of our book and the book by Arora and Barak on derandomization.
Derandomizing from Random Strings by Harry Buhrman, Lance Fortnow, Michal Koucky, and Bruno Loff.
Computational Complexity and Informational Asymmetry in Financial Products by Sanjeev Arora, Boaz Barak, Markus Brunnermeier, and Rong Ge.
For a more historical perspective, you could look at one of the papers listed at: list of important publications in theoretical computer science. Or if the paper is not readable, research the topic of the paper, and what the current status of that topic is.
You can look for other recent research papers in theory of computing by following the links to Conferences and Workshops, Journals, or Other Online Papers/Events at http://www.kinnejeff.com/theory-links.html. If you find a title of a paper that sounds interesting, then you can search on google to find a copy of the paper online.