Algorithm Analysis

Monday, September 25: Hash tables Friday, September 22: Memory allocation Wednesday, September 20: Dynamic arrays Monday, September 18: Problem stations Friday, September 15: Recursive running times Wednesday, September 13: Fast sorting Monday, September 11: Binary search Friday, September 8: Pointers Wednesday, September 6: Simple sorting Monday, September 4: Fibonacci Friday, September 1: Setup Wednesday, August 30: Introduction
Course overview

Algorithms are the core of computer science. They are problem-solving strategies, the ideas behind programs, which remain relevant even as programming languages evolve. This is a topic of some importance, because a good algorithm might take a few seconds to solve a problem that otherwise would have taken the lifetime of the universe. In this course, you will learn to:

The main goal of this course is to provide you with a toolbox for approaching a wide range of computational problems that you are likely to encounter. It will be a mix of theory and practice: we will write algorithms in pseudocode and analyze them with logic and mathematics, and we will also implement them in several programming languages.

Prerequisite

Math 280 and CS 256. This course assumes that you have a solid mathematical background and some experience with common data structures.

Textbook

The Algorithm Design Manual, 2nd Edition by Skiena. I will assign reading regularly from this text and from supplementary online sources. This text may also be useful to you later as a general reference and a resource for job interviews.

Office hours

My office hours this semester are 2-4pm Mon/Wed/Fri. If you have other commitments during those times, we can make other arrangements.

Accommodations

If your learning or participation in this course may be affected by a disability or any other factor, please talk to me early in the semester so that we can arrange appropriate accommodations. I will do my best to ensure that everyone can learn effectively.

Attendance

Being in class will be crucial for your learning in this course. Absences will leave holes in your understanding of course concepts. If you must miss a class, you are expected to work to get caught up before the next class.

Graded work

Your final grade will be a weighted average of exams (50%), homework (40%), and reading responses (10%). This table shows how averages translate to the 4-point scale. Please note that I do set a high bar for a 4.0 and this course does not have extra credit.

Academic integrity

It is important to me that you conduct your work in this course with academic integrity. That means abiding by the specific policies outlined here, as well as the general guidelines in the Student Handbook. It is my responsibility to report violations of these policies to the Dean.

Homework

Problem sets will be assigned weekly. Problems may involve writing and analyzing pseudocode, implementing an algorithm in real code, or describing a problem and solution in prose.

Exams

There will be three exams, each covering about a third of the course, with written problems based on the homework. Expected dates are October 2, November 3, and December 20.

Reading

For each section of assigned reading, you will be asked to submit responses to some questions. The deadline for each response is the start of the first exam after it was assigned.

Resources

Things you might find useful:

We will use Sakai for homework submission and grade tracking.