# CS 561 Class Syllabus

## Course Web Page

Contact Info for Instructor and TA, office hours, assignments, tests, and general information is all on the course web page.

## Course Description

From the CS dept web page: The study of data structures and algorithms and the mathematics needed to analyze their time and space complexity. Topics include: amortized analysis and self-adjusting data structures for trees and priority queues; algorithms on graphs, and greedy and divide and conquer paradigms

### Text:

Our text is Introduction to Algorithms, second edition by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Another good reference is Algorithm Design by Kleinberg and Tardos

### What you should know

You should have a basic familiarity with algorithms and data structures as from a class such as CS361/CS362. You should also have a certain mathematical maturity and familiarity with proof techniques similar to what would be covered in a advanced undergraduate mathematics class.

### Assignments:

• Assignments are due at the beginning of class on the due date. Assignment deadlines are strict: late homeworks will automatically receive a grade of zero, without prior approval. Prior approval is generally given only in the case of a medical problem or family emergency.
• Group collaboration is encouraged on the homeworks, provided that you write at the top of your homework the names of all the other students that you collaborated with. Note that although collaboration is encouraged, the solutions must always be written up individually, and you should not look at or copy another student's solution and should not look up solutions on the Internet. Copying solutions from another student or from the Internet is cheating. In case a student presents a solution that is essentially identical in whole or in part to solutions from another student or other source, the student will receive a 0 on the assignment, may be reported to the University Administration and may not be permitted to continue in the class.
• Put pages of hw in order. We don't care what order you solve the hw in, but before you turn it in, you must put the problems in order (this makes grading much easier)
• Staple hws, do not use paper clips, folding, tape, putty, gum, etc. Prof Saia and the TA do not bring staplers to class, so make sure you staple the hw before class (stapling helps us keep together all pages of your hw)

Your hws and test answers should have the following properties. We will be looking for these when we grade:
• Clarity: Make sure all of your work and answers are clearly legible and well separated from other problems. If we can't read it, then we can't grade it. Likewise, if we can't immediately find all of the relevant work for a problem, then we will be more likely to grade only what we see at first.
• Completeness: Full credit for all problems is based on both sufficient intermediate work (the lack of which often produces a 'justify' comment) and the final answer. There are many ways of doing most problems, and we need to understand exactly how YOU chose to solve each problem. Here is a good rule of thumb for deciding how much detail is sufficient: if you were to present your solution to the class and everyone understood the steps, then you can assume it is sufficient.
• Succinctness: The work and solutions which you hand-in should be long enough to convey exactly why the answer you get is correct, yet short enough to be easily digestible by someone with a basic knowledge of this material. If you find yourself doing more than half a page of dense algebra, generating more than a dozen numeric values or using more than a page or two of paper per problem for your solution, you're probably doing too much work. Don't turn in pages with scratch work or multiple answers - if you need to do scratch work, do it on separate scratch paper. Clearly indicate your final answer (circle, box, underline, etc.). Note: It's usually best to rewrite your solution to a problem before you hand it in. If you do this, you'll find you can usually make the solution much more succinct.

### Topics

Topics will likely include:
• Basics: Asymptotic Analysis (Chapter 3 in text) - We will not cover this material in class, but you will be expected to know it well - it will be necessary for solving homework and exam problems.
• Probability and Expectation: linearity of expectation, birthday paradox, coupon collector's problem. Applications: Hashing, Bloom Filters, Quicksort, Bucketsort, Skip Lists, maybe Rabin-Karp Algorithm? (fingerprinting) (2.5 weeks, Chapter 5)
• Divide and Conquer: Recurrence Relations, Annihilators, Mergesort; Tree Based Data Structures (Heaps, AVL and Splay Trees) (2.5 weeks, Chapter 3 and 4 and notes; Chapters 6 and 12)
• Dynamic Programming: String Alignment, Matrix Multiplication, Longest Common Subsequence (1.5 weeks, Chapter 15)
• Greedy Algorithms (1 week, Chapter 16)
• Amortized Analysis: Dynamic Tables and Union Find (1 week, Chapter 17)
• Graph Algorithms: Elementary Graph Algorithms, Minimum Spanning Tree, Single-Source Shortest Path, All-Pairs Shortest Paths (2 weeks, Chapters 22,23,24,25)
• Network Flow, Max Matchings, Min-cut Max-flow (2 weeks, Chapter 26)
• Linear Programming and Duality (1 weeks, Chapter 29)
• NP-Hardness and Approximation Algorithms (2 weeks (time permitting), notes)

### Course Assessment

Approximate weighting:
• Homeworks, 20% (6-8)
• Midterm, 30%
• Final, 40%
• Class Participation, 10%. I expect about 90% attendance in class, and will frequently ask questions. This grade will based on questions or responses given in class. It will be a very coarse grade, students who attend lectures and speak up