To clarify things right up front, this class is essentially the same class given to Harvard undergraduates over the spring semester. We are squeezing a 14 week semester into an 8 week summer class. As such, this class is very challenging and represents a serious time commitment. If you don't have (at least) 20 hours a week to spend on this class, it might not be right for you.
For students at Harvard (or other universities) that take this class, I will be happy to document that the class is equivalent to the regular semester class and deserves full credit.
This course covers the modern theory of algorithms, focusing on the themes of efficient algorithms and intractable problems. The course goal is to provide a solid background in algorithms for computer science students, especially those working in industry or planning to continue on with further advanced coursework. I strongly encourage mathematicians and people from other areas of study to take the course as well.
Besides introducing the basic language and tools for algorithm analysis, we will also cover several specific problems and general design paradigms. Toward the end of the quarter, we will also examine heuristic techniques often used in practice, even though in many cases formal theoretical results are not known.
We will focus on the theoretical and mathematical aspects in class and on the homework assignments. But because one gains a deeper understanding of algorithms from actually implementing them, the course will include a substantial programming component. More details will be available when the first programming assignment is given.
As you can see from the preliminary list of topics (included below), we will be covering a great deal. I expect the course to be challenging, both in terms of the workload and the difficulty of the material. You should be prepared to do a lot of work outside of class. The payoff will be that you will learn a lot of both useful and interesting things.
Students should be able to program in a standard programming language; C, C++, or Java is preferred. Some mathematical maturity also will be expected; students should have some idea of what constitutes a mathematical proof and how to write one. Some knowledge of basic probability will also be helpful. If you do not have sufficient math background (such as Math E-104), you should reconsider taking this course. A very basic self-diagnostic quiz is available on the class web page.
Your performance will be measured in four ways. (The percentage contributions to your grade given below are approximate and subject to change.)
All assignments will be due on the date assigned. Assignments will not be accepted late with the exception of medical emergencies or similar exceptional circumstances that must be discussed in advance with the instructor. Please remember it is better to turn in an incomplete assignment rather than no assignment.
If you collaborate with one or two other students in the course in the planning and design of solutions to homework problems, then you should give their names on your homework papers.
Under no circumstances may you use solution sets to problems that may have been distributed by the course in past years, or the homework papers of students who have taken the course past years. Nor should you look up solution sets from other similar courses, or otherwise take solutions from the Web. (They're probably wrong anyway.)
To be perfectly clear: when you are writing your solutions, you should be alone, and your writing should therefore clearly be in your own words . Talking about problems before writing your solution is OK; going over solutions line by line as you write them is not. Please ask if you are unclear on this.
Violation of these rules may be grounds for giving no credit for a homework paper and also for serious disciplinary action. Severe punishments will apply, so please do not violate these rules. If you have any questions about these rules, please ask an instructor.
There is no required text. I recommend, however, you consider at least one of the following books: