Lecture notes
Notes will usually be posted the day before lecture.
course outline
[pdf] 
Lecture 1 (May 2): course introduction
[pdf] [one]

Lecture 2 (May 4): solving recurrence
[pdf] [one]

Lecture 3 (May 9): divide and conquer
[pdf] [one]

Lecture 4 (May 11): divide and conquer II
[pdf] [one]

Lecture 5 (May 16, 18): breadth first search
[pdf] [one]

Lecture 6 (May 25): depth first search
[pdf] [one]

Lecture 7 (May 30, June 1): directed graphs
[pdf] [one]

Lecture 8 (June 6): greedy algorithms
[pdf] [one]

Lecture 9 (June 8): Huffman coding
[pdf] [one]

Lecture 10 (June 13): single source shortest paths
[pdf] [one]

Lecture 11 (June 15): dynamic programming
[pdf] [one]

Lecture 12 (June 20): dynamic programming II
[pdf] [one]

Lecture 13 (June 22): dynamic programming on trees
[pdf] [one]

Lecture 14 (June 27, 29): dynamic programming on graphs
[pdf] [one]

Lecture 15 (July 4): bipartite matching
[pdf] [one]

Lecture 16 (July 6): bipartite vertex cover
[pdf] [one]

Lecture 17 (July 11): polynomial time reductions
[pdf] [one]

Lecture 18 (July 13): NPcompleteness
[pdf] [one]

Lecture 19 (July 18): hard graph problems
[pdf] [one]

Lecture 20 (July 20): hard partitioning problems
[pdf] [one]
