Algorithms: Design and Analysis, Part 1

In this course you will learn several fundamental principles of algorithm design. You'll learn the divide-and-conquer design paradigm, with applications to fast sorting, searching, and multiplication. You'll learn several blazingly fast primitives for computing on graphs, such as how to compute connectivity information and shortest paths. Finally, we'll study how allowing the computer to "flip coins" can lead to elegant and practical algorithms and data structures.

Specific topics in the course include: "Big-oh" notation, sorting and searching, divide and conquer (master method, integer and matrix multiplication, closest pair), randomized algorithms (QuickSort, contraction algorithm for min cuts), data structures (heaps, balanced search trees, hash tables, bloom filters), graph primitives (applications of BFS and DFS, connectivity, shortest paths).

Learn the answers to questions such as:

  • How do data structures like heaps, hash tables, bloom filters, and balanced search trees actually work, anyway?
  • How come QuickSort runs so fast?
  • What can graph algorithms tell us about the structure of the Web and social networks?
  • Did my 3rd-grade teacher explain only a suboptimal algorithm for multiplying two numbers?

Course Page
Paid after free trial
Online, self-paced, EdX
Stanford School of Engineering