Meetings: MWF 9:05am–9:55am, Ives Hall 305, map
This course develops techniques used in the design and analysis of algorithms, with an emphasis on problems arising in computing applications. Example applications are drawn from systems and networks, artificial intelligence, computer vision, data mining, and computational biology. This course covers four major algorithm design techniques (greedy algorithms, divide and conquer, dynamic programming, and network flow), computability theory focusing on undecidability, computational complexity focusing on NP-completeness, and algorithmic techniques for intractable problems, including identification of structured special cases, approximation algorithms, and local search heuristics.
The textbook for the course is Algorithm Design by Jon Kleinberg and Eva Tardos (available at Cornell Store). Although this book was designed for this course, there will be topics covered in lecture that are not in the text and there will be topics in the text that are not covered in lecture. You are responsible for topics covered in lecture and for any assigned reading in the text.
The following books are also useful references.
- T. Cormen, C. Leiserson, R. Rivest. Introduction to Algorithms.
- A. Aho, J. Hopcroft, J. Ullman. The Design and Analysis of Computer Algorithms.
- M. Garey and D. Johnson. Computers and Intractability.
- D. Kozen. The Design and Analysis of Algorithms.
The official prerequisites for the course are CS 2800 and CS 3110. We will assume that everyone is familiar with the material in CS 2110, CS 3110, and CS 2800, and we will use it as necessary in CS 4820. This includes elementary data structures, sorting, and basic terminology involving graphs (including the concepts of depth-first search and breadth-first search). Some of these are reviewed in the text. The lectures and homework involve the analysis of algorithms at a fairly mathematical level. We expect everyone to be comfortable reading and writing proofs at the level of CS 2800.
Your grade will based on weekly homework, two prelims, and one final exam. Each of these components will be given a weight in the following ranges:
- homework: 25%
- prelim 1: from 15% to 25%
- prelim 2: from 15% to 25%
- final exam: from 25% to 40%
An additional component is your participation at clicker polls. The weight for this component ranges from 0% to 5%. For each student, we will determine weights in these ranges that add up to 100% and result in the best grade.
In order to conduct interactive polls during lectures, we will use the i>clicker audience response system. The clickers are available at the Cornell Store. Your clicker participation can contribute as a bonus toward your final grade. (See grading section).
We will be using Piazza as an online discussion forum. Piazza allows for open discussions of all course-related questions. You are encouraged to post any questions you might have about the course material. The course staff monitor Piazza closely and you will usually get a quick response. If you know the answer to a question, you are encouraged to post it.
By default, your posts are visible to the course staff and other students, and you should prefer this mode so that others can benefit from your question and the answer. However, you can post privately so that only the course staff can see your question, and you should do so if your post might reveal information about a solution to a homework problem. You can also post anonymously if you wish. If you post privately, we reserve the right to make your question public if we think the class will benefit.
Everyone who preregistered for the course should already be signed up. If you have never used Piazza before, or if you did not preregister for the course, visit the Piazza CS 4820 page to sign up.
Piazza is the most effective way to communicate with course staff. Please avoid email if Piazza will do. Broadcast messages from the course staff to students will be sent using Piazza and all course announcements will be posted there, so check in often!
Homework is an important part of the course. We will have weekly homework assignments.
Your homework submissions need to be typeset (hand-drawn figures are OK). The idea is that you first develop your solutions on paper and then type up their final form in a concise way. See typesetting resources for a list of typesetting software and references.
You have six late days. Late submission are graded only if you use your late days. You can use at most three late days per homework. If you are unable to submit your homework because of extenuating circumstances (medical or family emergency), contact an instructor beforehand.
If you clearly indicate gaps in your homework solutions, you will get more partial credit. For example, if you write that you don’t know the solution of a problem, you will get 20% of the points, whereas you will not earn any points if you submit a solution that is completely wrong.
You can collaborate in (disjoint) groups of up to three students. You need to submit homework individually (written by yourself, in your own words). Your submission should acknowledge all members of your group. Resources beyond course material and group discussions are not admissible. However, if you do end up using other resources, you absolutely need to reference them (see academic integrity).
- greedy algorithms
- dynamic programming
- network flow
- computability theory
- approximation algorithms
- randomized algorithms
Any violation of academic integrity will be severely penalized. You are allowed to collaborate on the homework to the extent of formulating ideas as a group. However, you are expected to write up (and understand) the homework on your own, and you should acknowledge the names of the students with whom you collaborated.
Absolute integrity is expected of every Cornell student in all academic undertakings. Integrity entails a firm adherence to a set of values, and the values most essential to an academic community are grounded on the concept of honesty with respect to the intellectual efforts of oneself and others. Academic integrity is expected not only in formal coursework situations, but in all University relationships and interactions connected to the educational process, including the use of University resources. […]
A Cornell student’s submission of work for academic credit indicates that the work is the student’s own. All outside assistance should be acknowledged, and the student’s academic position truthfully reported at all times. In addition, Cornell students have a right to expect academic integrity from each of their peers.