The course meets 12:30--1:45 pm Tuesday and Thursday at 218 MLH (MacLean Hall).

Kasturi Varadarajan, 101D MacLean Hall, Phone: 335-0732, email:firstname-lastname@uiowa.edu.

Office hours: Monday 3:00--4:30, Wednesday 1:30--3:00; 101D MLH.

Zhishuai Guo. Email: firstname-lastname@uiowa.edu.

Office hours: Tuesday 2:00--3:00 pm, Friday 12:00--1:00 pm, at 101N MLH.

This course has two main goals. The first is to develop an understanding of fundamental algorithm design techniques. Here we will focus on ways of approaching algorithm design, and practice communicating our ideas effectively. The second goal is to develop experience with designing and programming algorithms with a view to practical efficiency. These two goals usually interact, but not in a straightforward way.

Topics that we plan to cover include (i) recursive thinking, leading up to divide-and-conquer, backtracking, and dynamic programming, (ii) graph algorithms and related data structures, (iii) greedy algorithms, (iv) randomized algorithms, and (v) dealing with intractability. This is preliminary, and the actual course may have small variations.

We will rely on lecture notes. Mostly, we will use the notes
from
Jeff Erickson. This page includes a textbook, but also more advanced material under the heading * More Algorithms Lecture Notes*. We will use both resources.

Undergraduate discrete structures and data structures are the official prerequisites.

More specifically, we will assume some comfort with counting and estimating things (the kind we learn in discrete structures), experience with writing programs, and with estimating and communicating running time (for example, what it means to say ``this algorithm's worst case running time is O(n^2)''). We will also assume that when we talk about algorithms, you are comfortable at seeing how they might translate into programs. Computer science undergrads typically pick these skills up in their data structures and algorithms courses.

The grading will be based on (approximately) nine homework assignments (30 percent), two midterms (20 percent each), a final (25 percent), and class participation (5 percent). Four of the nine homeworks will involve programming, and the remaining will be shorter and involve pen and paper work.

The policy on late homework is that you have a quota of four days for the entire semester that you may use for late submissions. So for example, there will be no penalty if you submit the third homework two days late, the fifth two days late, and the rest of the homework assignments on time. Once you use up your quota of four days, any homework submitted late will not be accepted and you will get 0 points for that homework. No individual homework can be late by more than two days. (I don't count the weekends/holidays -- if an assignment is due 1:45 pm on Thursday, and you submit it by 1:00 pm the following Monday, you will be two days late.)

When you submit a homework X days late, your quota gets decreased by X irrevocably. You can only be late by an integer number of days -- if you submit 10 hours after the deadline, for example, your quota is depleted by one day.

We will keep track of what we covered each week here.

- First Day Handout
- Homework 1, due in class Thursday, January 24.
- Homework 2, due via ICON at 11:59 pm, February 10.
- Homework 3, due in class Tuesday, February 19.
- Homework 4, due in class Tuesday, February 26.
- Homework 5, due via ICON at 11:59 pm, Monday, March 25.
- Homework 6, due in class Thursday, April 4.
- Homework 7, due via ICON at 11:59 pm, Monday, April 22.
- Homework 8, due in class Thursday, May 2.