# Course Descriptions

Courses numbered 399 and below may be taken for undergraduate credit only. Courses numbered 400 through 699 may be taken by either undergraduate or graduate students. Courses numbered 700 or above are intended only for graduate students. Undergraduates are allowed to take courses numbered 700 or above, but only if permission is obtained from the dean’s office.

Courses offered less than once every two years are marked as “infrequently offered”; students should not count on taking these classes when planning their schedules.

Web pages for the current semester’s offerings of many Computer Sciences courses are available. Additional information about many cross-listed courses can be found via the home pages of the College of Engineering and the Department of Mathematics.

Course Number | Name | Credits | Description |
---|---|---|---|

CS 200 | Programming I | 3 |
Intended for students who have no prior programming experience. Students taking this course will be taught the process of incrementally developing small (200-500 lines) programs along with the fundamental Computer Science topics. These topics include: problem abstraction and decomposition, the edit-compile-run cycle, using variables of primitive and more complex data types, conditional and loop-based flow control, basic testing and debugging techniques, how to define and call functions (methods), and IO processing techniques. This course also teaches and reinforces good programming practices including the use of a consistent style, and meaningful documentation. Pre-Reqs: Satisfied Quantitative Reasoning (QR) A requirement. |

CS 202 | Introduction to Computation | 3 |
An introduction to the principles that form the foundation of computer science. Suitable for students with a general background who wish to study the key principles of computer science rather than just computer programming. |

CS 240 | Introduction to Discrete Mathematics | 3 |
Basic concepts of mathematics (definitions, proofs, sets, functions, and relations) with a focus on discrete structures: integers, bits, strings, trees, and graphs. Propositional logic, Boolean algebra, and predicate logic. Mathematical induction and recursion. Invariants and algorithmic correctness. Recurrences and asymptotic growth analysis. Fundamentals of counting. Prereq: Math 221. |

CS 250 | Digital Society: The Impact of Computers and Computer Technology | 3 |
Introduction to computers in the digital society; social changes they influence, and choices they present. Topics include: digital divide, role of computers in improving quality of life, electronic voting and governance, digital intellectual property rights, privacy, computers and the environment. |

CS 252 | Introduction to Computer Engineering | 2 |
Logic components built with transistors, rudimentary Boolean algebra, basic combinational logic design, basic synchronous sequential logic design, basic computer organization and design, introductory machine-and assembly-language programming. |

CS 270 | Fundamentals of Human-Computer Interaction | 3 |
User-centered software design including principles and methods for understanding user needs, designing and prototyping interface solutions, and evaluating their usability covered through lectures, hands-on in-class activities, and weeklong assignments. Meets with CS 570. |

CS 298 | Directed Study in Computer Science | 1-3 |
Undergraduate directed study in computer sciences. Prereq: Open to Fr. |

CS 300 | Programming II | 3 |
Introduces students to Object-Oriented Programming using classes and objects to solve more complex problems. The course also introduces array-based and linked data structures: including lists, stacks, and queues. Programming assignments require writing and developing multi-class (file) programs using interfaces, generics, and exception handling to solve challenging real world problems. Topics reviewed include reading/writing data and objects from/to files and exception handling, and command line arguments. Topics introduced: object-oriented design; class vs. object; create and define interfaces and iterators; searching and sorting; abstract data types (List,Stack,Queue,PriorityQueue(Heap),Binary Search Tree); generic interfaces (parametric polymorphism); how to design and write test methods and classes; array based vs. linked node implementations; introduction to complexity analysis; recursion. Pre-Reqs: Satisfied Quantitative Reasoning (QR) A requirement and COMP SCI 200, COMP SCI 301, COMP SCI 302, COMP SCI 310, or (COMP SCI/ECE 252 and ECE 203) |

CS 301 | Introduction to Data Programming | 3 |
Programming skills are in demand across a wide variety of fields. Students and professionals are reaping increasing benefits from the ability to automate tasks, deconstruct problems logically, and deal with increasingly large datasets. CS 301, Introduction to Data Programming, aims to teach these skills to students who may not otherwise want to major in computer sciences by offering a slower-paced and more applications-focused introduction to programming than our popular CS 302 course. Through a combination of classroom instruction and hands-on experience, students with no prior programming experience learn about program design, implementation and style. |

CS 302 | Introduction to Programming | 3 |
Instruction and experience in the use of an object-oriented programming language. Program design; development of good programming style; preparation for other Computer Science courses. Prereq: Problem solving skills such as those acquired in a statistics, logic, or advanced high school algebra course; or consent of instructor. Open to Fr. |

CS 304 | WES-CS Group Meeting | 0-1 |
Small group meetings for Wisconsin Emerging Scholars—Computer Science (WES-CS) students. Meet for two hours each week in small groups to work together on problems related to the CS 302 course material. Co-req: CS 302 and WES-CS membership. Open to Fr. Prereq: No prerequisites. Co-requisites include enrollment in CS 302 and membership in the WES-CS (WSCS) student group. |

CS 310 | Problem Solving using Computers | 3 |
Gives engineering students an introduction to computer and analytical skills to use in their subsequent course work and professional development. Discusses several methods of using computers to solve problems, including elementary Fortran and C programming techniques, the use of spreadsheets, symbolic manipulation languages, and software packages. Techniques will be illustrated using sample problems drawn from elementary engineering. Emphasis on introduction of algorithms with the use of specific tools to illustrate the methods. Prereq: Math 222. |

CS 352 | Digital Systems Fundamentals | 3 |
Logic components, Boolean algebra, combinational logic analysis and synthesis, synchronous and asynchronous sequential logic analysis and design, digital subsystems, computer organization and design. Prereq: CS 252 or equivalent. |

CS 354 | Machine Organization and Programming | 3 |
An introduction to current system structures of control, communication, memories, processors and I-O devices. Projects involve detailed study and use of a specific small computer hardware and software system. Prereq: CS 302 and ECE/CS 252 or consent of instructor. Open to Fr. |

CS 367 | Introduction to Data Structures | 3 |
Study of data structures (including stacks, queues, trees, graphs, and hash tables) and their applications. Development, implementation, and analysis of efficient data structures and algorithms (including sorting and searching). Experience in use of an object-oriented programming language. Prereq: CS 302 or consent of instructor. Students are strongly encouraged to take CS 367 within two semesters of having taken CS 302. |

CS 368 | Learning a New Programming Language | 1 |
For students interested in learning a particular programming language. Each 1-credit course focuses on a specific language offered at one of three levels: beginner, intermediate, and advanced. Prereq: students may not receive credit twice for the same language at the same level. |

CS 369 | Web Programming | 3 |
Covers web application development end-to-end: languages and frameworks for client- and server-side programming, database access, and other topics. Involves hands-on programming assignments. Students attain a thorough understanding of and experience with writing web applications using tools popular in industry. (Infrequently offered.) Prereq: CS 367 or (substantial programming experience and consent of instructor). |

CS 371 | Technology of Computer-Based Business Systems | 3 |
Overview of computers, their attendant technology, and the implications of this technology for large-scale, computer-based information systems. Topics include hardware, system software, program development, files, and data communications. Prereq: Bus 370 and CS 302, or equivalent experience with consent of instructor. |

CS 400 | Programming III | 3 |
The third course in our programming fundamentals sequence. It presumes that students understand and use functional and object-oriented design and abstract data types as needed. This course introduces balanced search trees, graphs, graph traversal algorithms, hash tables and sets, and complexity analysis and about classes of problems that require each data type. Students are required to design and implement using high quality professional code, a medium sized program, that demonstrates knowledge and use of latest language features, tools, and conventions. Additional topics introduced will include as needed for projects: inheritance and polymorphism; anonymous inner classes, lambda functions, performance analysis to discover and optimize critical code blocks. Students learn about industry standards for code development. Students will design and implement a medium size project with a more advanced user-interface design, such as a web or mobile application with a GUI and event-driven implementation; use of version-control software. Pre-Reqs: COMP SCI 300 |

CS 402 | Introducing Computer Science to K-12 Students | 2 |
Work in teams to lead Computer Science clubs and workshops for K-12 students at sites in the Madison area. Design and lead activities to help K-12 students learn computational thinking and computer programming. Prereq: Any course in Computer Sciences (e.g., CS 202, CS 302, CS 310). |

CS 407 | Foundations of Mobile Systems and Applications | 3 |
Design and implementation of applications, systems, and services for mobile platforms with (i) constraints, such as limited processing, memory, energy, interfaces, variable bandwidth, and high mobility, and (ii) features, such as touchscreens, cameras, electronic compasses, GPS, and accelerometers. Prereq: CS 367. |

CS 412 | Introduction to Numerical Methods | 3 |
Interpolation, solution of linear and nonlinear systems of equations, approximate integration and differentiation, numerical solution of ordinary differential equations. Prereq: Math 222 and either CS 240 or Math 234, and CS 302, or equivalent, and knowledge of matrix algebra. |

CS 416 | Foundations of Scientific Computing | 3 |
Basic techniques for scientific computing, including fundamentals of linear algebra and numerical linear algebra, rootfinding, floating-point arithmetic, interpolations and splines, linear and quadratic programming. (Infrequently offered.) Prereq: Math 222 and either CS 240 or Math 234, and CS 302, or equivalent. |

CS 425 | Introduction to Combinatorial Optimization | 3 |
Exact and heuristic methods for key combinatorial optimization problems such as: shortest path, maximum flow problems, and the traveling salesman problem. Techniques include problem-specific methods and general approaches such as branch-and-bound, genetic algorithms, simulated annealing, and neural networks. (Infrequently offered.) Prereq: Math 221 or CS 302 or consent of instructor. |

CS 435 | Introduction to Cryptography | 3 |
Cryptography is the art and science of transmitting digital information in a secure manner. This course will provide an introduction to its technical aspects. Prereq: Math 320 or 340 or consent of instructor. |

CS 471 | Introduction to Computational Statistics | 3 |
An introduction to computer-simulation-based statistical inference and estimation. Generating random numbers; Monte Carlo integration; Importance Sampling; Bootstrap; cross-validation; model selection; expectation maximization algorithm; jackknife; Markov Chains; Markov Chain Monte Carlo; Metropolis-Hastings algorithms; Gibbs sampler. Prereq: Stat/Math 309–310 or Stat 311–312 or consent of instructor. |

CS 475 | Introduction to Combinatorics | 3 |
Problems of enumeration, distribution and arrangement. Inclusion-exclusion principle. Generating functions and linear recurrence relations. Combinatorial identities. Graph coloring problems. Finite designs. Systems of distinct representatives and matching problems in graphs. Potential applications in the social, biological, and physical sciences. Puzzles. Emphasis on problem solving. Prereq: Math 320 or 340 and consent of instructor. |

CS 506 | Software Engineering | 3 |
Ideas and techniques for designing, developing, and modifying large software systems. Topics include software engineering processes; requirements and specifications; project team organization and management; software architectures; design patterns; testing and debugging; and cost and quality metrics and estimation. Students will work in large teams on a substantial programming project. Prereq: CS 367 and at least one of CS 407, CS 536, CS 537, CS 545, CS 552, CS 559, CS 564, CS 570, or CS 679. |

CS 513 | Numerical Linear Algebra | 3 |
Direct and iterative solution of linear and nonlinear systems and of eigenproblems. LU and symmetric LU factorization. Complexity, stability, and conditioning. Nonlinear systems. Iterative methods for linear systems. QR-factorization and least squares. Eigenproblems: local and global methods. Prereq: Math 340 or equivalent; CS 302 or equivalent. |

CS 514 | Numerical Analysis | 3 |
Polynomial forms, divided differences. Polynomial interpolation. Polynomial approximation: uniform approximation and Chebyshev polynomials, least-squares approximation and orthogonal polynomials. Splines, B-splines and spline approximation. Numerical differentiation and integration. Numerical methods for solving initial and boundary value problems for ordinary differential equations. Prereq: Math 340 or equivalent; CS 302 or equivalent. |

CS 515 | Introduction to Splines and Wavelets | 3 |
Introduction to Fourier series and Fourier transform; time-frequency localization; wavelets and frames; applications: denoising and compression of signals and images. Interpolation and approximation by splines: interpolation, least-squares approximation, smoothing, knot insertion and subdivision; splines in CAGD. (Infrequently offered.) Prereq: Math 340 or equivalent; CS 302 or equivalent. |

CS 520 | Introduction to Theory of Computing | 3 |
Basics about the notion, capabilities, and limitations of computation: elements of finite automata and regular languages, computability theory, and computational complexity theory. Additional topics include context-free grammars and languages, and complexity-theoretic cryptography. Prereq: CS 240, and CS 367, or consent of instructor. |

CS 524 | Introduction to Optimization | 3 |
Introduction to mathematical optimization from a modeling and solution perspective. Formulation of applications as discrete and continuous optimization problems and equilibrium models. Survey and appropriate usage of basic algorithms, data and software tools, including modeling languages and subroutine libraries. Prerequisites: CS 302 plus Math 320 or 340, or the equivalent. Crosslisted with Industrial & Systems Engineering 490. |

CS 525 | Linear Programming Methods | 3 |
Real linear algebra over polyhedral cones, theorems of the alternative for matrices. Formulation of linear programs. Duality theory and solvability. The simplex method and related methods for efficient computer solution. Perturbation and sensitivity analysis. Applications and extensions, such as game theory, linear economic models and quadratic programming. Prereq: Math 443 or 320 or 340 or consent of instructor. |

CS 526 | Advanced Linear Programming | 4 (Undergrad) / 3 (Grad) |
Review of linear programming. Polynomial time methods for linear programming. Quadratic programs and linear complementarity problems and related solution techniques. Solution sets and their continuity properties. Error bounds for linear inequalities and programs. Parallel algorithms for linear and quadratic programs. (Infrequently offered.) Prereq: CS 525 or equivalent, CS 302 or equivalent, or consent of instructor. |

CS 532 | Theory and Applications of Pattern Recognition | 3 |
Pattern recognition systems and components; decision theories and classification; discriminant functions; supervised and unsupervised training; clustering; feature extraction and dimensional reduction; sequential and hierarchical classification; applications of training, feature extraction, and decision rules to engineering problems. Prereq: ECE 331 or Math 431 or consent of instructor. |

CS 533 | Image Processing | 3 |
Mathematical representation of continuous and digital images; models of image degradation; picture enhancement, restoration, segmentation, and coding; pattern recognition, tomography. Prereq: ECE 330 or consent of instructor; Math 320 or 340 or equiv. recommended. |

CS 534 | Computational Photography | 3 |
Study of sensing and computational techniques that enhance or extend the capabilities of digital photography by using methods from computer vision and computer graphics to create new visual representations. Algorithms for analyzing, improving, manipulating, combining, and synthesizing images. Prereq: CS 367. |

CS 536 | Introduction to Programming Languages and Compilers | 3 |
Introduction to the theory and practice of compiler design. Comparison of features of several programming languages and their implications for implementation techniques. Several programming projects required. Prereq: CS 367 and either CS 354 or 552. |

CS 537 | Introduction to Operating Systems | 4 |
Input-output hardware, interrupt handling, properties of magnetic tapes, discs and drums, associative memories and virtual address translation techniques. Batch processing, time sharing and real-time systems, scheduling resource allocation, modular software systems, performance measurement and system evaluation. Prereq: CS 354 and CS 367. |

CS 538 | Introduction to the Theory and Design of Programming Languages | 3 |
Design and theory of programming languages: procedural, object-oriented, functional and logic paradigms. Serial and concurrent programming. Execution models and formal specification techniques. (Infrequently offered.) Prereq: CS 354 and CS 367. |

CS 539 | Introduction to Artificial Neural Networks and Fuzzy Systems | 3 |
Theory and applications of artificial neural networks and fuzzy logic: multi-layer perceptrons, self-organizing maps, radial basis networks, Hopfield networks, recurrent networks, fuzzy-set theory, fuzzy logic control, adaptive fuzzy neural networks, genetic algorithms, and evolutionary computing. Applications to control, pattern recognition, nonlinear system modeling, speech and image processing. Prereq: CS 302, or CS 310, or knowledge of C. |

CS 540 | Introduction to Artificial Intelligence | 3 |
Principles of knowledge-based search techniques; automatic deduction, knowledge representation using predicate logic, machine learning, probabilistic reasoning. Applications in tasks such as problem solving, data mining, game playing, natural language understanding, computer vision, speech recognition, and robotics. Prereq: CS 367. |

CS 545 | Natural Language and the Computer | 3 |
The course covers basic techniques and tools in natural language processing: generative grammars, parsing, dictionary construction, semantic networks, generation of text from a knowledge base, natural language interfaces, and machine translation. Prereq: CS 536 or CS 537 or 564 or consent of instructor. |

CS 547 | Computer Systems Modeling Fundamentals | 3 |
An introduction to basic tools and applications for modeling and analysis of computer systems. Fundamentals of network flow graphs, graph models of computation and stochastic models of computer system performance. Network delay analysis and capacity planning, reachability analysis for deadlock detection in distributed systems, Markov chains, elementary queueing theory, basic concepts of queueing network models and associated analyses. Prereq: Math 234, CS 367 and CS 354. |

CS 552 | Introduction to Computer Architecture | 3 |
The design of computer systems and components. Processor design, instruction set design, and addressing; control structures and microprogramming; memory management, caches, and memory hierarchies; interrupts and I/O structures. Prereq: ECE/CS 352 and CS/ECE 354; co-req: CS 367. |

CS 558 | Introduction to Computational Geometry | 3 |
Introduction to fundamental geometric computations and algorithms, and their use for solving engineering and scientific problems. Computer representations of simple geometric objects and paradigms for algorithm design. Applications from areas of engineering analysis, design and manufacturing, biology, statistics, and other sciences. Prereq: CS 367 or equivalent, Math 234 or equivalent, or consent of instructor. |

CS 559 | Computer Graphics | 3 |
Survey of computer graphics. Image representation, formation, presentation, composition and manipulation. Modeling, transformation, and display of geometric objects in 2 and 3 dimensions. Representation of curves and surfaces. Rendering, animation, multi-media and visualization. Prereq: Math 320 or 340 (linear algebra), and CS 367. |

CS 564 | Database Management Systems | 4 |
What a database management system is; different data models currently used to structure the logical view of the database: relational, hierarchical, and network. Hands-on experience with relational and network-based database systems. Implementation techniques for database systems. File organization, query processing, concurrency control, rollback and recovery, integrity and consistency, and view implementation. Prereq: CS 367 and 354. |

CS 567 | Medical Image Analysis | 3 |
Present introductory medical image processing and analysis techniques. Topics include medical imaging formats, segmentation, registration, image quantification, classification. Prerequisites: CS 367 (or programming experience with some high-level programming language), Math 221, and some familiarity with introductory concepts in probability and linear algebra, or by consent of the instructor. |

CS 570 | Introduction to Human-Computer Interaction | 4 |
User-centered software design; (1) principles of and methods for understanding user needs, designing and prototyping interface solutions, and evaluating their usability, (2) their applications in designing web-based, mobile, and embodied interfaces through monthlong group projects. Meets with CS 270. Prereq: CS 202 or CS 302. |

CS 576 | Introduction to Bioinformatics | 3 |
Algorithms for computational problems in molecular biology. The course will study algorithms for problems such as: genome sequencing and mapping, pairwise and multiple sequence alignment, modeling sequence classes and features, phylogenetic tree construction, and gene-expression data analysis. Prereq: CS 367 and Math 222. |

CS 577 | Introduction to Algorithms | 3 |
Basic paradigms for the design and analysis of efficient algorithms: greed, divide-and-conquer, dynamic programming, reductions, and the use of randomness. Computational intractability including typical NP-complete problems and ways to deal with them. Prereq: CS 240 and CS 367, or consent of instructor. |

CS 578 | Contest-Level Programming | 1 |
Training in computer programming for competitions: assessing the coding difficulty and complexity of computational problems, recognizing the applicability of known algorithms, fast coding and testing, team work. Prereq: CS 367 is required. CS 577 is suggested but not required. |

CS 579 | Virtual Reality | 3 |
This course introduces students to the field of virtual reality and focuses on creating immersive, interactive virtual experiences. Survey topics include historical perspectives on virtual reality technology, computer graphics and 3D modeling, human perception and psychology, human computer interaction and user interface design. This course is designed for students with backgrounds in Computer Science, Engineering, Art, Architecture and Design. Students will work in interdisciplinary teams on projects, culminating in a final event that will be showcased to the public. While not an official prerequisite, the class will be technologically motivated; therefore students should be comfortable learning new software. The class will utilize publicly available game design software which provides tools and services for the creation of interactive content. While not necessary, students may find it helpful to have taken classes in programming and computer graphics (such COMP SCI 559: Computer Graphics) or in 3D modeling (such as ART 429: 3D Digital Studio I or DS 242: Visual Communication II). |

CS 611 | User Experience Design I | 3 | |

CS 635 | Tools and Environments for Optimization | 3 |
Formulation and modeling of applications from computer sciences, operations research, business, science and engineering involving optimization and equilibrium models. Survey and appropriate usage of software tools for solving such problems, including modeling language use, automatic differentiation, subroutine libraries and web-based optimization tools and environments. Prereq: CS 302, Math 340 or equivalent. |

