Courses

All courses carry 3 credits unless otherwise specified.

501 Formal Language Theory
Introduction to formal language theory. Topics include finite state languages, context-free languages, the relationship between language classes and formal machine models, the Turing Machine model of computation, theories of computability, resource-bounded models, and NP-completeness.

503 Embedded Systems
This course introduces tools necessary to design embedded computational applications. Each student will design and build an embedded control application as a member of a team. The course is heavily project-oriented (with a required lab) and discussions will include topics such as; (1) mechanisms, sensors, actuators and feedback systems, (2) analog and digital  circuits, power amplifiers, signal processing, operational amplifiers, multiplexing, (3) I/O - A/D, D/A, and latching, serial and parallel interfaces, (4) signal processing/conditioning and (5) an introduction to real-time programming.

513 Logic in Computer Science
Rigorous introduction to mathematical logic from an algorithmic perspective. Topics include: Propositional logic; Horn clause satisfiability and SAT solvers; First Order Logic: soundness and completeness of resolution, compactness theorem. We will use the Coq theorem prover and Datalog.

514 Algorithms for Data Science
Mathematical and algorithmic foundations of big data processing. Study of methods for sampling, sketching, and distributed processing of large scale databases, graphs, and data streams for purposes of scalable statistical description, querying, pattern mining, and learning.

520 Software Engineering: Synthesis and Development
Introduces students to the principal activities involved in developing high-quality software systems. Topics include: requirements analysis, formal specification methods, process definition, software design, and risk management.

521 Software Engineering: Analysis and Evaluation
The current best testing and analysis practices; promising new approaches, going beyond the testing of programs and modules and extending the scope to include analysis of all software products across the lifecycle and analysis of software processes.

530 Programming Languages
Practical and theoretical aspects of several currently prominent languages representing distinct paradigms, including imperative, functional and logic programming. Focus on object-oriented languages, and C++ in particular.

535 Computer Architecture
The structure of digital computers from the basic logic level, to the component level, to the system level. Topics include: the design of basic components such as arithmetic units and registers from logic gates; the organization of basic sub-systems such as the memory and I/O subsystems; the interplay between hardware and software in a computer system; the von Neumann architecture and its modern competitors.

551 3-D Animation and Digital Editing
Students work alone and in teams to create high-quality publishable animated pieces using three-dimensional graphics technology. Techniques include digital editing, sound, music, design, modeling, rendering, surfaces, textures, and lighting.

552 Interactive Multimedia Production
Students explore interactive authoring tools to develop presentation and training systems by using programming languages within professional packages to present graphics, animation, text, sound, and music based on user request.

575 Combinatorics and Graph Theory
Cross-listed with MATH 513. A basic introduction to combinatorics and graph theory for advanced students in computer science, mathematics, and related fields. Topics include elements of graph theory, Euler and Hamiltonian circuits, graph coloring, matching, basic counting methods; generating functions; recurrences; inclusion-exclusion; Polya’s theory of counting.

585 Natural Language Processing
Natural Language Processing techniques developed in Artificial Intelligence with an emphasis on memory oriented models and corpus-driven research. Focus on semantically oriented sentence analysis, narrative text comprehension.

590 Experimental Courses
New courses being taught on an experimental basis.

591 Seminar on Computer Science
Conferences, reports, and lectures on topics not currently covered in regular courses. Consent of instructor required. Credit, 1-6.

596 Independent Study
Credit, 1-6.

601 Computation Theory
An in-depth introduction to the main models and concepts of the mathematical theory of computation, including computability, complexity, and logic.

603 Robotics
The design and analysis of adaptive, closed-loop physical systems. Focus on sensorimotor machines that interpret and manipulate their environments. Involves study of mechanisms (kinematics and dynamics), actuators, sensors (with a focus on machine vision), signal processing, optimal estimators, associative memory, feedback control theory, supervised and unsupervised learning, and task planning.

610 Compiler Techniques
Basic problems in the translation of programming languages focusing on theory and common implementation techniques for compiling traditional (Pascal-like) programming languages to produce assembly or object code for typical machines. Involves a substantial laboratory project in which the student constructs a working compiler for a considerable subset of a realistic programming language. Lectures augmented by an optional laboratory section covering details of the programming language to be used in the project (C), the operating system (Unix), the source language (a Modula variant) and various tools (Yacc, make, etc.). Use of computer required.

611 Advanced Algorithms
The design and analysis of efficient algorithms for important computational problems. Paradigms for algorithm design including Divide and Conquer, Greedy Algorithms, Dynamic Programming; and, the use of Randomness and Parallelism in algorithms. Algorithms for Sorting and Searching, Graph Algorithms, Approximation Algorithms for NP Complete Problems, and others.

617 Computational Geometry
An introduction to the main theoretical and algorithmic techniques from Computational Geometry. Topics covered include covex hulls, triangulations, Voronoi diagrams, visibility, art gallery problems, collision detection, motion planning and folding.

620 Advanced Software Engineering: Synthesis and Development
Same topics as 520 but at a greater depth.

621 Advanced Software Engineering: Analysis and Evaluation
The best testing and analysis practices for software products and processes across the lifecycle, with emphasis on promising new software engineering research directions including software architectures and the analysis of concurrent, distributed, and real-time systems.

630 Systems
An in-depth introduction to systems, focusing on principles of system design that cross-cut numerous systems artifacts, including operating systems, databases, runtime systems, and architecture. We will cover all levels of the "system stack", from chips to distributed systems.

