The complete course
Start with the foundations, then connect the code to its mathematical cost. Lecture numbering follows the supplied files, including the Git introduction at 00.
Git & the working environment
Keep a reliable history of your experiments, work with branches, and navigate your course files.
Lecture 00 · Beginner · ~20 min guide · 13 source pagesThinking in algorithms
Understand the relationship between a problem, an algorithm, a data structure and a program.
Lecture 01 · Beginner · ~25 min guide · 12 source pagesJava setup & first programs
Understand the Java toolchain, run the supplied examples, and connect methods, input and output.
Lecture 02 · Beginner · ~25 min guide · 15 source pagesEuclid’s algorithm & recursion
Compute a greatest common divisor through a shrinking sequence of remainders.
Lecture 03 · Beginner · ~35 min guide · 26 source pagesMeasuring & modelling algorithms
Connect timing experiments, operation counts, growth classes, binary search and memory analysis.
Lecture 04 · Intermediate · ~70 min guide · 88 source pagesUnion–find & dynamic connectivity
Improve a connectivity data structure from eager component labels to weighted trees and path compression.
Lecture 05 · Intermediate · ~65 min guide · 127 source pagesAsymptotic analysis & growth rates
Read Big O, Big Omega and Big Theta precisely, and compare how algorithms scale.
Lecture 06 · Intermediate · ~55 min guide · 109 source pagesStacks, queues & amortized analysis
Study abstract data types, linked structures, resizing arrays, generics and expression evaluation.
Lecture 07 · Intermediate · ~65 min guide · 64 source pagesStudy times are estimates for the expanded guides. Original slide decks and source code may take longer to work through. Supplementary reference code is organized separately in the algorithm library.