Teaching
*Cartoon stolen from
xkcd.
- Spring 2018: In spring 2018 I taught CS630, Multi-Level Graph Representation.
- Fall 2017: In fall 2017 I taught CS545, Design and Analysis of Algorithms.
- Spring 2017: In spring 2017 I taught CS573, Theory of Computing.
- Fall 2016: In fall 2016 I taught CS545, Design and Analysis of Algorithms.
- Spring 2015: In spring 2015 I taught CS345, Analysis of Discrete Structures.
- Fall 2014: In fall 2014 I taught CS573, Theory of Computing.
- Spring 2014: In spring 2014 I taught CS645, To Planarity and Beyond: Algorithms for Planar and Not-So-Planar Graphs.
- Fall 2013: In fall 2013 I taught CS473, Automata, Grammars and Languages.
- Spring 2013: In spring 2013 I taught CS645, Experimental Algorithmics, or Making Algorithms Work.
- Fall 2012: In fall 2012 I taught CS473, Automata, Grammars and Languages.
- Spring 2011: In spring 2011 I taught CS445, Introduction to Algorithms.
- Fall 2010: In fall 2010 I taught CS645: Information Visualization for Large and Complex Data. This course dealt with current research problems in visualizing large and complex data such as social networks with hundreds
of thousands of participants and millions of relationships. Modeling such data and developing effective visualization tools is a challenging theoretical and practical task. The main focus was on research projects that utilize real-world large datasets from FaceBook, Netflix and the Tree of Life.
- Spring 2010: In spring 2010 I taught 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 2009: In fall 2009 I taught CS345, Analysis of Discrete Structures.
Topics included trees, graphs, program verification, algorithm analysis, recurrence relations, algorithm classes (greedy, divide and conquer), hashing, combinatorics and elementary probability.
- Spring 2008: In spring 2010 I taught 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 taught CS645, Graph Theoretic Concepts in Computer Science. Topics included graph matching, covers, coloring, planar graphs, Kuratowski's theorem, Wagner's theorem, and graph minors. We also considered the small world phenomenon in the context of generating small world graphs and applications in social networks, ad hoc networks, and peer to peer 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, Computer Interaction and Information Visualization. We studied concepts underlying human-computer interaction, and information visualization through design 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, Information Visualization and Graph Drawing. Some of the topics included drawing trees, graphs, and digraphs, divide and conquer techniques, multi-scale methods, and incremental constructions, Planar graphs and planarization, 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: