CMSC - Computer Science

CMSC401 Algorithms for Geospatial Computing (3 Credits)

An introduction to fundamental geospatial objects and geometric algorithms for spatio-temporal data processing and analysis. Point data representation and analysis: spatial data models and data structures, algorithms for spatial queries, point clustering algorithms. Surface and scalar field modeling, such as terrains: raster and triangle-based models (TINs), algorithms for building and querying TINs. Algorithms for natural and urban terrain analysis: morphology computation and visibility analysis. Applications to processing and analysis of LiDAR (Light Detection And Ranging) data in the context of terrain reconstruction, urban modeling, forest management and bathymetry reconstruction for coastal data management. Road network computation and analysis: algorithms for route computation in road networks, and for road network reconstruction from GPS and satellite data.

Prerequisite: GEOG276; or a minimum grade of C- in CMSC330 and CMSC351; or permission of instructor. Cross-listed with: GEOG470. Jointly offered with: GEOG770.

Credit Only Granted for: CMSC498Q, CMSC401, CMSC788I, GEOG470, GEOG498I, GEOG770, or GEOG788I.

Formerly: GEOG498I.

CMSC411 Computer Systems Architecture (3 Credits)

Input/output processors and techniques. Intra-system communication, buses, caches. Addressing and memory hierarchies. Microprogramming, parallelism, and pipelining.

Prerequisite: Minimum grade of C- in CMSC330; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: ENEE446 or CMSC411.

CMSC412 Operating Systems (4 Credits)

A hands-on introduction to operating systems, including topics in: multiprogramming, communication and synchronization, memory management, IO subsystems, and resource scheduling polices. The laboratory component consists of constructing a small kernel, including functions for device IO, multi-tasking, and memory management.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and 1 course with a minimum grade of C- from (CMSC414, CMSC417, CMSC420, CMSC430, CMSC433, CMSC435, ENEE440, ENEE457).

