This page provides information about online lectures and lecture slides for use in teaching and learning from the book Algorithms, 4/e. These lectures are appropriate for use by instructors as the basis for a “flipped” class on the subject, or for self-study by individuals.

Flipped classroom.

If you are an an instructor teaching introductory computer science, an effective way for you to teach the material in a typical college class is to adhere to a weekly cadence, as follows: This is just one suggestion—this material can support many different teaching styles and formats.

Important note: A common mistake in teaching a flipped class is to add too much enrichment material. Our experience is that time in class meetings is much better spent preparing students for success on programming assignments and exams. If an instructor makes it clear that the best way to prepare for exams is to watch the lecture videos and do the reading, most students will do so. Class meetings then can involve interacting with students and with the material in such a way as to reinforce understanding. For example, working with potential exam questions is an excellent activity.


An effective way to learn the material on your own is to watch the lecture videos on some regular schedule, do the associated reading, and attempt to solve some of the exercises in the book or on the booksite on your own. If you get stuck on a particular exercise, find some others or try to solve some of the problems given in the lectures without looking at the solutions there.

Available lectures.

The lecture videos are available by subscription from CUvids; the lecture slides are freely available in pdf format. When watching a lecture video, it is very important to choose an appropriate speed. If it is too slow, you are likely to be bored; if it is too fast, you are likely to get lost. Also be sure to make liberal use of pause and rewind.

Table of lectures. Here are lecture slides and demos.

0 Introduction
1.1 Programming Model
1.2 Data Abstraction
1.3 Stacks and Queues Dijkstra 2-stack
1.4 Analysis of Algorithms Binary search
1.5 Case Study: Union Find Quick-find   Quick-union   Weighted
2.1 Elementary Sorts Selection   Insertion   h-sorting   Knuth shuffle
2.2 Mergesort Merging
2.3 Quicksort Partitioning   Quick-select
2.4 Priority Queues Heap   Heapsort
3.1 Elementary Symbol Tables
3.2 Binary Search Trees BST
3.3 Balanced Search Trees 2–3 tree   Red–black BST   GrowingTree
Geometric Applications of BSTs Kd tree   Interval search tree
3.4 Hash Tables Separate chaining   Linear probing
3.5 Searching Applications
4.1 Undirected Graphs DFS   BFS   Connected components
4.2 Directed Graphs DFS   BFS   Topological sort   Kosaraju–Sharir
4.3 Minimum Spanning Trees Greedy   Kruskal   Prim
4.4 Shortest Paths Dijkstra   Acyclic   Bellman–Ford
5.1 String Sorts Key-indexed counting
5.2 Tries Trie   TST
5.3 Substring Search KMP
5.4 Regular Expressions NFA simulation   NFA construction
5.5 Data Compression Huffman   LZW
6.4 Maximum Flow Ford–Fulkerson
Linear Programming Simplex