The course meets 12.30--1.45 pm Tuesday and Thursday at E264 CB (Chemistry Building).

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

Office hours: 2:00-3:30 Wed, 3:00-4:30 Thu.

The course is about developing algorithmic intuition, and learning to communicate algorithms effectively. See Section 0.6 (Lecture 0, Section 6) of Jeff Erickson's notes for an elaboration.

A course description follows, and it is almost identical to last year's. I expect the actual course to differ somewhat, so please take this description only as preliminary.

We will practise the precise statement of various computational problems, think about different strategies or algorithms to solve them, reason about their correctness, evaluate these algorithms from the point of view of efficiency (usually running time), and develop a feel for the difficulty of problems and the applicability of various techniques we will learn. It is convenient to organize the course in terms of the following topics:

- Divide-and-Conquer
- Randomized Algorithms
- Dynamic programming
- Greedy Algorithms
- Network Flow
- NP-completeness

We will cover *one or two* other topics, possibly from the following list:
exact algorithms for hard problems, approximation algorithms, more
of probabilistic algorithms, basic computational geometry algorithms, introduction to linear programming.

We will rely on lecture notes. For starters, we will use the notes from Jeff Erickson.

We will assume some comfort with counting and estimating things (the kind we learn in discrete structures), some experience with writing programs, and some experience with estimating and communicating running time (for example, what it means to say "this algorithm's worst case running time is big-Oh of n-squared"). 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 course.

It helps helps to have also been exposed to an undergraduate algorithms course, in particular, to topics such as graph exploration (breadth first search, depth first search), and shortest path algorithms. Beyond this, we won't assume familiarity with specific topics, but rather hope for a certain maturity.

The grading will be based on about seven homeworks (35 percent), a midterm (25 percent), and a final (40 percent). One or two of the homeworks will be based on programming.

The policy on late homeworks is that you have a quota of three 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 a day late, the fifth two days late, and the rest of the homeworks on time. Once you use up your quota of three days, any homework submitted late will not be accepted and you will get 0 points for that homework.

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.

Tingting Liu, 10:30--12:00 Mon and Wed. At 201G, Maclean

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

- First Day Handout
- Homework 1, due in class on Thursday, February 6.
- Homework 2, due in class on Tuesday, February 25.
- Homework 3, due in class on Tuesday, March 11.
- Homework 4, due in class Tuesday, April 8.
- Homework 5, due Tuesday, April 22, by 11:50 pm.
Submit in dropbox
*Homework5*on ICON. - Homework 6, due in class Tuesday, May 6.

For a previous episode of this course, see the spring 2013 offering.