Home Research Publications Teaching

Randomized Algorithms (COMPSCI 630) Spring 2016 Spring 2018
Randomization is a key technique in many settings, and is becoming more important in both theory and practice. It does not only lead to algorithms with better performance/fast running time, in some settings it also makes impossible things feasible. In this course we will see examples of the power of randomness. This will include basic techniques like linearity of expectation, union bounds and concentration of measure. We will also focus on the applications related to dimension reduction (in different settings) and Markov Chains.
Algorithmic Aspects of Machine Learning (COMPSCI 590) Fall 2015, Fall 2016
Many machine learning problems (like sparse coding or topic modeling) are hard in the worst-case, but nevertheless solved in practice by algorithms whose convergence properties are not understood.
In this course we will see many instances where we can design algorithms for machine learning problems that have rigorous guarantees. The course will cover topics such as: nonnegative matrix factorization, topic models, matrix completion and tensor decomposition. Although all these problems are NP-hard in the worst-case, we will see what properties real-life instances may satisfy and why these properties allow us to design efficient algorithms with provable guarantees.
Design and Analysis of Algorithms (COMPSCI 330) Fall 2016, Fall 2017, Spring 2019
Algorithms are one of the foundations of computer science. Designing efficient algorithms under different resource constraint is a ubiquitous problem. In this course, we will study basic principals of designing and analyzing algorithms. In the class we will see classical examples of algorithms design including graph algorithms, data structures, Linear Programming and gradient descent. The goal of this course is to familiarize undergraduate students with algorithm design techniques that can be generalized to many application areas.