Use of slides & other material: Most of my teaching material, including slides, homework, and lecture notes, is available below.  Please feel free to use this material or modify it as you see fit.  Note that there are still several errors and typos--especially in the lecture notes, which are usually not very carefully edited.  For credit, please just put a little note at the corner of your slides indicating the source.  I welcome comments, suggestions, and corrections to the material from the last year where I taught the course. 


CS 154: Introduction to Automata and Complexity Theory.
Winter 2002, Winter 2003

Regular sets: finite automata, regular expressions, equivalences among notations, methods of proving a language not to be regular. Context free languages: grammars, pushdown automata, normal forms for grammars, proving languages non-context-free, Turing machines, undecidability. Non-deterministic Turing machines the class NP, NP-completeness, Cook's theorem, reductions between computational problems.


CS 161: Algorithms and Data Structures

Winter 2004, together with Leo Guibas

Efficient algorithms for sorting, searching, and selection. Algorithm analysis: worst and average case analysis. Recurrences and asymptotics. Data structures: balanced trees, heaps, hash tables. Algorithm design techniques: divide-and-conquer, dynamic programming, greedy algorithms, amortized analysis. Algorithms for fundamental graph problems such as depth-first search, connected components, topological sort, shortest paths, and network flow.


CS 262: Computational Genomics.
Spring 2002, Spring 2003, Winter 2004, Winter 2005, Winter 2006.

Introduction to the applications of computer science to genomics research and to basic concepts in genomics from a computer science point of view. Topics: algorithms for sequence analysis and their applications to the most current genomics research, sequence alignments, hidden Markov models, multiple alignment algorithms and heuristic such as Gibbs sampling and the probabilistic interpretation of alignments. Applications of these tools to sequence analysis: DNA sequencing and assembly, genomic annotation of repeats, genes, and regulatory sequences, microarrays and gene expression, and comparative genomics.



CS 273: Algorithms for Structure and Function in Biology.
Sprint 2004,
together with Leo Guibas and Jean-Claude Latombe; Spring 2005, together with Jean-Claude Latombe.

Molecular biology is an exciting application area of computer science, because it presents new computational challenges that ultimately advance the field of CS. Proteins, for example, are long macromolecules that can be modeled as chains in three dimensions with rotational degrees of freedom, a given surface area, and kinematic properties. In that respect, computational methods from robot arm movement, computational geometry, and dynamic simulations, are relevant to the modeling of proteins. However, proteins are vastly more complicated than typical robot arms, and have a complex surface that interacts with the environment. Traditional computational methods have to be modified, or give way to new techniques that are appropriate for the novel challenges of modeling proteins.
        This course covers algorithms for modeling structure and motion in biology. It is a course about exciting new algorithms that are motivated by the challenges we face in modeling macromolecules and predicting their properties in silico. We will cover biology concepts as needed to present the algorithmic material in context. As this is a relatively new field, many of the methods are currently in development, and the structure of the course will reflect that fact. The main reading material will be papers from recent literature, the powerpoint slides, and lecture notes that the students scribe during the class. Coursework will consist of one scribed lecture, two problem sets, and a small project that will involve using some existing software for analysis of biological data.


CS 374: Algorithms in Biology.
Fall 2002, Fall 2003, Fall 2004, Fall 2005

Algorithms and computational models applied to molecular biology and genetics. Current exciting algorithms form a variety of biological areas. Topics include protein kinetics, folding, and modeling; alignments of DNA and protein sequences; genome rearrangements;  DNA evolution, phylogeny and haplotypes; computational models of RNA structure; mining the medical literature; microarray analysis, regulatory motif-finding, DNA computing and self-assembly.