631 Programming Languages
Programming languages are fundamental to computer science and everyday programming. This course is an in-depth introduction to the formal, logical foundations of programming languages.

635 Modern Computer Architecture
Examines elements of modern computer architectures from the perspectives of performance, economics, and design considerations together with their implications for software support at the compiler and operating system levels.

645 Database Design and Implementation
Covers topics such as object oriented, real-time, active, and temporal dbs; object management and file systems; concurrency control, recovery, transaction processing; distributed dbs; query processing; db programming languages; advanced db architectures.

646 Information Retrieval
Basic and advanced techniques for text-based information systems, including retrieval models, indexing and text representation, browsing and query formulation, routing, distributed information retrieval, and integration with database systems. Implementation of major elements of an information retrieval system.

650 Applied Information Theory
This course will introduce the basic concepts of Information Theory: entropy, relative entropy, mutual information, channel capacity, and rate distortion. Applications, rather than proofs, will be emphasized. In addition, the statistical problem of computing information theoretic quantities from data will be emphasized. Non-parametric and semi-parametric statistical models will also be covered.

653 Computer Networking
An introduction to fundamental concepts in the design and implementation of computer communication networks, their protocols, and applications. Topics include: layered network architectures, applications, network programming interfaces (e.g., sockets), transport, congestion, routing and data link protocols, local area networks, emerging high-speed networks, network management, and network security. Examples drawn primarily from the Internet (e.g., TCP, UDP, and IP) protocol suite. A rudimentary understanding of computer architecture and operating systems helpful.

655 Performance Evaluation
This course will provide an introduction to the tools and techniques needed to construct and analyze performance models of computer systems, distributed systems, and communication networks. The course covers three topics: i) analytical methods including discrete and continuous time Markov chain models, queues in isolation, queueing networks, and fluid queues; ii) computer/communication system measurement methodology including statistical inference and estimation of pertinent performance metrics, optimal measurement design, and bias removal; iii) applications to solving real world problems including model validation against measurements and/or simulation, case studies will be drawn from the areas of parallel and distributed systems, and networks.

670 Computer Vision
A study of what is involved in building artificial systems which try to infer such characteristics from an image. Topics include: Basics of image formation - the effect of geometry, viewpoint, lighting and albedo on image formation. Basic image operations such as filtering, convolution and correlation. Frequency representations of images. The importance of scale in images. Measurements of image properties such as color, texture, appearance and shape. Inference of motion and structure from moving objects and images. Detecting and recognizing objects in images. Statistical methods in computer vision.

677 Operating Systems
An in-depth examination of principles of distributed operating systems. Topics include processes and threads, concurrent programming, distributed interprocess communication, distributed process scheduling, shared virtual memory, distributed file systems.

683 Artificial Intelligence
In-depth introduction to Artificial Intelligence concentrating on aspects of intelligent agent construction. Topics include: situated agents, advanced search and problem-solving techniques, resource-bounded reasoning, reasoning under uncertainty, perception and action, advanced planning and control, and learning.

688 Graphical Models
This course will cover Bayesian and Markov networks and their dynamic and relational extensions; exact and approximate inference methods; estimation of both the parameters and structure of graphical models.

689 Machine Learning
Introduces and explores methods that permit programs to learn. Topics include: knowledge acquisition, learning from examples, generalization and specialization, discovery systems, theory formation, connectionist learning, genetic algorithms, macro learning, language learning, explanation-based learning, and computational learning theory.

690 Experimental Courses
New courses being taught on an experimental basis.

691 Seminar on Computer Science
Conferences, reports, and lectures on topics not currently covered in regular courses. Consent of instructor required. Credit, 1-6.

701 Advanced Topics in Computer Science
Advanced Topics in Computer Science Master’s Project: Advanced research project in Computer Science. Consent of instructor required. Credit, 6.

711 Parallel Algorithms and Architectures
An introduction to parallel algorithmics, emphasizing theoretical formulations and developments. The design of application-oriented algorithms in varied environments: idealized shared-memory algorithmic paradigms that ignore communication costs, distributed-memory emulations of shared memory, distributed-memory algorithmic paradigms. Concepts illustrated via important applications. The design of systems-oriented algorithms for: task scheduling, load balancing, message routing, and latency hiding. Prerequisite: CMPSCI 611 or equivalent.

745 Advanced Topics in Database Systems
Current topics in database systems. May include semantics-based concurrency control, new correctness criteria, transaction processing on parallel database platforms, real-time, active, temporal, and multimedia databases. Prerequisite: CMPSCI 445 or equivalent.

791 Seminar on Computer Science
Conferences, reports, and lectures on topics not currently covered in regular courses. Consent of instructor required. Credit, 1-6.

899 Doctoral Dissertation
Credit, 18.

Related Courses

Electrical and Computer Engineering

603 Probability and Random Processes

606 Electromagnetic Field Theory

608 Signal Theory

735 Stochastic Control Dynamic Systems

745 Advanced Communication Theory

Linguistics

610 Semantics and Generative Grammar

Mathematics

532 Ordinary Differential Equations

545 Linear Algebra for Applied Mathematics

611, 612 Algebra I & II

623, 624 Real Analysis I & II

651, 652 Numerical Analysis I, II

Statistics

511 Multivariate Statistical Models

525 Regression Analysis

526 Design of Experiments

607, 608 Mathematical Statistics I, II

708 Applied Stochastic Models and Methods