CO 330: Combinatorial Enumeration (Fall 2022)

This webpage will not be updated during the term.
All course materials will be posted on LEARN.

Syllabus: A tentative version is available here. The final version of the syllabus will be available on LEARN at the start of the semester.

Overview: This course is about combinatorial enumeration: the counting of discrete objects using combinatorial techniques. Combinatorics lies in the intersection of pure mathematics, applied mathematics, and computer science, and this course will showcase the intriguing interactions between these areas. Part of the fun and the usefulness of combinatorial enumeration comes from the nice classes of combinatorial objects that we’ll study – which find application in areas from the analysis of algorithms to properties of DNA sequences – and our approach to these concrete problems will lead us to study general techniques for combinatorial sequences. We always strive for effective methods, meaning methods that are explicit enough that they can be implemented on a computer.

Assessment: Final exam (40%), one midterm (30%), and six assignments (30%)

References: Course notes will be distributed on

Additional references include the CO 330 Course Notes by David Wagner, generatingfunctionology by H. Wilf, and Chapter 2 of An Invitation to Analytic Combinatorics by S. Melczer.

Use of Computer Software: I will be using the (free and open source) computer algebra software Sage to illustrate some examples during lectures. Although it is not necessary to learn Sage for the course, I will release the code used to generate these examples and playing around with it yourself can greatly help your understanding.

A short tutorial on Sage can be downloaded at this link or viewed as a static HTML page here. Possibilities for running Sage yourself include

  1. Installing Sage on your computer from its website (can be surprisingly tricky)
  2. Signing up for a free account on the online browser-based CoCalc service (warning: can be slow)
  3. Using Waterloo’s JupyerHub website (requires Waterloo login)
  4. SageMathCell for a quick computation (can’t save results)
  5. Using a cloud environment like (note: the use of mybinder for Sage is currently tricky due to a change under the hood)