General Information | Course Description | Grading | Ed Discussions | Homework | Course Conduct | Accommodations

# General Information

**Lectures:**MWF 9:05am–9:55am, Uris Hall G01, map

**Instructors:**

- Michael P. Kim, Gates Hall 320,
email

Office Hour: Mondays, 1pm - Bobby Kleinberg, Gates Hall 317, email

Office Hour: Wednesdays, 3pm

# Course Description

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. This course continues to build on work in previous courses on proof writing and asymptotic running time analysis of algorithms.

## Learning Objectives

On completing this course, students should be able to:

- Identify problems solvable with a
**greedy algorithm**, design and prove the correctness of such an algorithm, and supply asymptotic running time for a variety of given algorithms. - Recognize problems to which
**divide and conquer**or**dynamic programming**approaches may apply, design algorithms with these approaches, and analyze their computational efficiency; - Reduce resource management as well as partition problems to
**network flow or cut**problems, implement correct strategies for finding optimal flows/cuts, and understand the properties of these strategies; - Apply
**randomization**to produce tractable algorithms for several specific computationally challenging problems; - Recognize whether or not certain problems are computationally intractible (e.g.
**NP-Hard, undecidable**), and use reductions from known problems to establish intractability; - Use
**approximation algorithms**to efficiently produce near-optimal solutions for intractable problems, and bound how close these algorithms are to being optimal; - Be able to recognize, implement, and understand the properties of several famous and important algorithms including
**Gale-Shapley method**for stable matchings,**Prim's and Kruskal's algorithms**for finding minimum spanning trees,**Bellman-Ford's algorithm**for finding shortest paths in a graph, and**Ford-Fulkerson's algorithm**for finding max flows in networks.

## Course Material

The textbook for the course is *Algorithm Design* by Jon Kleinberg and Éva 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.* - S. Dasgupta, C. Papadimitriou, and U. Vazirani.
*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.*

## Prerequisites

The prerequisites for the course are, either having an A– or better in both CS 2800 and CS 2110, or having successfully completed all three of CS 2800, CS 2110, and CS 3110. We 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, probability (conditional probability, expectation, variance), sorting, and basic terminology involving graphs (including the concepts of depth-first search and breadth-first search), and **coding in Java**. 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. Some homeworks include programming exercises that involve writing code in Java.

# Grading

Your grade will based on weekly homework, two prelims, one final exam, and participation. Each of these components will be given a weight in the following ranges:

**Homework:**25%**Exams:**75%

For each student, we will determine the contribution of exams by choosing weights in the stated ranges (adding up to 75%) that result in the best grade for the student.**Prelim 1:**15% – 25%**Prelim 2:**15 – 25%**Final exam (cumulative):**30 – 40%

**Participation:**0% – Extra Credit

We highly encourage lecture attendance and participation in the course discussion forums. When final grades are computed, students who are on the cusp between grades by raw score, may be bumped up in letter grade based on active participation.

**Passing 4820:**If the score computed above exceeds 45%, you are guaranteed a passing grade.

# Ed Discussions

We will be using Ed Discussions as an online discussion forum. Ed Discussions 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 Ed Discussions closely and you will usually get a quick response. If you know the answer to a question, you are encouraged to post it. Posting questions or answers that are endorsed by TAs or instructors can improve your participation grade.

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.

Ed Discussions is the most effective way to communicate with course staff. Please avoid email if Ed Discussions will do. Ideally, email to the instructors should be reserved for sensitive communications. Broadcast messages from the course staff to students will be sent using Ed Discussions and all course announcements will be posted there and pinned, so check the pinned announcements often!

# Homework

Homework is an important part of the course. We will have **weekly** homework assignments. All homework assignments (and solutions) will be posted on Ed. In general, homework assignments will be due on Thursday at 11:59pm.

## Typesetting

**We require problem sets to be typeset and submitted as a PDF.** This requirement is for everyone's benefit. In general, we recommend that you first develop your solutions in draft form, and then write or type your solution in a concise way. Typesetting not only makes the last step essential (instead of handing in solution in draft form), it also makes it much easier for you to edit and improve your writeup, as well as easier for your TAs to read your proofs. It is up to you which tool you use. We recommend LaTeX, as it is the de facto typesetting standard used in Computer Science and other mathematical/scientific disciplines. That said, tools like the Equation Editor in Microsoft Word can be surprisingly effective as an alternative. See typesetting resources for a list of typesetting software and references.