CS 638 | Undergraduate Topics in Computing | 1-3 |
Prereq: Consent of instructor. |

CS 640 | Introduction to Computer Networks | 3 |
Architecture of computer networks and network protocols, protocol layering, reliable transmission, congestion control, flow control, naming and addressing, unicast and multicast routing, network security, network performance, widely used protocols such as Ethernet, wireless LANs, IP, and HTTP. Prereq: CS 537. |

CS 642 | Introduction to Information Security | 3 |
This is a senior level undergraduate course covering various topics on information security. The course will cover a wide range of topics, such as, cryptographic primitives, security protocols, system security, and emerging topics. Prereq: CS 537 or consent of instructor. Elementary knowledge of mathematical logic and discrete probability theory is also required. |

CS 679 | Computer Game Technology | 3 |
Survey of software technology important to computer games and other forms of interactive technology: Real-time image generation, managing complex geometric models, creating virtual characters, simulating physical phenomenon, networking technology for distributed virtual environments. Prereq: CS 559. |

CS 681 | Senior Honors Thesis (681) | 3 |
Prereq: Honors candidacy and consent of instructor. |

CS 682 | Senior Honors Thesis (682) | 3 |
Prereq: Honors candidacy and consent of instructor. |

CS 691 | Senior Thesis (691) | 2-3 |
(A year’s course must be taken to get credit.) Prereq: Consent of instructor. |

CS 692 | Senior Thesis (692) | 2-3 |
(A year’s course must be taken to get credit.) Prereq: Consent of instructor. |

CS 699 | Directed Study | 1-6 |
Prereq: Junior or senior standing and consent of instructor. |

CS 701 | Construction of Compilers | 3 |
Design and implementation of compilers for modern programming languages. Emphasis on tools for compiler construction. Prereq: CS 536. |

CS 703 | Advanced Topics in Programming Languages and Compilers | 3 |
Advanced topics in compiling and programming languages design. Advanced parsing techniques; automatic syntactic error correction; local and global code optimization; attribute grammars; programming language design issues (data and control abstractions, specification and verification of high level languages). (Infrequently offered.) Prereq: CS 701. |

CS 704 | Principles of Programming Languages | 3 |
Introduction to principles of advanced programming languages and programming-language theory. Topics include: lambda-calculus, functional languages, polymorphic functions, type inference, structural induction, lazy evaluation, operational semantics, denotational semantics, and axiomatic semantics. Prereq: CS 536 or consent of instructor. |

CS 706 | Analysis of Software Artifacts | 3 |
Advanced course covering various analysis techniques used in software engineering. This course will cover techniques for analyzing various software artifacts. Some of the topics that will be covered are: model checking, testing, program analysis, requirements analysis, and safety analysis. Prereq: CS 536 or consent of instructor. A basic knowledge of mathematical logic is also required. |

CS 707 | Mobile and Wireless Networking | 3 |
Design and implementation of protocols, systems, and applications for mobile and wireless networking, particularly at the media access control, network, transport, and application layers. Focus is on the unique problems and challenges presented by the properties of wireless transmission, various device constraints such as limited battery power, and node mobility. Prereq: CS 640 or CS 537 or equivalent, or permission of the instructor. |

CS 710 | Computational Complexity | 3 |
Study of the capabilities and limitations of efficient computation. Relationships between models representing capabilities such as parallelism, randomness, quantum effects, and non-uniformity; and models based on the notions of nondeterminism, alternation, and counting, which capture the complexity of important problems. Prereq: CS 520. |

CS 714 | Methods of Computational Mathematics I | 3 |
Development of finite difference methods for hyperbolic, parabolic, and elliptic partial differential equations. Analysis of accuracy and stability of difference schemes. Direct and iterative methods for solving linear systems. Introduction to finite volume methods. Applications from science and engineering. Prereq: CS 302, CS 412, Math 322, 340, 521 or equivalent, or consent of instructor. |

CS 715 | Methods of Computational Mathematics II | 3 |
Introduction to spectral methods (Fourier; Chebyshev; Fast Fourier Transform), finite element methods (Galerkin methods; energy estimates and error analysis), and mesh-free methods (Monte Carlo; smoothed-particle hydrodynamics) for solving partial differential equations. Applications from science and engineering. Prereq: CS 302, CS 412, Math 322, 340, 521 or equivalent, or consent of instructor. |

CS 717 | Numerical Functional Analysis | 3 |
Fundamentals of normed spaces and linear operators; analysis of nonlinear operators; existence of, and iterative methods for, solutions of linear and nonlinear operator equations, error estimation; variational theory and minimization problems; monotonicity theory. Development of abstract tools and application of them to the general analysis of numerical methods for such problems as differential and integral equations. (Infrequently offered.) Prereq: CS 513, CS 514 and Math 234 or consent of instructor. |

CS 719 | Stochastic Programming | 3 |
Stochastic programming is concerned with decision making in the presence of uncertainty, where the eventual outcome depends on a future random event. Topics include modeling uncertainty in optimization problems, risk measures, stochastic programming algorithms, approximation and sampling methods, and applications. Prereq: CS 525 or consent of instructor. |

CS 720 | Integer Programming | 3 |
Formulation of integer programming problems and the characterization of optimization problems representable as integer and mixed-integer programs. The degree of difficulty of classes of integer programs and its relation to the structure of their feasible sets. Optimality conditions. Branch-and-bound, cutting plane, and decomposition methods for obtaining solutions or approximating solutions. Prereq: CS 525 or consent of instructor. Note: This course is no longer offered regularly; those interested in the topic should take CS 728, Integer Optimization, instead. |

CS 723 | Dynamic Programming and Associated Topics | 3 |
A generalized optimization model; discrete and continuous state spaces; deterministic and stochastic transition functions. Multistage decision processes. Functional equations and successive approximation in function and policy spaces. Relationship to linear programming and acyclic networks. Markovian decision processes. Solution methods and computational problems. Associated topics and applications such as calculus of variations; feedback control processes; and optimal trajectories, inventory and maintenance policies, and stopping rules. Prereq: CS 525 or ISyE 623; Math 521 or CS 726; Math 431 and computer programming, or consent of instructor. |

CS 726 | Nonlinear Optimization I | 3 |
Theory and algorithms for nonlinear optimization, focusing on unconstrained optimization. Line-search and trust-region methods; quasi-Newton methods; conjugate-gradient and limited-memory methods for large-scale problems; derivative-free optimization; algorithms for least-squares problems and nonlinear equations; gradient projection algorithms for bound-constrained problems; and simple penalty methods for nonlinearly constrained optimization. Prereq: Familiarity with basic mathematical analysis (e.g., Math 521) and either Math. 443 or 320, or consent of instructor. |

CS 727 | Convex Analysis | 3 |
Conjugate convex functions and Fenchel-Rockafellar duality. Monotone operators and subdifferentials. Advanced methods for nonconvex problems, such as variational principles, generalized gradients, degree and index arguments, and multivalued ordinary differential equations. Applications to economics and operations research. (Infrequently offered.) Prereq: CS 726 or consent of instructor. |

CS 728 | Integer Optimization | 3 |
Introduces optimization problems over integers, and surveys the theory behind the algorithms used in state-of-the-art methods for solving such problems. Special attention is given to the polyhedral formulations of these problems, and to their algebraic and geometric properties. Applicability of Integer Optimization is highlighted with applications in combinatorial optimization. Key topics include: formulations, relaxations, polyhedral theory, cutting planes, decomposition, enumeration. |

CS 730 | Nonlinear Optimization II | 3 |
Theory and algorithms for nonlinearly constrained optimization. Relevant geometric concepts, including tangent and normal cones, theorems of the alternative, and separation results. Constraint qualifications. Geometric and algebraic expression of first-order optimality conditions. Second-order optimality conditions. Duality. Nonlinear programming algorithms: Merit functions and filters; interior-point, augmented Lagrangian, and sequential quadratic programming algorithms. Prereq: CS 726 or equivalent or consent of instructor. |

CS 731 | Advanced Artificial Intelligence | 3 |
Learning and hypothesis formation; knowledge acquisition; deductive and inductive inference systems; reasoning techniques involving time, nonmonotonic reasoning, spatial reasoning, truth maintenance systems; planning strategies. Prereq: CS 540. |

CS 733 | Computational Methods for Large Sparse Systems | 3 |
Sparse matrices in engineering and science. Sparsity preservation. Numerical error control. Transversal algorithms, Tarjan’s algorithm, Tinney’s algorithms, minimum degree, banding, nested dissection, frontal methods. Linear and nonlinear equation solving. Compensation. Sparse vector methods. Iterative methods. ODE and PDE applications. (Infrequently offered.) Prereq: CS 367 and (ECE 334 or (CS 412 and Math 340)); or consent of instructor. |

CS 736 | Advanced Operating Systems | 3 |
Advanced topics in operating systems, including process communication, resource allocation, multiprocess and network operating systems, kernel philosophies, fault-tolerant systems, virtual machines, high-level language systems, verifiability and proof techniques. Prereq: CS 537 or consent of instructor. |

CS 737 | Computer System Performance Evaluation and Modeling | 3 |
Statistical techniques of computer system performance evaluation and measurement. System selection and tuning strategies. Deterministic and probabilistic models of process scheduling and resource allocation. Analytic and simulation models of computer systems. Systematic study of system architectures. Prereq: Math 222, CS 537 or CS 736, or consent of instructor. |

CS 739 | Distributed Systems | 3 |
Basic concepts, distributed programming; distributed file systems; atomic actions; fault tolerance, transactions, program & data replication, recovery; distributed machine architectures; security and authentication; load balancing and process migration; distributed debugging; distributed performance measurement; distributed simulation techniques; distributed applications; correctness considerations and proof systems. (Infrequently offered.) Prereq: CS 736 or consent of instructor. |

CS 740 | Advanced Computer Networks | 3 |
Advanced topics in computer communications networks: Congestion and flow control; Routing; Rate-based protocols; High-speed interfaces and technologies; Metropolitan area networks; Fast packet switching technologies; Advanced applications; Network services: name service, authentication, resource location. Prereq: CS 640. |

CS 744 | Big Data Systems | 3 |
Issues in the design and implementation of big data processing systems, including: an overview of cluster architecture, key design goals (flexibility, performance and fault tolerance), popular execution frameworks, basic abstractions, and applications (e.g., batch analytics, stream processing, graph processing, and machine learning). Prereq: Graduate or professional standing. |

CS 747 | Advanced Computer Systems Analysis Techniques | 3 |
Advanced analytical modeling techniques for performance analysis of computer systems, including discrete-parameter (embedded) Markov Chains, M/G/1 queues, stochastic Petri nets, queueing networks, renewal theory, and sample path analysis. Application areas include high performance computer architectures, databases, and operating system resource allocation policies. Prereq: CS 547 or consent of instructor. |

