I teach courses in all aspects of quantum computing and theoretical computer science. Below is a list of some of the courses I have offered in the past. If you are interested in a particular course, some topic within quantum computing or theory, or research project such as CPSC 502/503, CPSC 599 or PHAS 598/599, I would be most pleased to meet with you in person and we can chat further.

CPSC 519/619
Quantum computing
This is the introductionary course to quantum computing. It introduces the fundamental theory and practice of quantum algorithms and quantum computing.
CPSC 511/611
Complexity theory
This course builds on CPSC 313 and CPSC 413, and it gives the fundamental theory of different computational models and resources such as time, space, randomization, non-determinism, quantum mechanics, circuits, communication complexity, and oracles.
CPSC 413
Design and analysis of algorithms I
This is the primary course on algorithms. It discusses how to design algorithms for computational problems, analyze algorithms, and compare computational problems. A key concept is the notion of recursion.
CPSC 313
Introduction to computability
This is the introductionary course to theoretical computer science. It introduces regular expressions, languages, Turing Machines, and the famous Halting Problem.
MATH 271
Discrete mathematics
Discrete mathematics is an essential toolbox for computer science. It allows us to talk about concepts such as graphs, binomials, induction, and probabilities.
600-level
Machine learning theory
This course introduces analytical tools for understanding, developing, and choosing machine learning algorithms. It discusses the foundation for many approaches to machine learning.
600-level
Topics in quantum computing
This course discusses advanced algorithmic and computational techniques in quantum computing. It discusses the development of algorithms, mathematical techniques, lower bounds, and research problems in quantum computing.
600-level
Matroids theory and optimization
This course introduces some graph theory and the theory of matroids. It discusses when and why optimization techniques like greedy algorithms work, and it introduces the fundamental idea of duality which is used in e.g. max-flow min-cut and Euclid's GCD algorithm.
600-level
Boolean functions
Satisfiability, 3-SAT, quantum complexity theory, machine learning, error correcting codes, circuit complexity, communication complexity, and the PCP theorem are examples of applications of boolean functions. This course gives the foundation for analyzing and understanding such functions.
http://www.cpsc.ucalgary.ca/~hoyer/