Coursera.org Algorithms: Design and Analysis, Part 1 by Tim Roughgarden, Stanford