Algorithms Specialization
based on Stanford's undergraduate algorithms course (CS161).
Comprises four 4-week courses:
- Part 1: Divide and Conquer, Sorting and Searching, and Randomized Algorithms
- Covers asymptotic ("Big-oh") notation, sorting and searching, divide and conquer (master method, integer and matrix multiplication, closest pair), and randomized algorithms (QuickSort, contraction algorithm for min cuts).
- Part 2: Graph Search, Shortest Paths, and Data Structures
- Covers data structures (heaps, balanced search trees, hash tables, bloom filters), graph primitives (applications of breadth-first and depth-first search, connectivity, shortest paths), and their applications (ranging from deduplication to social network analysis).
- Part 3: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming
- Covers greedy algorithms (scheduling, minimum spanning trees, clustering, Huffman codes) and dynamic programming (knapsack, sequence alignment, optimal search trees).
- Part 4: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them
- Covers shortest paths (Bellman-Ford, Floyd-Warshall, Johnson), NP-completeness and what it means for the algorithm designer, and strategies for coping with computationally intractable problems (analysis of heuristics, local search).
These courses have appeared on various "top MOOCs of all time" lists, like
here and here.
New sessions begin every few weeks.
This specialization subsumes the following older versions: