Design and Analysis of Algorithms

The course will be taught by David Eppstein, eppstein@uci.edu (office hours Tues 2:30 – 3:30 and Weds 4:30 – 5:30 in Bren 4082). The teaching assistants are Sid Gupta and Nil Mamano (office hours TBA). We also have three readers, Nitin Agarwal, Jordan Jorgensen, and Pedro Matias.

The course meets for lectures Mondays, Wednesdays, and Fridays, from 3:00 – 3:50, in Social Science Lecture Hall, Room 100. In addition there are four discussion sections, Tuesdays and Thursdays at 5, 6, 7, and 8pm in ICS 174. Students are expected to be enrolled in one of the discussion sections and to attend discussions regularly. We will not be taking attendance, and it is ok to attend a different discussion than the one you are enrolled in as long as space permits. At the discussion sections, the teaching assistant will go over homework and midterm solutions, give additional examples of topics covered in the lecture, and be available to answer questions.

Lecture materials will not be distributed to the class; instead, you are encouraged to attend the lecture yourself and take your own notes. Recording the lectures for your own personal use is allowed, but other uses of recorded lectures (including making them available online) is forbidden.

The course text will be "Algorithm Design and Applications" by Goodrich and Tamassia (Wiley, 2015). Students are expected to own a copy and to read the relevant chapters and sections. The official version of the textbook is the one sold in the bookstore. Most homework problems will be assigned from this text. If you are using a different version (e.g., an international version, or the older text by the same authors), then it is your responsibility to make sure you are doing the correct homework problems.

Coursework will consist of weekly homeworks (typically due on Fridays and posted on this page before the start of class on Monday of the week it is due) as well as two midterms and a comprehensive final exam. The overall grade will be determined 10% from homework, 25% from each midterm, and 40% from the final.

Group work on homeworks is permitted; however, each student should turn in his or her own copy of the homeworks. Some of the homework problems will ask you to perform calculations or trace the steps of an algorithm; you are welcome to use computer programs to solve these problems rather than doing everything by hand. Each week's homework assignment will be given on this web page. Homework is due by 9:00pm on Fridays and must be turned in through dropbox on eee. No late homework will be accepted. Homework must be typed, and formatted as a pdf file. Handwritten homework or homeworks in other formats will not be graded. Students who add the class after the start of quarter will be responsible for turning in all earlier homeworks by the following Friday. The lowest homework score of the quarter will be dropped from the course average.

For the UCI academic integrity policy, please see aisc.uci.edu. Students who are caught cheating in this class (for instance by copying exam solutions or allowing other students to copy from them) risk getting an F in the class or other disciplinary action as allowed by this policy.

**Week 0:**- Sep. 23: Intro/review [Goodrich & Tamassia, chapter 1]; Fibonacci numbers (Chapter 12)
**Week 1: Data structures**- Homework 1, due 9:00pm on Friday, Sep. 30: R-1.3, R-1.4, R-1.7, R-1.10
- Sep. 26: Priority queues and heapsort (Chapter 5)
- Sep. 28: Hashing with linear probing (Chapter 6)
- Sep. 30: Nearest neighbor searching with balanced WAVL trees (Chapter 4)
**Week 2: Comparison sorting**- Oct. 3: Merge sort (Chapter 8)
- Oct. 5: Comparison sorting lower bounds (Chapter 8)
- Oct. 7: Quick sort (Chapter 8)
**Week 3: Selection and integer sorting**- Oct. 10: Quickselect (Chapter 9)
- Oct. 12: Bucket sort and stability (Chapter 9)
- Oct. 14: Radix sort (Chapter 9)
**Week 4: Midterm; integer arithmetic**- Oct. 17: MIDTERM ONE
- Oct. 19: Karatsuba multiplication (Chapter 11)
- Oct. 21: Modular exponentiation and RSA encryption (Chapter 24)
**Week 5: Graph representation and traversal**- Oct. 24: Graph representation (Chapter 13)
- Oct. 26: Depth first search and strong connectivity (Chapter 13)
- Oct. 28: Directed acyclic graphs and topological ordering (Chapter 13)
**Week 6: Shortest paths and minimum spanning trees**- Oct. 31: DAG and Bellman–Ford shortest paths (Chapter 14)
- Nov: 2: Dijkstra's algorithm (Chapter 14)
- Nov. 4: Minimum spanning trees (Chapter 15)
**Week 7: Midterm; dynamic programming**- Nov. 7: MIDTERM TWO
- Nov. 9: Dynamic programming for computing solutions to recurrence relations (Chapter 12)
- Nov. 11: VETERANS DAY HOLIDAY
**Week 8: Dynamic programming applications**- Nov. 14: Finding optimal game strategies (Chapter 12)
- Nov. 16: Longest common subsequences (Chapter 12)
- Nov. 18: The knapsack problem (Chapters 10 and 12)
**Week 9: Computational geometry**- Nov. 21: Convex hulls (Chapter 22)
- Nov. 23: Closest pairs (Chapter 22)
- Nov. 25: THANKSGIVING HOLIDAY
**Week 10:**- Nov. 28: Streaming algorithms (not in text; see Graham Cormode's slides on finding frequent items and the Wikipedia article on reservoir sampling)
- Nov. 30: NP-completeness (Chapter 17)
- Dec. 2: Approximation algorithms (Chapter 18)
**Final exam:**- Dec. 5 (Monday), 4:00 - 6:00 (per schedule)