Coursera Stanford Algorithms: Design and Analysis, Part 1 Notes and Source