CS 750 | Real-Time Computing Systems | 3 |
Introduction to the unique issues in the design and analysis of computer systems for real-time applications. Hardware and software support for guaranteeing timeliness with and without failures. Resource management, time-constrained communication, scheduling and imprecise computations, real-time kernels and case studies. Prereq: CS 552 and 537 or consent of instructor. |

CS 752 | Advanced Computer Architecture I | 3 |
Advanced techniques of computer design. Parallel processing and pipelining; multiprocessors, multi-computers and networks; high performance machines and special purpose processors; data flow architecture. Prereq: ECE/CS 552 and CS 537. |

CS 753 | Fault-Tolerant Computing | 3 | |

CS 755 | VLSI Systems Design | 3 |
Overview of MOS devices and circuits; introduction to integrated circuit fabrication; topological design of data flow and control; interactive graphics layout; circuit simulation; system timing; organizational and architectural considerations; alternative implementation approaches; design project. Prereq: ECE 340, ECE/CS 352, and CS/ECE 552 or consent of instructor. |

CS 756 | Computer-Aided Design for VLSI | 3 |
Broad introduction to computer-aided design tools for VLSI, emphasizing implementation algorithms and data structures. Topics covered: design styles, layout editors, symbolic compaction, module generators, placement and routing, automatic synthesis, design-rule checking, circuit extraction, simulation and verification. Prereq: CS 367, good programming skills, CS 352; CS 755 strongly recommended. |

CS 757 | Advanced Computer Architecture II | 3 |
Parallel algorithms, principles of parallelism detection and vectorizing compilers, interconnection networks, SIMD/MIMD machines, processor synchronization, data coherence, multis, dataflow machines, special purpose processors. Prereq: CS 752 or consent of instructor. |

CS 758 | Advanced Topics in Computer Architecture | 3 |
Advanced topics in computer architecture that explore the implications to architecture of forthcoming evolutionary and revolutionary changes in application demands, software paradigms, and hardware implementation technologies. Prereq: CS 752 and CS/ECE 757 required. Alternatively, consent of instructor. |

CS 759 | High Performance Computing for Applications in Engineering | 3 |
An overview of hardware and software solutions that enable the use of advanced computing in tackling computationally intensive engineering problems. Hands-on learning promoted through programming assignments that leverage emerging hardware architectures and use parallel computing programming languages. Prereq: COMP SCI 302 or COMP SCI 368 |

CS 760 | Machine Learning | 3 |
Computational approaches to learning: including inductive inference, explanation-based learning, analogical learning, connectionism, and formal models. What it means to learn. Algorithms for learning. Comparison and evaluation of learning algorithms. Cognitive modeling and relevant psychological results. Prereq: CS 540. |

CS 761 | Advanced Machine Learning | 3 |
Advanced computational approaches to learning. Quantification of learnability and rate of learning, probabilistic and other formalisms of learning, statistical and computational analysis of learning models, state-of-the-art learning algorithms. Prereq: CS 760 or consent of instructor. |

CS 764 | Topics in Database Management Systems | 3 |
Implementation of database management systems, the impact of new technology on database management systems, back-end database computers, distributed database management systems, concurrency control and query execution in both distributed and centralized systems, implementation of multiple user views, roll-back and recovery mechanisms, database translation. Prereq: CS 564, CS 537, and CS 536 or consent of instructor. |

CS 765 | Data Visualization | 3 |
Principles of the visual presentation of data. Survey of Information Visualization, Scientific Visualization, and Visual Analytics. Design and evaluation of visualizations and interactive exploration tools. Introduction to relevant foundations in visual design, human perception, and data analysis. Encodings, layout and interaction. Approaches to large data sets. Visualization of complex data types such as scalar fields, graphs, sets, texts, and multi-variate data. Use of 2D, 3D and motion in data presentations. Implementation issues. Prereq: Graduate or professional standing. |

CS 766 | Computer Vision | 3 |
Fundamentals of image analysis and computer vision; image acquisition and geometry; image enhancement; recovery of physical scene characteristics; shape-from techniques; segmentation and perceptual organization; representation and description of two-dimensional and three-dimensional objects; shape analysis; texture analysis; goal-directed and model-based systems; parallel algorithms and special-purpose architectures. Prereq: CS 540. |

CS 767 | Computational Methods for Medical Image Analysis | 3 |
Study of computational techniques that facilitate automated analysis, manipulation, denoising, and improvement of large-scale and high resolution medical images. Design and implementation of methods from Computer Vision and Machine Learning to efficiently process such image data to answer biologically and clinically meaningful scientific questions. Prereq: CS 367 or consent of instructor. |

CS 769 | Advanced Natural Language Processing | 3 |
Develop algorithms and mathematical models for natural language processing tasks, including text categorization, information retrieval, speech recognition, machine translation, and information extraction. Focus is on the state-of-the-art computational techniques as they are applied to natural language tasks. Prereq: CS 540 or the equivalent. |

CS 770 | Human-Computer Interaction | 3 |
Principles of human-computer interaction (HCI); human subjects research methods and procedures, qualitative and quantitative data analysis; and semester-long research project situated in critical domains of HCI including web-based, desktop, mobile, speech-based, and embodied interaction with computers. |

CS 776 | Advanced Bioinformatics | 3 |
Advanced course covering computational problems in molecular biology. The course will study algorithms for problems such as: modeling sequence classes and features, phylogenetic tree construction, gene-expression data protein and RNA structure prediction, and whole-genome analysis and comparisons. Prereq: CS 576. |

CS 777 | Computer Animation | 3 |
Survey of technical issues in the creation of moving and dynamic computer imagery. Principles of animation. Manual motion specification and keyframing. Procedural and simulation-based motion synthesis. Motion capture processing, editing and use. Animation systems. Modeling, rendering and video issues relating to animation. Image-based animation methods and warping. Applications of animation such as games and virtual environments. Basic introduction to artistic issues in animation, such as cinematography. Special Effects for Film and Video. Prereq: CS 559. |

CS 779 | Rendering Images with Computers | 3 |
Survey of models and algorithms used in the computer generation of images. The physics of global illumination, the global illumination equation, approximations and techniques for solving them. Large database rendering. Image-based methods. Stylized rendering. Point-based (splatting) algorithms. Prereq: CS 559. |

CS 780 | Robot Motion Planning | 3 |
A unified view on geometric, algorithmic, and computational issues of automatic motion planning of motion for mobile robots and arm manipulators in a complex environment. Planning with complete information - configuration space, connectivity graphs, computational complexity; with partial information - algorithm convergence, topological issues. Effect of system kinematics. Relation between sensing media and algorithm efficiency. (Infrequently offered.) Prereq: Math 340 or equivalent and consent of instructor. |

CS 784 | Foundations of Data Management | 3 |
Foundational concepts in databases and data management. The first part of the course discusses topics on query languages (conjunctive queries, Datalog), their expressivity and complexity of evaluation. The second part studies advanced topics in modern data management, including data streams, massive parallelism, provenance, uncertain data management and privacy. |

CS 787 | Advanced Algorithms and Data Structures | 3 |
Advanced paradigms for the design and analysis of efficient algorithms, including the use of randomness, linear programming, and semi-definite programming. Applications to data structures, approximating NP-hard optimization problems, learning, on-line and distributed problems. Prereq: CS 577. |

CS 790 | Master’s Thesis | 1-9 |
For students writing a Master’s thesis or project. Prereq: Master’s candidate. |

CS 799 | Master’s Research | 1-9 |
For pre-Master’s students doing research projects. Prereq: Master’s candidate. |

CS 809 | Mathematical Techniques for Analysis of Algorithms | 3 |
Techniques for quantitative analysis of algorithms. Charging arguments, amortization, probabilistic methods. Adversary and information lower bounds. Use of methods from combinatorics, complex analysis, and asymptotics in obtaining precise analyses of quicksort, chained hashing, and other algorithms. Prereq: CS 577, Math 321 or equivalent, and Math 431 or equivalent. |

CS 812 | Arithmetic Algorithms | 3 |
Survey of algorithms and design paradigms for exact arithmetic, as used in public-key cryptography, computer algebra, and pseudo-random number generation. Topics include primality testing, factorization of integers and polynomials, discrete logarithms, and (optionally) elliptic curves and integer lattices. Prereq: Math 541 and CS 367, or consent of instructor. |

CS 830 | Randomness in Computation | 3 |
Survey of uses of randomness in computer science, including algorithms, complexity, and cryptography. Techniques for randomness extraction, pseudo-random generator constructions, and derandomization. (Infrequently offered.) Prereq: CS 520 or CS 577. |

CS 837 | Topics in Numerical Analysis | 3 |
Topic selected from advanced areas. A variable content course which may be repeated any number of times for credit. (Infrequently offered.) Prereq: Consent of instructor. |

CS 838 | Topics in Computing | 3 |
Topics selected from advanced areas. A variable content course which may be repeated any number of times for credit. (Infrequently offered.) Prereq: Consent of instructor. |

CS 841 | Computational Cognitive Science | 3 |
An interdisciplinary class contrasting machine learning with learning in biological systems, particularly children. Plausible models of learning. Childhood acquisition of knowledge. Occam’s Razor, the Bayesian Occam’s Razor, and PAC Learning. Frequentist vs. Bayesian Inference. Kolmogorov Complexity. Hypothesis formation and evaluation. Learning from the real-world without labels. Innate vs. Acquired Knowledge. Acquisition of Language. Human rationality and Prospect Theory. Prereq: CS 540 or consent of instructor. |

CS 880 | Topics in Theoretical Computer Science | 3 |
Advanced topics in algorithms, complexity, and cryptography. The exact topic varies. Prereq: consent of instructor |

CS 887 | Approximation Theory | 3 |
Interpolation and approximation by means of interpolation; uniform approximation; best approximation; approximation in normed linear spaces; spline functions; orthogonal polynomials; degree of approximation; computational procedures. Prereq: Consent of instructor. |

CS 899 | Pre-Dissertator Research | 1-9 |
Prereq: Post-Master’s, pre-dissertator status. |

CS 900 | Advanced Seminar in Computer Science | 0-1 |
Seminar on recent research on various aspects of computer science. Prerequisite: consent of instructor. |

CS 915 | Computation and Informatics in Biology and Medicine | 1 |
This seminar course brings together trainees, trainers, and other interested faculty and students for cross-disciplinary exposure to current research in computer science, biostatistics, engineering, biological sciences, and biomedical research problems related to bioinformatics and computational biology. Prereq: Consent of instructor. |

CS 990 | Dissertation | 1-6 | |

CS 999 | Dissertator Research | 1-6 |
Prereq: Dissertator status. |