- On sabbatical, Fall 2023 and Spring 2024
- COSC 225: Algorithms and Visualization
- COSC 273: Parallel and Distributed Computing
Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.
- COSC 311: Algorithms
This course addresses the design and analysis of computer algorithms. Topics include: set algorithms such as sorting and searching, graph algorithms, string algorithms, and matrix algorithms. Algorithm design paradigms, including the divide-and-conquer, dynamic programming, and greedy paradigms, will be emphasized. The course will end with a discussion of the theory of NP-completeness and its implications.
- COSC 211: Data Structures
A fundamental problem in computer science is that of organizing data so that it can be used effectively. This course introduces basic data structures and their applications. Major themes are the importance of abstraction in program design and the separation of specification and implementation. Program correctness and algorithm complexity are also considered. Data structures for lists, stacks, queues, dictionaries, sets, and graphs are discussed. This course will provide advanced programming experience.
- COSC 373: Distributed Algorithms
A distributed system consists of a network of processors that communicate by exchanging messages. No processor has a global view of the network, so neighboring processors must communicate in order for the system to perform a given task. In this course, we will study the theory of distributed systems. We will consider fundamental algorithmic tasks—for example, finding spanning trees, maximal independent sets, and graph coloring—in several models of distributed computing. Our goal is to understand under what conditions these tasks can be performed efficiently, if at all. While this course is primarily theoretical, we will discuss applications of the theory to modern computing paradigms (e.g., MapReduce).
- COSC 112: Introduction to Computer Science II
Fall/Winter 2018 (MPI/University of Saarland)
- Advanced Seminar: Algorithms on Digraphs
Spring 2016 (UCLA)
- PIC10B: Intermediate Programming
Fall 2015 (UCLA)
- Math 475: Teaching College Mathematics
Fall 2014 (UCLA)
- Math 32AH: Calculus of Several Variables (Honors)