Algorithms Specialization by Tim Roughgarden on Coursera Code for all the exercises in Python. All 4 parts: Divide and Conquer, Sorting and Searching, and Randomized Algorithms Graph Search, Shortest Paths, and Data Structures Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming Shortest Paths Revisited, NP-Complete Problems and What To Do About Them