Lectures

Class lectures:
Tuesdays, Thursdays 2:00pm-3:20pm HSS 1330

The purpose of lectures is to introduce the basic material we will be covering in this course. You will be responsible for this material on the exams, and you will need to know it to do the programming assignments.

The only reason to come to lecture is to learn something about this material. If you're not interested in that, don't waste your time. The basic rule is: Listen or leave.

The lecture notes below are in HTML and PDF format. (I revise my lecture notes every quarter, and so they may not be available here much in advance of the lecture itself. If you need a PDF reader for your own browser, you can download Acrobat Reader for free from Adobe .)
Lecture 1 Thu Sep 22

Introduction; Structure and requirements of the course; Overview of trees and their properties.
Lecture 2 Tue Sep 27

The C++ programming language; comparison of C++ and Java; introduction to OO programming in C++. (Reading: Weiss Ch 1)
Lecture 3 Thu Sep 29

Binary search trees; basic operations on BST's; BST's, C++ iterators, and the BST successor function. (Reading: Weiss Ch. 4)
Lecture 4 Tue Oct 04

Analysis of binary search trees; balance; AVL trees and AVL rotations; AVL insertion. (Reading: Weiss Ch. 4)
Lecture 5 Thu Oct 06

Treaps; Find, insert, delete, split, and join in treaps; Randomized search trees; Analysis of randomized search trees. (Reading: Aragon and Seidel paper; Weiss Ch. 12)
Lecture 6 Tue Oct 11

Random number generation; Randomized data structures; Skip lists; Analysis of skip lists. (Reading: Pugh paper; Weiss Ch. 10)
Lecture 7 Thu Oct 13

Red-black trees; Analysis of red-black trees; operations on red-black trees. (Reading: Weiss Ch. 12)
Lecture 8 Tue Oct 18

Trees for representation; Tries, decision and classification trees, discrimination nets; alphabet tries; Huffman coding. (Reading: Weiss Ch. 10)
Lecture 9 Thu Oct 20

Analysis of Huffman coding; Priority queues; Heaps; Dynamic data and array representations of Huffman tries. (Reading: Weiss Ch. 6 and Ch. 10)
Lecture 10 Tue Oct 25

I/O in C++; C++ standard library I/O classes; Binary and text file I/O; Buffering; Bitwise I/O. (Reading: C++ I/O documentation)
Midterm examThu Oct 27
Lecture 11 Tue Nov 01

Intro to Graphs; vertices, edges, paths, cycles; Sparse and dense graphs; Adjacency matrices and adjacency lists. (Reading: Weiss, Ch. 9)
Lecture 12 Thu Nov 03

Algorithms on graphs; breadth-first, depth-first search; shortest path in unweighted graphs; greedy algorithms; Djikstra's algorithm for shortest paths in weighted graphs. (Reading: Weiss, Ch. 9, Ch. 10)
Lecture 13 Tue Nov 08

Connectedness in graphs; spanning trees; Prim's and Kruskal's algorithms for finding minimum cost spanning trees; disjoint subset data structures and union-find; Analysis of graph algorithms and NP-completeness. (Reading: Weiss, Ch. 8, Ch. 9)
Lecture 14 Thu Nov 10

Applications of disjoint subsets; union-by-height and union-by-size; Find with path compression; Amortized cost analysis. (Reading: Weiss, Ch. 8)
Lecture 15 Tue Nov 15

Radix search; digital search trees, multiway tries, ternary tries and their properties.
Lecture 16 Thu Nov 17

Hashing; hash table and hash function design; Hash functions for integers and strings; Open addressing and separate chaining collision resolution strategies; Analysis of hashing. (Reading: Weiss, Ch. 5)
Lecture 17 Tue Nov 22

Time costs in a memory hierarchy; B-trees; B-tree find, insert, delete; 2-3 trees; Analysis of B-trees. (Reading: Weiss, Ch. 4)
University holidayThu Nov 24
Lecture 18 Tue Nov 29

Self-organizing data structures; self-organizing lists; Splay trees; Spatial data structures; K-D trees. (Reading: Weiss, Ch. 4 and Ch. 12)
Lecture 19 Thu Dec 01

Final review.