I have taught the following courses while at The University of Toronto. Course materials are posted on a secured website, but the syllabus for each course is below.


ECE 345: Algorithms and Data Structures (Winter 2013)

Design and analysis of algorithms and data structures that are essential to engineers in every aspect of the computer hardware and software industry. Review of background material (recurrences, asymptotics, summations, trees and graphs). Sorting, search trees and balanced search trees, amortized analysis, hash functions, dynamic programming, greedy algorithms, basic graph algorithms, minimum spanning trees, shortest paths, introduction to NP Completeness.

Syllabus

CSC 373: Algorithm Design and Analysis (Fall 2012)

Brief introduction to NP-completeness: polynomial time reductions, examples of various NP-complete problems, selfreducibility. Standard algorithm design techniques: greedy strategies, dynamic programming, network flows, linear programming, randomization, approximation algorithms, and others (if time permits). Students will be expected to use appropriate algorithm design principles and to show adequate skills at reasoning about the correctness and complexity of algorithms.

Syllabus

MAT 223: Linear Algebra I (Summer 2012)

Systems of linear equations, matrix algebra, determinants. Vector geometry in R2 and R3. Complex numbers. Rn: subspaces, linear independence, bases, dimension, column spaces, null spaces, rank and dimension formula. Orthogonality, orthonormal sets, Gram-Schmidt orthogonalization process, least square approximation. Linear transformations from Rn to Rm. The determinant, classical adjoint, Cramer's rule. Eigenvalues, eigenvectors, eigenspaces, diagonalization. Function spaces and applications to a system of linear differential equations. The real and complex number fields.

Syllabus