Restriction: Permission of CMNS-Computer Science department; or must be in one of the following programs (Computer Science (Master's); Computer Science (Doctoral)).

Credit Only Granted for: CMSC412 or ENEE447.

CMSC414 Computer and Network Security (3 Credits)

An introduction to the topic of security in the context of computer systems and networks. Identify, analyze, and solve network-related security problems in computer systems. Fundamentals of number theory, authentication, and encryption technologies, as well as the practical problems that have to be solved in order to make those technologies workable in a networked environment, particularly in the wide-area Internet environment.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: CMSC414, ENEE459C, or ENEE457.

CMSC416 Introduction to Parallel Computing (3 Credits)

Introduction to parallel computing. Topics include programming for shared memory and distributed memory parallel architectures, and fundamental issues in design, development, and performance analysis of parallel programs.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; or permission of instructor.

Restriction: Permission of CMNS-Computer Science department.

Credit Only Granted for: CMSC416 or CMSC498X.

Formerly: CMSC498X.

CMSC417 Computer Networks (3 Credits)

Computer networks and architectures. The OSI model including discussion and examples of various network layers. A general introduction to existing network protocols. Communication protocol specification, analysis, and testing.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC420 Advanced Data Structures (3 Credits)

Description, properties, and storage allocation functions of data structures including balanced binary trees, B-Trees, hash tables, skiplists, tries, KD-Trees and Quadtrees. Algorithms for manipulating structures. Applications from areas such as String Processing, Computer Graphics, Information Retrieval, Computer Networks, Computer Vision, and Operating Systems.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC421 Introduction to Artificial Intelligence (3 Credits)

Introduces a range of ideas and methods in AI, varying semester to semester but chosen largely from: automated heuristic search, planning, games, knowledge representation, logical and statistical inference, learning, natural language processing, vision, robotics, cognitive modeling, and intelligent agents. Programming projects will help students obtain a hands-on feel for various topics.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC422 Introduction to Machine Learning (3 Credits)

Machine Learning studies representations and algorithms that allow machines to improve their performance on a task from experience. This is a broad overview of existing methods for machine learning and an introduction to adaptive systems in general. Emphasis is given to practical aspects of machine learning and data mining.

Prerequisite: Minimum grade of C- in CMSC320, CMSC330, and CMSC351; and 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and permission of CMNS-Computer Science department.

CMSC423 Bioinformatic Algorithms, Databases, and Tools (3 Credits)

An introduction to the main algorithms, databases, and tools used in bioinformatics. Topics may include assembly and analysis of genome sequences, reconstructing evolutionary histories, predicting protein structure, and clustering of biological data. Use of scripting languages to perform analysis tasks on biological data. No prior knowledge of biology is assumed.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC424 Database Design (3 Credits)

Students are introduced to database systems and motivates the database approach as a mechanism for modeling the real world. An in-depth coverage of the relational model, logical database design, query languages, and other database concepts including query optimization, concurrency control; transaction management, and log based crash recovery. Distributed and Web database architectures are also discussed.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC425 Game Programming (3 Credits)

An introduction to the principles and practice of computer game programming and design. This includes an introduction to game hardware and systems, the principles of game design, object and terrain modeling, game physics, artificial intelligence for games, networking for games, rendering and animation, and aural rendering. Course topics are reinforced through the design and implementation of a working computer game.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351.

Restriction: Permission of CMNS-Computer Science department.

CMSC426 Computer Vision (3 Credits)

An introduction to basic concepts and techniques in computervision. This includes low-level operations such as image filtering and edge detection, 3D reconstruction of scenes using stereo and structure from motion, and object detection, recognition and classification.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351 and 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program; or permission of the instructor.

Restriction: Permission of CMNS-Computer Science department.

CMSC427 Computer Graphics (3 Credits)

An introduction to 3D computer graphics, focusing on the underlying building blocks and algorithms for applications such as 3D computer games, and augmented and virtual reality (AR/VR). Covers the basics of 3D image generation and 3D modeling, with an emphasis on interactive applications. Discusses the representation of 3D geometry, 3D transformations, projections, rasterization, basics of color spaces, texturing and lighting models, as well as programming of modern Graphics Processing Units (GPUs). Includes programming projects where students build their own 3D rendering engine step-by-step.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461).

Restriction: Permission of CMNS-Computer Science department.

CMSC430 Introduction to Compilers (3 Credits)

Topics include lexical analysis, parsing, intermediate representations, program analysis, optimization, and code generation.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC433 Programming Language Technologies and Paradigms (3 Credits)

Programming language technologies (e.g., object-oriented programming), their implementations and use in software design and implementation.

Prerequisite: Minimum grade of C- in CMSC330; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

CMSC434 Introduction to Human-Computer Interaction (3 Credits)

Assess usability by quantitative and qualitative methods. Conduct task analyses, usability tests, expert reviews, and continuing assessments of working products by interviews, surveys, and logging. Apply design processes and guidelines to develop professional quality user interfaces. Build low-fidelity paper mockups, and a high-fidelity prototype using contemporary tools such as graphic editors and a graphical programming environment (eg: Visual Basic, Java).

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC435 Software Engineering (3 Credits)

State-of-the-art techniques in software design and development. Laboratory experience in applying the techniques covered. Structured design, structured programming, top-down design and development, segmentation and modularization techniques, iterative enhancement, design and code inspection techniques, correctness, and chief-programmer teams. The development of a large software project.

Prerequisite: 1 course with a minimum grade of C- from (CMSC412, CMSC417, CMSC420, CMSC430, CMSC433, ENEE447); and permission of CMNS-Computer Science department.

CMSC436 Programming Handheld Systems (3 Credits)

Fundamental principles and concepts that underlie the programming of handheld systems, such as mobile phones, personal digital assistants, and tablet computers. Particular emphasis will be placed on concepts such as limited display size, power, memory and CPU speed; and new input modalities, where handheld systems differ substantially from non-handheld systems, and thus require special programming tools and approaches. Students will apply these concepts and principles in the context of an existing handset programming platform.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Restriction: Permission of CMNS-Computer Science department.

CMSC451 Design and Analysis of Computer Algorithms (3 Credits)

Fundamental techniques for designing efficient computer algorithms, proving their correctness, and analyzing their complexity. General topics include graph algorithms, basic algorithm design paradigms (such as greedy algorithms, divide-and-conquer, and dynamic programming), network flows, NP-completeness, and other selected topics in algorithms.

Prerequisite: Minimum grade of C- in CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC452 Elementary Theory of Computation (3 Credits)

Techniques are developed to determine the difficulty of a problem relative to a model of computation. Topics include Finite Automata, P, NP, decidability, undecidability, and communication complexity.

Prerequisite: Minimum grade of C- in CMSC351; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

CMSC454 Algorithms for Data Science (3 Credits)

Fundamental methods for processing a high volume of data. Methods include stream processing, locally sensitive hashing, web search methods, page rank computation, network and link analysis, dynamic graph algorithms as well as methods to handle high dimensional data/dimensionality reduction.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351.

Restriction: Permission of CMSC-Computer Science department.

CMSC456 Cryptography (3 Credits)

The theory, application, and implementation of mathematical techniques used to secure modern communications. Topics include symmetric and public-key encryption, message integrity, hash functions, block-cipher design and analysis, number theory, and digital signatures.

Prerequisite: (CMSC106, CMSC131, or ENEE150; or equivalent programming experience); and (2 courses from (CMSC330, CMSC351, ENEE324, or ENEE380); or any one of these courses and a 400-level MATH course, or two 400-level MATH courses); and Permission of CMNS-Mathematics department or permission of instructor . Cross-listed with: MATH456, ENEE456.

Credit Only Granted for: MATH456, CMSC456 or ENEE456.

CMSC457 Introduction to Quantum Computing (3 Credits)

An introduction to the concept of a quantum computer, including algorithms that outperform classical computation and methods for performing quantum computation reliably in the presence of noise. As this is a multidisciplinary subject, the course will cover basic concepts in theoretical computer science and physics in addition to introducing core quantum computing topics.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461, PHYS274); and 1 course with a minimum grade of C- from (CMSC351, PHYS373).

