CAS CS 330 - Fall 2009 - Introduction to Algorithms

Class meeting time:   Tues/Thurs 2:00-3:30 in MCS B33.

Lab meeting times:    Fri 11-12 and Fri 2-3 PM in SED 206. Lab webpage.   

Class syllabus


Instructor:  Prof. John W. Byers
Email (preferred): byers @ cs . bu . edu
Phone: 617-353-8925
Office: MCS 270

Office Hours:    Mon 9:30 - 11 and Thurs 3:30-5, held in MCS 270


Teaching Fellow:  Karim Mattar
Email: kmattar @ cs . bu . edu

Office Hours:    Mon 7-8PM (EMA 302), Tues 3:30 - 4:30 (EMA 302), Fri 12 -2 (between lab meetings; SED 1st floor lounge)
General CS Tutoring Hour:    Mon 8-9PM (EMA 302).


Official Course Description: This course examines the basic principles of algorithm analysis; techniques of efficient programming; analysis of sorting and searching; graph algorithms; string-matching algorithms; matrix algorithms; integer and polynomial arithmetic; the fast Fourier transform; and NP-hard and NP-complete problems.


Textbook: Algorithm Design, by Kleinberg and Tardos. ISBN 0-321-29535-8.


Syllabus: The details of the class are available on the syllabus.


Homework Assignments and Other Handouts:    

September 3: Homework 1 (pdf), (latex source). Due September 15.

September 16: Homework 2 (pdf), (latex source). Due September 29.

October 1: Homework 3 (pdf), (latex source). Due October 15.

October 15: Midterm study questions (pdf).

October 22: Homework 4 (pdf), (latex source). Due October 29.

October 30: Homework 5 (pdf), (latex source). Due November 12.

November 12: Homework 6 (pdf), (latex source). Due November 24.

November 25: Homework 7 (pdf), (latex source). Due December 10.


Lectures:   

Lecture 1 (9/3): Review of syllabus. Stable matching problem. Gale-Shapley algorithm and implementation.
Kevin Wayne's lecture slides and demo used with permission.

Lecture 2 (9/8): Stable matching wrapup. Representative problems + max sum subinterval. Start of review material from Chapter 2 (slides).

Lecture 3 (9/10): Running time and Big-O notation review. Survey of common running times and how they arise. Intro to graphs and their applications.

Lecture 4 (9/15): Graphs and basic graph algorithms. Graph connectivity and traversal problems. Breadth-first search (BFS) and applications of BFS.
Chapter 3 slides.

Lecture 5 (9/17): Problem solving: Q7 and variant of Q2 from Chapter 3. DAGs and computing a topological ordering of a DAG.

Lecture 6 (9/22): Greedy algorithms and their analysis. Interval scheduling and minimizing lateness. Exchange arguments. Chapter 4 slides.

Lecture 7 (9/24): Problem solving: Q16 from Chapter 4. Belady's algorithm for optimal caching and proof sketch. Start of Dijkstra's algorithm.

Lecture 8 (9/29) Dijkstra's algorithm and analysis. Minimum spanning trees: definitions, algorithms, and analysis. Chapter 4 slides, part 2. Dijkstra's demo.

Lecture 9 (10/1) Problem solving: Q21 & 24 from Chapter 4. Clustering via MSTs. Huffman codes. Chapter 4 slides, part 3.

Lecture 10 (10/6) End of Huffman codes. Begin divide and conquer, recurrences, counting inversions. Chapter 5 slides, part 1.

Lecture 11 (10/8) Problem solving: Q3 from Chapter 5. Algorithms for closest pair of points and integer multiplication. Chapter 5 slides, part 2.

Lecture 12 (10/15) In-depth discussion of evaluating recurrence relations via unraveling and via substitution method. Brief tour of Strassen's algorithm for fast matrix multiplication.

In-class Midterm (10/20)

Lecture 13 (10/22) Midterm solutions. Dynamic programming for weighted interval scheduling (2-way choice) and segmented least squares (n-way choice). Chapter 6 slides, part 1.

Lecture 14 (10/29) Dynamic programming problems: knapsack, RNA secondary structure, sequence alignment.

Lecture 15 (11/2) Problem solving: Q20 from Chapter 6. Bellman-Ford for shortest paths. Intro to max flow. Bellman-Ford slides.

Lecture 16 (11/4) Max-flow / min-cut theorem and algorithms: Ford-Fulkerson, capacity scaling. Slides and demo.

Lecture 17 (11/9) Applications of max-flow: bipartite matching and network reliability. Slides (we only covered the first 20).
Notions and applications of polynomial time reducibility. Chapter 8 slides, (part 1).

Lecture 18 (11/11) Problem solving: Q7 from Chapter 7. More on polytime reducibility and the definition of the class NP.

Lecture 19 (11/18) Non-determinstic polynomial time (NP). NP-hardness, NP-completeness. Using reductions to prove NP-completeness of a problem.
We covered the first 25 of these slides: Ch. 8 (part 2), and a few of these Ch. 8 (part 3), notably the subset sum reduction.

Lecture 20 (11/20) Problem solving: Q14 from Chapter 8. Approximation algorithms: load balancing, center selection, set cover (Chapter 11.1 - 11.3). Slides.

Lecture 21 (11/25) A PTAS for Knapsack (11.8). Overview of local search, gradient descent, simulated annealing. Slides.

Lecture 22 (12/1) Randomized algorithms. Contention resolution, union bounds, global min cut. Slides.

Lecture 23 (12/3) Working with expectations, linearity of expectation. Coupon collector's problem. 7/8 approximation for MAX 3-SAT. Randomized selection and median-finding.

Lecture 24 (12/8) Problem solving: Q18 from Chapter 13. Randomized quicksort. Universal hashing.

Lecture 25 (12/10) Comprehensive course review.


See the syllabus for a tentative gameplan of upcoming material.