Luc Devroye |
Email to firstname.lastname@example.org |
Tel: (514) 398-3738 (office) |
McConnell Engineering Building, Room 300N |
Office hours: Monday, 11-12am, Wednesday, 11:30am-1pm,
and any time my door is open.
You don't work for me---I work for you.
Time and location
Wednesday & Friday, 10-11:30am, January 8, 2016 --- April 15, 2016.
Room: Trottier 70.
Midterm: February 19, 2016, 10-11:30am, Trottier 70.
Study break: February 29-March 5, 2016.
Extra lectures: Monday March 21 (Trottier 70), Thursday, March 24 (Trottier 60),
and Monday, April 11 (Trottier 90), all from 6-7:30pm.
These lectures replace those of April 1, 6 and 8.
Last day of lectures: April 15.
Final exam: April 18, 2-5pm, room Wong 1020.
Part 1. Data types.
- Abstract data types.
- Lists. Linked lists. Examples such as sparse arrays.
- Stacks. Examples of the use of stacks in recursion and problem solving.
- Trees. Traversal. Implementations. Binary trees.
- Indexing methods. Hashing.
- Introduction to abstract data types such as mathematical set,
priority queue, merge-find set and dictionary.
- Binary search trees, balanced search trees.
- Tries, suffix trees.
- Data structures for coding and compression.
Part 2. Algorithm design and analysis.
- The running time of a program.
- Worst-case and expected time complexity.
- Analysis of simple recursive and nonrecursive algorithms.
- Searching, merging and sorting.
- Amortized analysis.
- Lower bounds.
- Introductory notions of algorithm design:
- Divide-and-conquer. Recurrences. The master theorem. Quicksort. Other examples such as fast multiplication of polynomials and matrices. Fast Fourier transform.
- Dynamic programming. Examples such as Bellman-Ford network flow, sequence alignment, knapsack problems and Viterbi's algorithm.
- Greedy methods. This includes the minimal spanning tree algorithm and Huffman coding.
- Graph algorithms.
- Depth-first search and breadth-first search
- Shortest path problems
- Minimum spanning trees
- Directed acyclic graphs
- Network flows and bipartite matching
T.H. Cormen, C.E.Leiserson, R.L.Rivest, and C. Stein:
Introduction to Algorithms (Third Edition), MIT Press, Cambridge, MA, 2009. Amazon link.
There are several printings of the first
edition of this book. All are equivalent.
A list of errata of the second printing
is available on-line.
Excellent pirated copies of this book are navigating the web.
Another appropriate text, with a different focus (more algorithms, fewer data structures) is by J. Kleinberg and E. Tardos:
"Algorithm Design". Pearson, Boston, 2006.