Restriction: Permission of CMNS-Computer Science department.

CMSC460 Computational Methods (3 Credits)

Basic computational methods for interpolation, least squares, approximation, numerical quadrature, numerical solution of polynomial and transcendental equations, systems of linear equations and initial value problems for ordinary differential equations. Emphasis on methods and their computational properties rather than their analytic aspects. Intended primarily for students in the physical and engineering sciences.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and 1 course with a minimum grade of C- from (MATH241, MATH340); and 1 course with a minimum grade of C- from (CMSC106, CMSC131); and minimum grade of C- in MATH246. Cross-listed with: AMSC460.

Credit Only Granted for: AMSC460, AMSC466, CMSC460, or CMSC466.

CMSC466 Introduction to Numerical Analysis I (3 Credits)

Floating point computations, direct methods for linear systems, interpolation, solution of nonlinear equations.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and 1 course with a minimum grade of C- from (MATH241, MATH340); and 1 course with a minimum grade of C- from (CMSC106, CMSC131); and minimum grade of C- in MATH410. Cross-listed with: AMSC466.

Credit Only Granted for: AMSC460, CMSC460, AMSC466, or CMSC466.

CMSC470 Introduction to Natural Language Processing (3 Credits)

Introduction to fundamental techniques for automatically processing and generating natural language with computers. Machine learning techniques, models, and algorithms that enable computers to deal with the ambiguity and implicit structure of natural language. Application of these techniques in a series of assignments designed to address a core application such as question answering or machine translation.

Prerequisite: Minimum grade of C- in CMSC320, CMSC330, and CMSC351; and 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461).

Restriction: Permission of CMNS-Computer Science department.

CMSC471 Introduction to Data Visualization (3 Credits)

Datasets are becoming increasingly large and complex, requiring intuitive ways to explore and interpret them quickly and efficiently. In this case, a picture is worth a thousand words: visualizations enable us to transform data into images that are easier to understand and reason about, compared to raw numbers and raw text. Visualizations are critical tools in externalizing and organizing our knowledge and insights, whether to explore collected datasets to improve our understanding of the physical world, to assess and debug analysis/experimental workflows, or to present new and interesting results to diverse audiences. In this course we will study techniques and algorithms for creating effective visualizations based on principles from graphic design, perceptual psychology, and cognitive science. Students will learn how to design and build interactive visualizations for the web, using the D3.js (Data-Driven Documents) framework.

Prerequisite: Minimum grade of C- in CMSC330 and CMSC351; and permission of CMNS-Computer Science Department.

Restriction: Permission of the CMNS-Computer Science Department.

Credit Only Granted for: CMSC471 or CMSC498O.

Formerly: CMSC498O.

CMSC472 Introduction to Deep Learning (3 Credits)

An introduction to deep learning, a machine learning technique, as well as its applications to a variety of domains. Provides a broad overview of deep learning concepts including neural networks, convolutional neural networks, recurrent neural networks, generative models, and deep reinforcement learning, and an intuitive introduction to basics of machine learning such as simple models, learning paradigms, optimization, overfitting, importance of data, and training caveats.

Prerequisite: Minimum grade of C- or higher in CMSC330 and CMSC351; and 1 course with a minimum grade of C- or higher from (MATH240, MATH461).

Restriction: Permission of the CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's) program.

Credit Only Granted for: CMSC498L or CMSC472.

Formerly: CMSC498L.

CMSC473 Capstone in Machine Learning (3 Credits)

Semester-long project course in which each student will identify and carry out a project related to machine learning, with the goal of publishing a research paper or software tool.

Prerequisite: Minimum grade of C- or higher in CMSC421 or CMSC422.

Recommended: Background or exposure to machine learning topics is strongly encouraged.

Restriction: Permission of instructor and Permission of CMSC - Computer Science department.

Credit Only Granted for: CMSC498P or CMSC473.

Formerly: CMSC498P.

Additional Information: Students will be paired with project advisors from the UMD faculty or alternatively, an industry advisor. Students are encouraged to plan for projects results that can be published at academic conferences or will impact academic research.

CMSC474 Introduction to Computational Game Theory (3 Credits)

Game theory deals with interactions among agents (either human or computerized) whose objectives and preferences may differ from the objectives and preferences of the other agents. It will also provide a comprehensive introduction to game theory, concentrating on its computational aspects.

