Elements from discrete mathematics (parts of chapters 1-5).
Examples of recurrences.
Elementary data structures: lists, stacks, queues, trees,
hash tables, binary search trees, red-black trees, heaps,
augmenting data structures (chapters 6, 10-14).
Sorting and selection: quicksort, mergesort, bucket sort, linear
time selection (chapters 7-9).
Advanced data structures: binomial heaps (chapter 19),
Fibonacci heaps (chapter 20),
disjoint set structures (chapter 21), leftist heaps,
fractional cascading, Van Emde Boas trees,
Iacono's working set data structure,
splay trees and pagodas (from notes).
Amortizing (chapter 17).
Data structures in compression: Huffman trees,
digital trees and tries, Lempel-Ziv compression,
move-to-front compression, Kraft's inequality, entropy.
Paradigms for algorithms (superficial coverage): greedy methods,
heuristics, dynamic programming, string matching.
Lower bounds. Information-theoretic methods.
Fast Fourier transform (chapter 30). Polynomial multiplication.
Convolution. String alignment.
We will follow Cormen, Leiserson, Rivest and Stein (2009).
Occasionally, there will be a handout about
a topic that is not covered in the textbook,
such as leftist heaps (Tarjan),
splay trees (Tarjan and Sleator),
Willard's trees (Willard),
Van Emde Boas trees,
skip lists (Pugh),
the working set data structure (Iacono),
move-to-front compression (Bentley, Sleator, Tarjan, Wei),
space partition trees for graphics (Samet)
or suffix trees for string searching (Stephen).
T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein: "Introduction to
Algorithms Third Edition", MIT Press, Cambridge, MA, 2009.