Teaching

*Cartoon stolen from
xkcd.
- Spring 2008: In spring 2008 I will be teaching CS445, Introduction to Algorithms.
The emphasis of this course is on learning techniques for designing and analyzing algorithms and data structures. Topics discussed include: Divide-and-conquer, Dynamic Programming, Sorting and Searching, Graph algorithms, Geometric algorithms, Approximation algorithms, Complexity classes.
- Fall 2007: In fall 2007 I am teaching CS645, Graph Theoretic Concepts in Computer Science. The course reviews classical computer science techniques that are based on graph theoretical concepts. The focus will be on in-depth study of recent topics such as the small world phenomenon, network analysis, P2P and sensor networks.
- I was on sabbatical leave in 2006-07, visiting the Department of Computer Science at the University of Botswana as a Fulbright Scholar. I taught a couple of classes there: an undergraduate course on algorithms and a graduate course on research methods. More information can be found in my KalahariLog.
- Spring 2006: In spring 2006 I taught CS573, Theory of
Computation. The course begins by reviewing properties of major
language classes in the Chomsky Hierarchy. Universal computation
models besides Turing machines, such as general recursive functions,
are examined to amplify the significance of Church's
thesis. Unsolvable problems and reducibility are studied. The bulk of
the course focuses complexity theory, the interrelationships among
complexity classes, and the study of both NP complete and provably
intractable problems. Topics covered include Church's thesis,
undecidability, complexity theory and intractable problems.
- Fall 2005: In fall 2005 I taught CS545, Design and Analysis of Algorithms.
The emphasis of this course is on techniques for designing algorithms for various computer applications. In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. We will also discuss techniques for implementing algorithms and improving program performance.
- Spring 2005: In spring 2005 I taught CS345, Analysis of Discrete Structures.
Topics include trees, graphs, program verification, algorithm analysis, recurrence relations, algorithm classes (greedy, divide and conquer), hashing, combinatorics and elementary probability.
- Fall 2004: In fall 2004 I taught CS545, Design and Analysis of Algorithms.
The emphasis of this course is on techniques for designing algorithms for various computer applications. In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. We will also discuss techniques for implementing algorithms and improving program performance.
- Spring 2004: In spring 2004 I taught CS445, Introduction to Algorithms.
The emphasis of this course is on learning techniques for designing algorithms and data structures for various computer applications. We focus on the design and analysis of algorithms. In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. Topics discussed include: Paradigms of algorithm design, Sorting and Searching, String matching, Graph algorithms, Geometric algorithms, Approximation algorithms.
- Fall 2003: I taught CS645, Advanced Topics in Algorithms. The focus of this class was on Human Computer Interaction and Information Visualization. This class will focus on the concepts underlying human-computer interaction, and information visualization through deisgn and implementation of algorithms for HCI and InfoVis. Topics include: human capabilities (e.g., visual and auditory perception, memory, mental models, and interface metaphors); interface technology (e.g., input and output devices, interaction styles, and common interface paradigms); interface design methods and evaluation (e.g., user-centered design, prototyping, and design principles and rules, experiments); visualization techniques (visualization to enhance comprehension and analysis of structured information such as text collections, networked systems like the Web, work processes, etc.)
- Spring 2003: In spring 2003 I taught CS445, Introduction to Algorithms.
The emphasis of this course is on learning techniques for designing algorithms and data structures for various computer applications. We focus on the design and analysis of algorithms. In the process of learning and practicing methods of algorithm design, we will see many examples of important algorithms. Topics discussed include: Paradigms of algorithm design, Sorting and Searching, String matching, Graph algorithms, Geometric algorithms, Approximation algorithms.
- Fall 2002: I taught CS473, Automata, Grammars, and Languages.
This course is an introduction to the fundamental models of
computation used throughout computer science: finite automata,
pushdown automata, and Turing machines. The hierarchical relationships
among these models, their relative power and limitations, and their
variants are studied. Student skills are developed in understanding
and using rigorous definition and proof to attack precisely formulated
questions about computability and computation. Topics covered include:
finite automata and regular expressions, turing machines, properties
of regular sets, Church's thesis, context-free grammars and pushdown
automata, recursive and recursively , enumerable sets, properties of
context-free languages, universal machines, undecidable problems, and
reducibility.
- Spring 2002: In spring 2002 I taught CS573, Theory of Computation.
The course begins by reviewing properties of major
language classes in the Chomsky Hierarchy. Universal computation
models besides Turing machines, such as general recursive functions,
are examined to amplify the significance of Church's
thesis. Unsolvable problems and reducibility are studied. The bulk of
the course focuses complexity theory, the interrelationships among
complexity classes, and the study of both NP complete and provably
intractable problems. Topics covered include Church's thesis,
undecidability, complexity theory and intractable problems.
- Fall 2001: I taught CS473, Automata, Grammars, and Languages.
This course is an introduction to the fundamental models of
computation used throughout computer science: finite automata,
pushdown automata, and Turing machines. The hierarchical relationships
among these models, their relative power and limitations, and their
variants are studied. Student skills are developed in understanding
and using rigorous definition and proof to attack precisely formulated
questions about computability and computation. Topics covered include:
finite automata and regular expressions, turing machines, properties
of regular sets, Church's thesis, context-free grammars and pushdown
automata, recursive and recursively , enumerable sets, properties of
context-free languages, universal machines, undecidable problems, and
reducibility.
- Spring 2001: In spring 2001 I taught CS645, Advanced Topics in Algorithms. The focus of this class was on Information Visualization and Graph Drawing. Some of the topics include:
- Drawing trees, graphs, and digraphs
- Divide and conquer techniques, multi-scale methods, and incremental constructions
- Planar graphs and planarization
- Orthogonal drawings, upward planarity, and nonplanar orientations
- Force-directed methods and n-body techniques
- Map labeling and automatic label placement
- Fall 2000: I fall 2000 I taught CS473, Automata, Grammars, and Languages.
This course is an introduction to the fundamental models of
computation used throughout computer science: finite automata,
pushdown automata, and Turing machines. The hierarchical relationships
among these models, their relative power and limitations, and their
variants are studied. Student skills are developed in understanding
and using rigorous definition and proof to attack precisely formulated
questions about computability and computation. Topics covered include:
finite automata and regular expressions, turing machines, properties
of regular sets, Church's thesis, context-free grammars and pushdown
automata, recursive and recursively , enumerable sets, properties of
context-free languages, universal machines, undecidable problems, and
reducibility.
Other useful links: