CS 532/632 Analysis and Design of Algorithms
An introduction to the design and analysis of algorithms. The course ocvers design techniques, such as dynamic programming and greedy methods, as well as fundamentals of analyzing algorithms for correctness and time and space bounds. Topics include advanced sorting and searching methods, graph algorithms and geometric algorithms. Other areas vary from year to year and may include computational geometry, matrix manipulations, string and pattern matching, set algorithms, polynomial computations and the fast Fourier transform.
CS 533/633 Automata & Formal Languages
Automata theory, also referred to a theory of computation, introduces fundamental models that are used over and over again in computer science for programming languages, in compiler construction and in algorithms. These models are a valuable part of the repertoire of any computer scientist or engineer. This course introduces progressively more powerful models of computation, starting with finite automata and moving to stack and tape (Turing) machines. It also presents the regular, context-free, recursive and recursively enumerable languages and shows how they correspond to the various models of computation and to generation mechanisms such as regular expressions and grammars. The emphasis is on understanding the properties of these models, the relationships among them and how modifications, such as nondeterminism and resource bounds, affect them.
CS 599/699 Parallel ProgrammingAn introduction to parallel programming concepts and techniques. Topics include: parallel programming models and languages, share-memory programming, message-passing programming, performance models and analysis techniques, domain-specific parallel algorithms.
CS 599/699 Design Patterns
Software Design Patterns are reusable solutions to recurring software problems. They capture successful experiences and convey expert insight and knowledge to less experienced developers. This course provides an in-depth view of patterns using Java as the presentation language. The course is suitable to software architects and developers who are already well-versed in this language. In addition, this course will offer continuous opportunities for learning the most advanced features of the Java language and understanding some principles behind the design of its fundamental libraries.
CS 599/699 Object Oriented Programming
The fundamental concepts of object-oriented programming languages, including data abstraction and typing, class inheritance and generic types, prototypes and delegation, concurrency control and distribution, object-oriented databases, and implementation. To illustrate these issues, programming assignments in languages such as Smalltalk, Eiffel and C++ will be given.
CS 599 Randomized Algorithms and Probabilistic Analysis
Probabilistic tools used in the design and analysis of modern algorithms and data structures. Topics include: review discrete random, occupancy problems, tail bounds, Markov chains, the probabilistic method, martingales, Monte Carlo methods. The course explores a variety of CS applications.