For some proofs or writeups, it may be helpful to use a figure to explain your thinking more concisely. This is encouraged! Again, it is up to you how you want to include that in your writeup, whether it is a picture of a drawing in your notebook that you took with your phone or something you made digitally, as long as the figure was produced by you personally and is clear enough to see, it's a great idea to include it.

## Late Submissions

We encourage on-time submission of homeworks, in order to stay on top of the course material. That said, we understand that this ideal is not always possible. We allow**6 late days**to be used at your discretion across the semester. Late days will be subtracted in integral units (i.e. an assignment turned in 1 hour after the deadline will be charged 1 day). You may use at most

**3 late days**per assignment. Additional late days will not be given, except in extraordinary circumstances, or in line with an SDS accommodation.

## Collaboration

In the real world of algorithms research, collaboration and conversation is an important part of how ideas get generated. So too in this course; we encourage you to collaborate with your peers in the course to brainstorm ideas for how to get through homework. You may talk with any students about the problems, but you must limit the set of significant collaborators (i.e. collaborations that go beyond high-level ideas, involving writing or drawing diagrams together) to at most two other students. While you may collaborate to solve the problems, your solutions must be written up completely on your own. You are not allowed to share digital/written notes or images of your work in any form with each other (including your significant collaborators). This includes problems that involve writing a piece of code: the code you submit must be your own, not copied from your homework partner. Just like in research, your work must also include acknowledgements of all with whom students who you collaborated. Both the physical or digital distribution of information about solutions and the failure to acknowledge collaborators are serious violations of academic integrity.

## Admissible Resources

When completing homework, we discourage the use of external sources, including but not limited to Generative AI. Do not solicit help from people outside of the class (beyond classmates and course staff). Do not submit solutions that you do not understand: you should be able to explain your solution, in your own words (without referencing your write-up). If you choose to consult written sources beyond the course material and textbook, you must list each of these sources in your submission.

**Note:** Exams will be closed book, closed internet, closed generative AI. As such, the staff recommends you use these tools sparingly, as a resource for learning, not as an integral part of solving homeworks.

**Generative AI:** We discourage the use of generative AI tools (e.g. GPT and Bard) for solving homework problems. If you choose to query generative AI tools while working on your homework, you must submit the transcript of your entire session. Your submission will be compared to your AI session. Copying solutions (from AI or the internet) is a violation of academic integrity. If you feel the resources available to you are insufficient, talk to course staff or ask questions on Ed Discussions.

## Advice for Success

Algorithms assignments can often require creative insights and complex proofs beyond what previous courses have required. Here are a few tips for succeeding in your writeups:**Start your assignments early.**Even if you aren't writing anything down yet, looking over the problem set well in advance of the due date can ensure you have enough time to brainstorm possible solutions and to clear up confusion about how to interpret a problem. Creativity doesn't work well on a deadline.**Talk with classmates at a similar level about ideas.**As previously stated, while you cannot share physical or digital solutions of any kind to these problems, we actively encourage you to talk to classmates while you work through them. In particular, we recommend finding a group of students to meet with throughout the semester in advance of the deadline to talk about ideas. For best results, make sure those students are at the same level of understanding of the material as you; talking through your ideas with colleagues with a similar level of understanding will make talking through ideas with each other easier and more equitable, and is more likely to leave you prepared for course exams.**Ask questions in class, in office hours, and on Ed Discussions.**The material in this class moves quickly and is often cumulative. If you find yourself scratching your head after a lecture, even after consulting the textbook and course notes, you're certainly not alone, and it's better to seek help then than to wait until you are more confused.

# Course Material Copyright

Course materials posted on this website, Ed Discussions, or Gradescope, are intellectual property belonging to the author. Students are not permitted to post course materials on the web, share them on any online platform, buy, sell, or distribute them outside of Cornell without the express permission of the instructor. Such unauthorized behavior constitutes academic misconduct.

# Course Conduct

We understand that our members represent a rich variety of backgrounds and perspectives. Cornell University is committed to providing an atmosphere for learning that respects diversity. We expect students to communicate in a respectful manner with the instructors, course staff, and fellow students, in a way the honors the unique experiences, values, and beliefs represented by different members of our community.

## Academic Integrity

Any violation of academic integrity will incur severe penalities. 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.

From Cornell's code of academic integrity:

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.