Spring 2019: Design and Implementation of Algorithms, CS:4980:0003


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.

Teaching Assistant

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

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

What this Course is About

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.

Exam Dates

The midterms will be on Thursday, February 28, and Thursday, April 11, in class. The final will be from 12:30--2:30 pm on Monday, April 6, in 218 MLH (our regular classroom).

What We Covered Each Week

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

Handouts and Homeworks

Departmental Information

Department of Computer Science, 14 MacLean Hall. The office of the DEO, Prof. Alberto Segre, is located here.

Administrative Home

The College of Liberal Arts and Sciences (CLAS) is the administrative home of this course. Please visit this page for CLAS teaching policies and resources.