This course is based on 6.046J Introduction to Algorithms made available by Massachusetts Institute of Technology: MIT OpenCourseWare under the Creative Commons BY-NC-SA license.
This course is taught at MIT by Prof. Erik Demaine and Prof. Charles Leiserson. Prof. Leiserson co-authored the textbook for the course Introduction to Algorithms, Second Edition. This course teaches techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing. A full set of lecture notes is available together with this course.
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduction to Algorithms, 2nd Edition, MIT Press, 2001, ISBN 0262032937, 9780262032933.
Quiz and exam questions together with the solutions are available here.