Prerequisite: Minimum grade of C- in CMSC351 and CMSC330; and permission of CMNS-Computer Science department. Or must be in the (Computer Science (Doctoral), Computer Science (Master's)) program.

Credit Only Granted for: CMSC474, ECON414, GVPT390 or GVPT399A.

CMSC475 Combinatorics and Graph Theory (3 Credits)

General enumeration methods, difference equations, generating functions. Elements of graph theory, matrix representations of graphs, applications of graph theory to transport networks, matching theory and graphical algorithms.

Prerequisite: 1 course with a minimum grade of C- from (MATH240, MATH341, MATH461); and 1 course with a minimum grade of C- from (MATH241, MATH340). And permission of CMNS-Computer Science department; or permission of CMNS-Mathematics department. Cross-listed with MATH475 .

CMSC477 Robotics Perception and Planning (3 Credits)

A hands-on introduction to perception and planning for robotics, including rigid body transformations and rotations, dynamics and control of mobile robots/drones, graph based and sampling based planning algorithms, Bayseian and Kalman filtering, camera models and calibration, projective geometry, visual features, optical flow, pose estimation, RANSAC and Hough transform, structure from motion, visual odometry, machine learning basics, visual recognition and learning.

Prerequisite: 1 course from (MATH240, MATH341, MATH461); and (ENEE467 or CMSC420).

Restriction: Must be in the Robotics and Autonomous Systems minor; and permission of Computer Science department.

CMSC488 Special Topics in Computer Science (1-3 Credits)

Seminar courses that allow students to pursue new and emerging areas of Computer Science.

Restriction: Permission of CMNS-Computer Science department.

Repeatable to: 6 credits if content differs.

Additional Information: Course may be used as electives for the undergraduate degree and minor.

CMSC498 Selected Topics in Computer Science (1-3 Credits)

An individualized course designed to allow a student or students to pursue a selected topic not taught as a part of the regular course offerings under the supervision of a Computer Science faculty member. In addition, courses dealing with topics of special interest and/or new emerging areas of computer science will be offered with this number. Selected topics courses will be structured very much like a regular course with homework, project and exams. Credit according to work completed

Restriction: Permission of CMNS-Computer Science department.

CMSC499 Independent Undergraduate Research (1-3 Credits)

Students are provided with an opportunity to participate in a computer science research project under the guidance of a faculty advisor. Format varies. Students and supervising faculty member will agree to a research plan which must be approved by the department. As part of each research plan, students should produce a final paper delineating their contribution to the field.

Restriction: Must be in one of the following programs (Computer Science; Engineering: Computer) ; and permission of CMNS-Computer Science department.

CMSC601 Computational and Mathematical Analysis of Biological Networks across Scales (3 Credits)

Describe, implement and analyze algorithms that solve fundamental problems in biological network analysis: descriptive summaries of network structure and properties, probabilistic and dynamical network models, statistical models for networked data and network visualization.

Prerequisite: CMSC423; or equivalent.

Credit Only Granted for: CMSC828O or CMSC601.

Formerly: CMSC828O.

CMSC614 Computer and Network Security (3 Credits)

Advanced topics in computer and network security, including: anonymity, privacy, memory safety, malware, denial of service attacks, trusted hardware, security design principles, and empirically measuring security "in the wild". This will be a largely paper-driven course (there is no textbook), preparing students for research in (or around) the broad area of security. Students will gain first-hand experience launching attacks in controlled environments. The bulk of the grade will be based on a final, semester-long group project.

Recommended: Knowledge of C programming.

Restriction: Must be in the Computer Science Master's or Doctoral programs.

Credit Only Granted for: CMSC818O or CMSC614.

Formerly: CMSC818O.

CMSC616 Foundations of Parallel Computing (3 Credits)

Covers the foundations of parallel computing. Topics include programming for shared memory and distributed memory parallel architectures, and fundamental issues in design, development and analysis of parallel programs.

Prerequisite: CMSC411 and CMSC412; or permission of instructor.

Restriction: Must be in the Computer Science or Applied Mathematics and Scientific Computation master's or doctoral programs.

Credit Only Granted for: CMSC616 or CMSC818X.

Formerly: CMSC818X.

CMSC630 Foundations of Software Verification (3 Credits)

Topics in program verification. Operational semantics of programs. Preconditions and postconditions. Axiomatic proof systems and predicate transformers. Temporal logic and model checking. Process algebra, semantic equivalences and algebraic reasoning.

Prerequisite: CMSC330; or students who have taken courses with comparable content may contact the department; or permission of instructor.

CMSC631 Program Analysis and Understanding (3 Credits)

Techniques for static analysis of source code and modern programming paradigms. Analysis techniques: data flow analysis, program dependence graphs, program slicing, abstract interpretation. The meaning of programs: denotational semantics, partial evaluation. Advanced treatment of abstraction mechanisms: polymorphic types, operation overloading, inheritance, object-oriented programming and ML-like programming languages.

Prerequisite: CMSC330; or students who have taken courses with comparable content may contact the department; or permission of instructor.

CMSC634 Empirical Research Methods for Computer Science (3 Credits)

A graduate-level introductory course on empirical reseach methods for computer scientists. Experimental techniques for evaluating software systems and processes, human performance using interfaces, programming environments, and software engineering methods. Introduction to constructs and methods of measurements, qualitative and quantitative design, quasi-experimental and non-experimental design, baseline design, and statistical analysis.

Recommended: An introductory statistics class.

Restriction: Must be in Computer Science (Master's) program; or must be in Computer Science (Doctoral) program; or permission of instructor.

Credit Only Granted for: CMSC838G (Fall2005) or CMSC634.

CMSC651 Analysis of Algorithms (3 Credits)

Efficiency of algorithms, orders of magnitude, recurrence relations, lower-bound techniques, time and space resources, NP-complete problems, polynomial hierarchies, and approximation algorithms. Sorting, searching, set manipulation, graph theory, matrix multiplication, fast Fourier transform, pattern matching, and integer and polynomial arithmetic.

Prerequisite: CMSC451.

CMSC652 Complexity Theory (3 Credits)

This course will define what it means for a problem to be hard (or easy) in a variety of ways. The emphasis will be on natural problems. Topics may include NP-completeness, Sparse Sets, Graph Isomoprhism (why it is thought to not be NP-complete), Counting problems, and approximation problems.

Prerequisite: CMSC451 or CMSC452; or permission of instructor.

Credit Only Granted for: CMSC652 or CMSC858G.

Formerly: CMSC858G.

CMSC656 Introduction to Cryptography (3 Credits)

Introduction to modern cryptography. Topics include symmetric-key encryption, hash functions, message-authentication codes, block-cipher design, theoretical foundations, number theory, public-key encryption, and digital signatures.

Prerequisite: CMSC451, CMSC452, or CMSC456.

Credit Only Granted for: CMSC656 or CMSC858K.

Formerly: CMSC858K.

CMSC657 Introduction to Quantum Information Processing (3 Credits)

An introduction to the field of quantum information processing. Students will be prepared to pursue further study in quantum computing, quantum information theory, and related areas.

Prerequisite: Familiarity with complex numbers and basic concepts in linear algebra (e.g., eigenvalues, eigenvectors, Hermitian and unitary matrices) is required.

Credit Only Granted for: CMSC657 or CMSC858K.

Formerly: CMSC858K.

Additional Information: Previous background in quantum mechanics or theory of computation is not required.

CMSC660 Scientific Computing I (3 Credits)

Fundamental techniques in scientific computation with an introduction to theory and software for each topic. Computer numbers and sources of errors, numerical linear algebra, optimization, and Monte Carlo methods.

Prerequisite: Must have knowledge of Matlab or Python. Cross-listed with: AMSC660.

Credit Only Granted for: AMSC660 or CMSC660.

CMSC661 Scientific Computing II (3 Credits)

Numerical methods for solving ordinary and partial differential equations (elliptic, parabolic, hyperbolic, and dispersive): motivation, analysis, and implementation. Finite difference methods, finite element methods, Fourier and Chebyshev spectral methods, and meshless methods.

Prerequisite: Must have knowledge of Matlab or Python. Must have basic knowledge of ordinary and partial differential equations (MATH246 and MATH462 or equivalent, or permission of instructor). Cross-listed with: AMSC661.

Credit Only Granted for: AMSC661 or CMSC661.

CMSC662 Computer Organization and Programming for Scientific Computing (3 Credits)

This course presents fundamental issues of computer hardware, software parallel computing, and scientific data management for programming for scientific computation.

Prerequisite: Must have Knowledge of C or Fortran. Cross-listed with: AMSC662.

Credit Only Granted for: AMSC662 or CMSC662.

CMSC663 Advanced Scientific Computing I (3 Credits)

In the sequence Advanced Scientific Computing I & Advanced Scientific Computing II, (CMSC663/CMSC663 and AMSC664/CMSC664, respectively) students work on a year-long individual project to develop software for a scientific task in a high performance computing environment. Lectures will be given on available computational environments, code development, implementation of parallel algorithms.

Prerequisite: AMSC660 or CMSC660; and (AMSC661 or CMSC661).

Restriction: Permission of instructor. Cross-listed with: AMSC663.

Credit Only Granted for: AMSC663 or CMSC663.

CMSC664 Advanced Scientific Computing II (3 Credits)

In the sequence Advanced Scientific Computing I & Advanced Scientific Computing II, (AMSC663/CMSC663 and CMSC664/CMSC664, respectively) students work on a year-long individual project to develop software for a scientific task in a high performance computing environment. Lectures will be given on available computational environments, code development, implementation of parallel algorithms.

Prerequisite: AMSC663 or CMSC663.

Restriction: Permission of instructor. Cross-listed with: AMSC664.

Credit Only Granted for: AMSC664 or CMSC664.

CMSC666 Numerical Analysis I (3 Credits)

Approximation theory, numerical solution of initial-value problems, iterative methods for linear systems, optimization.

Prerequisite: CMSC466 or AMSC466; and MATH410. Cross-listed with: AMSC666.

Credit Only Granted for: AMSC666 or CMSC666.

CMSC673 Capstone in Machine Learning (3 Credits)

Semester-long project course in which each student will identify and carry out a project related to machine learning, with the goal of publishing a research paper or software tool.

Prerequisite: Minimum grade of C-in CMSC421 or CMSC422. Jointly offered with: CMSC473.

Credit Only Granted for: CMSC673, CMSC798P, CMSC473, or CMSC498P.

Formerly: CMSC798P.

CMSC701 Computational Genomics (3 Credits)

An introduction to the algorithms and heuristics used in the analysis of biological sequences. Includes an introduction to string matching and alignment algorithms, phylogenetic analysis, string reconstruction (genome assembly), and sequence pattern recognition (gene and motif finding). A particular emphasis will be placed on the design of efficient algorithms and on techniques for analyzing the time and space complexity of these algorithms. Computational concepts will be presented in the context of current biological applications. No prior knowledge of biology necessary.

CMSC702 Computational Systems Biology (3 Credits)

An introduction to the fundamental concepts in the computational analysis of biological systems with applications to: functional genomics, population genetics, interaction networks, epigenetics. Computational concepts convered: network and graph algorithms, machine learning, large data/network visualization, statistical modeling and inference, probabilistic graphical models, sparse methods in data analysis, numerical optimization. No prior knowledge of biology required.

CMSC703 Network Analysis and Modeling of Biological Systems (3 Credits)

An introduction to the computational network analysis and modeling of biological systems focusing on transcriptional, protein, signaling and metabolic networks (with primary emphasis on integrating the former within the latter). Computational methods studied for this type of analysis include: network and graph algorithms, network-based machine learning approaches, modeling dynamical systems, numerical optimization (linear, integer and quadratic programming) and a variety of other methods used to solve constraint based problems (primarily in the context of studying metabolic networks). These methods are complementary to those studied in CMSC701 and CMSC702.

Restriction: Must be in one of the following programs (Computer Science (Doctoral); Computer Science (Master's); Applied Mathematics and Scientific Computation (Doctoral); Applied Mathematics and Scientific Computation (Master's)) ; or permission of instructor.

CMSC711 Computer Networks (3 Credits)

Priciples, design, and performance evaluation of computer networks. Network architectures including the ISO model and local area networks (LANs). Communication protocols and network topology.

Prerequisite: CMSC412; or students who have taken courses with comparable content may contact the department.

CMSC712 Distributed Algorithms and Verification (3 Credits)

Study of algorithms from the distributed and concurrent systems literature. Formal approach to specifying, verifying, and deriving such algorithms. Areas selected from mutual exclusion, resource allocation, quiescence detection, election, Byzantine agreements, routing, network protocols, and fault-tolerence. Formal approaches will handle system specification and verification of safety, liveness, and real-time properties.

CMSC715 Wireless and Mobile Systems for the IoT (3 Credits)

Research on the Internet of Things (IoT), from the perspective of wireless networking and mobile sensing. Various techniques, algorithms, and systems that leverage the sensors in smartphones, smartwatches, drones, and IoT devices, to deliver real-world applications

Prerequisite: CMSC417; or permission of instructor.

Recommended: STAT100, MATH141, MATH240, and CMSC106; or equivalent courses .

Credit Only Granted for: CMSC818W or CMSC715.

Formerly: CMSC818W.

CMSC722 Artificial Intelligence Planning (3 Credits)

Automated planning of actions to accomplish some desired goals. Basic algorithms, important systems, and new directions in the field of artificial intelligence planning systems.

Prerequisite: CMSC421; or students who have taken courses with comparable content may contact the department; or permission of CMNS-Computer Science department.

CMSC723 Natural Language Processing (3 Credits)

Introduce fundamental concepts, techniques, and algorithms for the computational handling of natural language. Statistical and machine learning techniques, models, and algorithms that enable computers to deal with the ambiguity and implicit structure of human language. Approaches that focus on uncovering linguistic structure, such as syntactic or semantic parsing, as well as those that focus on manipulating text in useful ways, such as question answering or machine translation.

Prerequisite: Minimum grade of C- in CMSC422; and permission of CMNS-Computer Science department. Cross-listed with: INST735, LING723.

Credit Only Granted for: CMSC723, LING723, or INST735.

Additional Information: CMSC students may only receive PhD Comp. credit for CMSC723 or CMSC823, not both.

CMSC724 Database Management Systems (3 Credits)

Theoretical and implementation issues in advanced database systems. Topics include distributed databases, parallel databases, database client-server architectures, multimedia access methods, advanced query optimization techniques, data semantics and models, object-oriented databases, and deductive and expert database systems.

Restriction: Must be in one of the following programs (Computer Science (Master's); Computer Science (Doctoral)) ; or permission of instructor; or permission of CMNS-Computer Science department.

CMSC725 Geographical Information Systems and Spatial Databases (3 Credits)

Topics in geographic information systems and spatial databases. Integrates related results from databases, cartography, geography, computer graphics, file access methods, computational geometry, image processing, data structures, and programming languages. Topics include: cartographic modeling, principles of cartography, methods from computational geometry, principles of spatial databases, access methods, and spatial data structures. The architecture of some existing spatial databases and geographic information systems will be examined in greater detail.

Prerequisite: CMSC424 and CMSC420; or permission of instructor.

CMSC726 Machine Learning (3 Credits)

An introduction to modern statistical data analysis using machine learning techniques. The course quickly surveys elementary statistical models (decision trees, nearest neighbors and linear regression) and moves on to more complex algorithms such as support vector machines, boosting, neural networks, structured prediction, apprenticeship learning, online learning, bandits, recommender systems and reinforcement learning. Throughout an emphasis is placed on mathematical rigor.

Prerequisite: CMSC421 or CMSC422; or students who have taken courses with comparable content may contact the department; or permission of instructor.

CMSC727 Neural Modeling (3 Credits)

Fundamental methods of neural modeling. Surveys historical development and recent research results from both the computational and dynamical systems perspective. Logical neurons, perceptrons, linear adaptive networks, attractor neural networks, competitive activation methods, error back-propagation, self-organizing maps, and related topics. Applications in artificial intelligence, cognitive science, and neuroscience.

Prerequisite: CMSC421; or students who have taken courses with comparable content may contact the department; or permission of instructor.

CMSC730 Interactive Technologies in Human-Computer Interaction (3 Credits)

Ubiquitous and mobile computing, wearables, virtual/augmented reality, natural user interfaces, tangible UIs, interactive fabrication.

Restriction: Must be in the Computer Science Master's or Doctoral program; or permission of instructor.

Credit Only Granted for: CMSC838J or CMSC730.

Formerly: CMSC838J.

CMSC732 Human Factors in Security and Privacy (3 Credits)

Introducing a variety of important topics at the intersection of human factors and privacy and security, and developing skills in designing human-subjects studies to evaluate problems and solutions related to these topics.

Recommended: Previous coursework in human-computer interaction, security and privacy.

Credit Only Granted for: CMSC818D or CMSC732.

Formerly: CMSC818D.

CMSC733 Computer Processing of Pictorial Information (3 Credits)

Input, output, and storage of pictorial information. Pictures as information sources, efficient encoding, sampling, quantization, approximation. Position-invariant operations on pictures, digital and optical implementations, the pax language, applications to matched and spatial frequency filtering. Picture quality, image enhancement and image restoration. Picture properties and pictorial pattern recognition. Processing of complex pictures; figure extraction, properties of figures. Data structures for pictures description and manipulation; picture languages. Graphics systems for alphanumeric and other symbols, line drawings of two- and three-dimensional objects, cartoons and movies.

Prerequisite: CMSC420.

CMSC734 Information Visualization (3 Credits)

Information visualization defined in relation to graphics, scientific visualization, databases, data mining, and human-computer interaction. Visualizations for dimensional, temporal, hierarchical and network data. Examines design alternatives, algorithms and data structures, coordinated views, and human factors evaluations of efficacy.

Prerequisite: CMSC434; or students who have taken courses with comparable content may contact the department; or permission of instructor.

CMSC737 Fundamentals of Software Testing (3 Credits)

Examine fundamental software testing and related program analysis techniques. In particular, the important phases of testing will be reviewed, emphasizing th significance of each phase when testing different types of software. Concepts include: test generation, oracles, prioritization and coverage, regression and mutation testing, and program analysis.

Prerequisite: CMSC435; or students who have taken courses with comparable content may contact the department; or permission of instructor.

Formerly: CMSC838M.

CMSC740 Advanced Computer Graphics (3 Credits)

An introduction to the principles of computer graphics. Includes an introduction to graphics displays and systems, introduction to the mathematics of affine and projective transformations, perspective, curve and surface modeling, algorithms for hidden-surface removal, color models, methods for modeling illumination, shading, and reflection.

Prerequisite: MATH240 and CMSC420; or permission of instructor.

CMSC742 Algorithms in Machine Learning: Guarantees and Analyses (3 Credits)

Machine learning studies automatic methods for learning to make accurate predictions, to understand patterns in observed features and to make useful decisions based on past observations. This course introduces theoretical machine learning, including mathematical models of machine learning, and the design and rigorous analysis of learning algorithms. Topics include: (1) Learning theory (traditional and modern), including PAC learning basics, Boosting theory and PAC learning in neural nets. (2) Latent variable graphical models, including spectral methods for learning latent variable models. (3) Reinforcement learning theory, including algorithms, sample complexity and analyses.

Prerequisite: CMSC422 or equivalent; or permission of instructor.

Credit Only Granted for: CMSC828U or CMSC732.

Formerly: CMSC828U.

CMSC751 Parallel Algorithms (3 Credits)

A presentation of the theory of parallel computers and parallel processing. Models of parallel processing and the relationships between these models. Techniques for the design and analysis of efficient parallel algorithms including parallel prefix, searching, sorting, graph problems, and algebraic problems. Theoretical limits of parallelism.

Prerequisite: CMSC451; or ENEE641; or students who have taken courses with comparable content may contact the department. Cross-listed with: ENEE651.

Credit Only Granted for: ENEE459P, ENEE651, ENEE759K or CMSC751.

Formerly: ENEE759K.

CMSC752 Ramsey Theory and its Applications (3 Credits)

Theorems about when a coloring of a graph (or other objects) has to yield a nice monochromatic object. Applications will be to computer science theory and to mathematics.

Prerequisite: Any CMSC45X course or any 400-level math course.

Credit Only Granted for: CMSC858R or CMSC752.

Formerly: CMSC858R.

CMSC754 Computational Geometry (3 Credits)

Introduction to algorithms and data structures for computational problems in discrete geometry (for points, lines, and polygons) primarily in two and three dimensions. Topics include triangulations and planar subdivisions, geometric search and intersection, convex hulls, Voronoi diagrams, Delaunay triangulations, line arrangements, visibility, and motion planning.

Prerequisite: CMSC451 and CMSC420; or permission of instructor.

CMSC756 Robotics (3 Credits)

Overview on fundamental components of robotic systems, including the sensing and actuation, control and modeling of motion and perception, dynamics and kinematics, motion planning and manipulation of robots.

Prerequisite: CMSC420, CMSC106, CMSC466, and MATH240; or equivalent.

Restriction: Must be in the Computer Science Master's or Doctoral programs.

Credit Only Granted for: CMSC818N or CMSC756.

Formerly: CMSC818N.

CMSC763 Advanced Linear Numerical Analysis (3 Credits)

Advanced topics in numerical linear algebra, such as dense eigenvalue problems, sparse elimination, iterative methods, and other topics.

Prerequisite: AMSC666 or CMSC666; or permission of instructor. Cross-listed with: AMSC763.

Credit Only Granted for: AMSC600, AMSC763, CMSC760, or CMSC763.

Formerly: AMSC600 and CMSC760.

CMSC764 Advanced Numerical Optimization (3 Credits)

Modern numerical methods for solving unconstrained and constrained nonlinear optimization problems in finite dimensions. Design of computational algorithms and the analysis of their properties.

Prerequisite: MATH410; or permission of instructor. Cross-listed with: AMSC607.

Credit Only Granted for: AMSC607 or CMSC764.

Formerly: CMSC878O.

CMSC773 Computational Linguistics II (3 Credits)

Natural language processing with a focus on corpus-based statistical techniques. Topics inlcude: stochastic language modeling, smoothing, noisy channel models, probabilistic grammars and parsing; lexical acquisition, similarity-based methods, word sense disambiguation, statistical methods in NLP applications; system evaluation.

Prerequisite: CMSC723, INST735, or LING723; or permission of instructor. Cross-listed with LING773, INST736.

Credit Only Granted for: CMSC773, LING773, or INST736.

Additional Information: CMSC students may only receive PhD Comp. credit for CMSC723 or CMSC823, not both.

CMSC798 Master's Non-Thesis Research (1-3 Credits)

Restriction: Permission of CMNS-Computer Science department.

Repeatable to: 6 credits.

CMSC799 Master's Thesis Research (1-6 Credits)

CMSC800 How to Conduct Great Research (1 Credit)

Develop research skills so as to promote high quality and high impact.

Restriction: Must be in the Computer Science doctoral program.

Credit Only Granted for: CMSC798F or CMSC800.

Formerly: CMSC798F.

CMSC801 Department Internal Research Seminar (1 Credit)

Research overviews from faculty to help introduce departmental research to graduate students.

Credit Only Granted for: CMSC798E or CMSC801.

Formerly: CMSC798E.

CMSC818 Advanced Topics in Computer Systems (1-3 Credits)

Advanced topics selected by the faculty from the literature of computer systems to suit the interest and background of students.

Restriction: Permission of instructor.

Repeatable to: 99 credits.

CMSC828 Advanced Topics in Information Processing (1-3 Credits)

Advanced topics selected by the faculty from the literature of information processing to suit the interest and background of students.

Restriction: Permission of instructor.

Repeatable to: 99 credits.

CMSC829 Advanced Topics in Bioinformatics and Computational Biology (3 Credits)

Advanced topics selected by the faculty from the literature of bioinformatics to suit the interest and background of students.

CMSC838 Advanced Topics in Programming Languages (1-3 Credits)

Advanced topics selected by faculty from the literature of programming languages to suit the interest and background of students.

Restriction: Permission of instructor.

Repeatable to: 99 credits.

CMSC839 Advanced Topics in Human-Computer Interaction (1-3 Credits)

Advanced topics selected by the faculty from the literature of human-computer interaction to suit the interest and background of students.

Repeatable to: 15 credits.

CMSC848 Selected Topics in Information Processing (1-3 Credits)

Selected topics by the faculty from the literature of information processing to suit the interest and background of students.

Repeatable to: 99 credits if content differs.

CMSC858 Advanced Topics in Theory of Computing (1-3 Credits)

Advanced topics selected by the faculty from the literature of theory of computing to suit the interest and background of students.

Restriction: Permission of instructor.

Repeatable to: 99 credits.

CMSC878 Advanced Topics in Numerical Methods (1-3 Credits)

Advanced topics selected by the faculty from the literature of numerical methods to suit the interest and background of students.

Restriction: Permission of instructor.

Repeatable to: 99 credits.

CMSC898 Pre-Candidacy Research (1-8 Credits)

Advanced topics selected by the faculty from the literature of applications of computer science to suit the interest and background of students.

Restriction: Permission of instructor.

CMSC899 Doctoral Dissertation Research (1-8 Credits)