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 3:30 – 4:30 in Bren 4082). The teaching assistants are Jenny Lam (office hours MWF 9:00 – 10:00 in Bren 4011) and Silu Yang (office hours Tues 6:30 – 7:30 and Thurs 12:30 – 1:30 in Bren 4011). We also have three readers.

The course meets for lectures Mondays, Wednesdays, and Fridays, from 2:00 – 2:50, in the Howard Schneiderman (Biology) Lecture Hall, Room 100A. In addition there are discussion sections, Mondays and Wednesdays 6:00 – 6:50 in SSH 100 and Tuesdays and Thursdays 8:00 – 8:50 in ELH 100. Students are expected to be enrolled in one of the two discussion sections and to attend discussions regularly. 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; see publisher site for special direct student purchase price). 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; 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 honesty policy, please see honesty.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. 25: Organizational meeting, review of O-notation (Jenny Lam)
**Week 1: Data structures**- Homework 1, due 9:00pm on Friday, Oct. 2: R-1.2, R-1.3, R-1.8, R-2.1
- Sep. 28: Priority queues and heapsort (Chapter 5)
- Sep. 30: Hashing with linear probing (Chapter 6)
- Oct. 2: Nearest neighbor searching with balanced trees (Chapter 4)
**Week 2: Comparison sorting**- Homework 2, due 9:00pm on Friday, Oct. 9: R-4.2, R-5.11, A-5.1, R-6.5
- Oct. 5: Merge sort (Chapter 8)
- Oct. 7: Comparison sorting lower bounds (Chapter 8)
- Oct. 11: Quick sort (Chapter 8)
**Week 3: Selection and integer sorting**- Homework 3, due 9:00pm on Friday, Oct. 16
- Oct. 12: Quickselect (Chapter 9)
- Oct. 14: Bucket sort and stability (Chapter 9)
- Oct. 16: Radix sort (Chapter 9)
**Week 4: Midterm; integer arithmetic**- Homework 4, due 9:00pm on Friday, Oct. 23: R-9.2, C-9.4, C-9.9, C-9.10
- Oct. 19: MIDTERM ONE
- Oct. 21: Karatsuba multiplication (Chapter 11)
- Oct. 23: Modular exponentiation and RSA encryption (Chapter 24)
**Week 5: Graph representation and traversal**- Homework 5, due 9:00pm on Friday, Oct. 30: R-11.2, R-11.4, R-24.5, C-24.6
- Oct. 26: Graph representation (Chapter 13)
- Oct. 28: Depth first search and strong connectivity (Chapter 13)
- Oct. 30: Directed acyclic graphs and topological ordering (Chapter 13)
**Week 6: Shortest paths and minimum spanning trees**- Homework 6, due 9:00pm on Friday, Nov. 6: R-13.2, R-13.4, R-13.6, R-13.7
- Nov. 2: DAG and Bellman–Ford shortest paths (Chapter 14)
- Nov: 4: Dijkstra's algorithm (Chapter 14)
- Nov. 6: Minimum spanning trees (Chapter 15)
**Week 7: Midterm; dynamic programming**- Homework 7, due 9:00pm on Friday, Nov.13: C-14.2, C-14.4, R-15.9, R-15.10
- Nov. 9: MIDTERM TWO
- Nov. 11: VETERANS DAY HOLIDAY
- Nov. 13: Dynamic programming for Fibonacci numbers and other recurrences (Chapter 12)
**Week 8: Dynamic programming applications**- Homework 8, due 9:00pm on Wednesday, Nov. 25: R-12.4, R-12.8, C-12.3, A-12.1
- Nov. 16: Finding optimal game strategies (Chapter 12)
- Nov. 18: Longest common subsequences (Chapter 12)
- Nov. 20: The knapsack problem (Chapters 10 and 12)
**Week 9: Computational geometry**- Nov. 23: Convex hulls (Chapter 22)
- Nov. 25: Closest pairs (Chapter 22)
- Nov. 27: THANKSGIVING HOLIDAY
**Week 10:**- Homework 9, due 9:00pm on Friday, Dec. 4: R-22.6, R-22.8, C-22.1, C-22.5
- Nov. 30: Streaming algorithms (not in text; see Graham Cormode's slides on finding frequent items and the Wikipedia article on reservoir sampling)
- Dec. 2: NP-completeness (Chapter 17)
- Dec. 4: Approximation algorithms (Chapter 18)
**Final exam:**- Dec. 11 (Friday), 1:30 - 3:30 (per schedule)