Designing Matching Algorithms and Collaborative Project Experiences in Computer Science
Designing algorithms is a fundamental task for computer scientists that goes from theory to implementation and application. In the first part of the talk, we will consider the design of two-sided matching algorithms for problems like residency matching and school choice. We will practice using enumeration, lists, and sets in Python in order to create a working matching application, and will consider the theoretical and practical design criteria that might make one implementation preferable to another. Along the way, we will see the famous Gale-Shapley algorithm for matching and some real-world implementations of matching algorithms.
In the second half of the talk, we will step back and consider how the approach of the first half reflects a larger goal of engaging students in the process of becoming computer scientists through active and collaborative learning. We will discuss integrating collaborative and open-ended student-driven projects in courses and co-curricular experiences like CS+, a structured summer program for computer science projects.
Brandon Fain is an assistant research professor of computer science at Duke University, where he teaches courses on algorithms and data science and organizes the CS+ summer undergraduate projects program. His interests include working with undergraduate researchers, developing collaborative and project-driven courses, and conducting research in algorithmic fairness and computational social choice. He completed his PhD in algorithms at the Department of Computer Science at Duke University in May 2019.