Computer Science courses

CMPS 1500 Introduction to Computer Science I
Introduction to Computer Science I
Computational tools are a critical part of our everyday lives. Software is the driving force behind cutting edge scientific discovery, blockbuster entertainment, and today's fast-paced marketplace. This course is an introduction to techniques, ideas and problem-solving approaches that are used to develop some of these tools. At a high level, we focus on developing "computational thinking", which is the practice of using abstraction to design and implement algorithms and software to solve problems that arise in many different areas of our daily lives, such as networks, social media, and scientific computing, to name just a few. At a practical level, students will design, implement, test and document their programs to learn introductory programming concepts, such as:
• Data types and data structures (e.g. lists, dictionaries, trees)
• Imperative programming (modular design using functions, recursion, object-oriented programming)
• Performance analysis via theoretical estimate, profiling and timing.
Most assignments in this course are programming assignments aimed to teach the students to express their ideas in efficient and elegant code; no prior programming experience is necessary to join and succeed in the course. Lecture periods are dedicated to introducing new material, discussions, individual and group activities and lab periods are used for programming practice. CMPS 1500 is the first course for Coordinate Major in Computer Science. It is usually offered in the fall term.

credit hours: 4

CMPS 1600 Introduction to Computer Science II
Introduction to Computer Science II
This is the second course in the introductory course sequence for Coordinate Major in Computer Science and is the continuation of CMPS 1500. While CMPS 1500 focuses on a broad array of topics in computer science and a single language (Python), this class focuses on several core topics in the design, analysis and implementation of computational tools that are drawn from the fields of data structures, software engineering, and programming languages:
•Java, object-oriented programming, and test-driven development
•Data structures and abstract data types
•C and imperative programming
•Haskell and functional programming
By solving practical, real-life problems in different programming languages and in different ways, students learn to select a language and approach most appropriate for the situation, and prepare to learn new languages independently. The high-level goal of this course is to train students to be able to draw from a versatile set of skills, which in turn will provide a strong foundation for further study in computer science. CMPS 1600 is usually offered in the spring term.
Pre-requistites: CMPS 1500 or equivalent
credit hours: 4

CMPS 2120 Introduction to programming and problem-solving in Python
Introduction to programming and problem-solving in Python
An introductory course on computer programming and problem-solving using computers. In this course students design, implement, test and debug programs for computational problems using Python programming language. This course emphasizes program design process, object-oriented software development approach, and practical programming skills that translate to programming in other modern languages. Assignments include practical problems drawn from various fields (such as biology, linguistics, graphics, and games).
credit hours: 3

CMPS 2170 Discrete Mathematics
Discrete Mathematics
This course is an introduction to several areas of mathematics that are particularly useful in computer science. The topics include an introduction to predicate and propositional logic, mathematical induction, combinatorics and counting, and discrete probability theory. We recommend that students interested in pursuing further study in computer science take CMPS 2170 before, or concurrently with CMPS 1500 or CMPS 1600.
Pre-requistites: MATH 1220 or MATH 1310 or permission of instructor.
credit hours: 3

CMPS 2200 Introduction to Algorithms
Introduction to Algorithms
This course is an introduction to the design and analysis of algorithms, and covers several basic algorithmic paradigms and their application to core computational problems in graph theory and optimization, as well as analysis of time and space complexity. The primary focus of the course will be on understanding the divide-and-conquer, greedy and dynamic programming paradigms for algorithm design as well as the problem areas to which they can be applied. Example application areas include graph theory, discrete optimization, numeric and scientific computing and machine learning.
Pre-requistites: CMPS 1600, CMPS/MATH 2170.
credit hours: 3

CMPS 2300 Introduction to Computer Systems and Networking
Introduction to Computer Systems and Networking
Modern computer systems must take advantage not only of the latest hardware technology, but also of
the ability to compute and communicate over a network. The primary focus of this course will be to
understand the principles behind the design of modern operating systems and distributed systems
through theoretical study of classic solutions and hands-on programming assignments in C.
To understand the architecture and organization of modern operating systems, we will examine issues
such as resource management and scheduling, memory management, multi-threading and concurrency,
and file system organization. To understand distributed systems, we will examine topics such as protocol design, asynchronous and synchronous communication, and layered network architecture


Pre-requistites: CMPS 1600 or permission of the instructor
credit hours: 3

CMPS 3110 Introduction to Computational Biology and Bioinformatics
Introduction to Computational Biology and Bioinformatics
This course gives an overview of numerous fundamental areas in computational biology: computational sequence analysis, sequencing technologies and algorithms, protein structure prediction and determination, systems biology and phylogenetic analysis. These areas are covered with a focus on understanding why and how engineering and computational methods are applied to real-world biological questions.
Pre-requistites: CMPS 1600, CMPS 2200.
credit hours: 3

CMPS 3120 Special Topics
Special Topics
This course varies from time to time, focusing on topics of interest to the faculty and students.
Pre-requistites: Permission of the instructor.
credit hours: 3

CMPS 3130 Introduction to Computational Geometry
Introduction to Computational Geometry
This course provides an introduction to geometric algorithms and geometric data structures. Computational Geometry is a young discipline which enjoys close relations to mathematics and to various application areas such as geometric databases, molecular biology, sensor networks, visualization, geographic information systems (GIS), VLSI, robotics, computer graphics and geometric modeling. Covered topics include fundamental geometric algorithm design and analysis paradigms, geometric data structures for planar subdivisions and range searching, algorithms to computer the convex hull, Voronoi diagrams, and Delaunay triangulation, as well as selected advanced topics.
Pre-requistites: CMPS 2200 or permission of the instructor.
credit hours: 3

CMPS 3140 Introduction to Artificial Intelligence
Introduction to Artificial Intelligence
The aim of this course is to provide the student with an introduction to the main concepts and techniques playing a key role in the modern arena of artificial intelligence. In addition to covering the main topics that concern modern AI, particular attention will be devoted to its applications in several fields. Among the topics covered are, “What is an intelligent artificial agent?”, problem solving using search and constraint satisfaction, uncertainty, Bayesian networks and probabilistic inference, supervised learning, planning, sequential decision problems, as well as several additional topics.
Pre-requistites: CMPS 1500, CMPS/MATH 2170.
credit hours: 3

CMPS 3210 Algorithms for Computational Structural Biology
Algorithms for Computational Structural Biology
Over the last few decades, as we have been able to determine whole genome sequences, structural biologists have sought to determine and catalog protein structures with an increasing reliance on computational methods. Automated methods to analyze protein structure make it possible to leverage information from previously solved structures, and to interpret experimental data in a principled way. In this course, we will focus on the myriad of algorithms for analyzing numerous aspects of protein structure and protein-protein interactions.
Pre-requistites: CMPS 1600, CMPS 2200.
credit hours: 3

CMPS 3240 Introduction to Machine Learning
Introduction to Machine Learning
This course provides an introduction to the fundamental concepts of machine learning and statistical pattern recognition. In addition, several examples of applications will be described. The topics covered include generative/discriminative and parametric/non-parametric supervised learning, including neural networks; unsupervised learning, including clustering, dimensionality reduction and kernel methods; learning theory, including tradeoffs, large margins and VC theory; reinforcement learning, including criteria for optimality, brute force methods, value function methods and direct policy search; feedforward/feedback adaptive control, direct/indirect adaptive control methods; and various applications.
Pre-requistites: CMPS 1500, CMPS/MATH 2170.
credit hours: 3

CMPS 3250 Theory of Computation
Theory of Computation
This course is an introduction to the theory of computation. It begins with regular languages and their representation as finite state automata, and continues with context free languages and pushdown automata. Turing machines and the Church-Turing Thesis are also considered, as well as decidability and reducibility. The basic notions of complexity theory area also covered, including P and NP for time complexity, as well as basic results about space complexity.
Pre-requistites: CMPS/MATH 2170 or equivalent.
credit hours: 3

CMPS 3260 Advanced Algorithms
Advanced Algorithms
This course is an introduction to the theory of computation. It begins with regular languages and their representation as finite state automata, and continues with context free languages and pushdown automata. Turing machines and the Church-Turing Thesis are also considered, as well as decidability and reducibility. The basic notions of complexity theory area also covered, including P and NP for time complexity, as well as basic results about space complexity.
Pre-requistites: CMPS/MATH 2170 or equivalent.
credit hours: 3

CMPS 3280 Information Theory
Information Theory
This course is an introduction to Shannon's mathematical theory of information. It considers basic concepts such as information content, entropy and the Kullback-Leibler distance, as well as areas such as data compression and Shannon's Source Coding Theorem, coding, prefix codes, lossless channels and their capacity, and Shannon's Noisy Coding Theorem. Applications to various areas are also featured in the course.
Pre-requistites: MATH 3050 or 3090 and familiarity with discrete probability or permission of instructor.
credit hours: 3

CMPS 3300 Software Studio
Software Studio
This is a project-oriented course on fundamentals of software development and software engineering. Working in teams, students apply a recognized software engineering methodology, a modern programming language and software development tools (including an IDE, debugger, version control system, and testing framework) to design and implement a semester-long project – a software solution for a real-world problem.

The high goal of the course is to train students to function efficiently in a real-world software development environment. To help reach that goal, the students of the course do a lot of independent learning, teamwork, documentation and public presentation of their product and design process.
The particular technologies employed in the course may change in synchrony with changes in software engineering field, currently the focus is on engineering software-as-a-service using Ruby for programming language and Rails for web development framework.


Pre-requistites: CMPS 1600, CMPS 2200 or approval of instructor.
credit hours: 3

CMPS 3360 Information and Scientific Visualization
Information and Scientific Visualization
An introduction on how graphical representations of data can be used to aid understanding. This course details the theory and practice of designing effective information or scientific visualizations. The techniques learned in this class have wide applications to all fields in engineering and science, where due to increasing sizes and complexity data now demands effective presentation and analysis. Topics will include iso-surfacing, volume rendering, transfer functions, vector/tensor fields, topological analysis, large data visualization, and uncertainty in visualizations
credit hours: 3

CMPS 4010 Capstone Project Part 1 of 2
Capstone Project Part 1 of 2
This is the first semester of a two-semester course devoted to the development of the student's capstone project, which is required for the Computer Science coordinate major. Each student is overseen by a faculty advisor in computer science, in coordination with a faculty advisor from the area in which the project aims to demonstrate the application of computer science to that discipline.
Pre-requistites: Approval of the department.
credit hours: 2

CMPS 4020 Capstone Project Part 2 of 2
Capstone Project Part 2 of 2
This is the second of a two-semester course devoted to the development of the student's capstone project, which is required for the Computer Science coordinate major. Each student is overseen by a faculty advisor in computer science, in coordination with a faculty advisor from the area in which the project aims to demonstrate the application of computer science to that discipline.
Pre-requistites: Approval of the department.
credit hours: 2

CMPS 4150 Multi-Agent Systems
Multi-Agent Systems
This course will cover advanced topics in artificial intelligence. The topic will be announced at the start of each semester.
Pre-requistites: Approval of the department.
credit hours: 3

CMPS 4230 Advanced Computational Geometry
Advanced Computational Geometry
This course covers a selection of advanced geometric algorithms and geometric data structures, and their application to other disciplines. Selected topics may include: Dynamic and kinetic data structures, geometric algorithms and data structures in higher dimensions, shape analysis and matching, robustness and implementation issues, geometric approximation algorithms. Applications to disciplines such as geometric databases, molecular biology, sensor networks, visualization, geographic information systems (GIS), VLSI, robotics, computer graphics, and geometric modeling will be discussed.
Pre-requistites: CMPS 3130/6130 or permission of instructor.
credit hours: 3

CMPS 4250 Mathematical Foundations of Computer Security
Mathematical Foundations of Computer Security
This course studies the mathematics underlying computer security, including both public key and symmetric key cryptography, crypto-protocols and information flow. The course includes a study of the RSA encryption scheme, stream and clock ciphers, digital signatures and authentication. It also considers semantic security and analysis of secure information flow.
Pre-requistites: One semester of Calculus, CMPS/MATH 2170, and permission of instructor.
credit hours: 3

CMPS 4730 Machine Learning and Natural Language Processing
Machine Learning and Natural Language Processing
This course focuses on advanced machine learning techniques and their application in the domain of natural language processing (NLP). Many real world machine learning problems deal with mapping data to structured representations, and in the NLP domain the output structure represents lexical, syntactical or semantic aspects of the text. Techniques covered in this course include discriminative and generative models including Structured Perceptron and Structured SVMs, Constrained Conditional Models, Probabilistic Graphical Models as well as Deep Learning techniques.
Pre-requistites: CMPS 6720/4720 or CMPS 3240/6240 or equivalent, or permission of the instructor
credit hours: 3

CMPS 4750 Computer Networks
Computer Networks
This is a graduate level course on computer networking. The objective of the course is to introduce students to the core concepts and analytic techniques in the design and analysis of computer networks and network protocols. We will explain both how computer networks work using the Internet as the paradigm and why they work from an optimization and control perspective.
Pre-requistites: Discrete Mathematics and Introduction to Algorithms or equivalent or instructor approval
credit hours: 3

CMPS 4760 Distributed Systems
Distributed Systems
This course covers the fundamental concepts in distributed computing at the graduate level. The objective is to introduce students to the core notions, algorithms, and analytic tools in the design of distributed systems. Recent developments in peer-to-peer systems, cloud computing, sensor networks, etc. will be used as case studies to help students establish a firm understanding of the philosophy and pitfalls in the design of computer systems when there is no global clock and when unpredictable failures and variable latency are the norm.
Pre-requistites: Discrete Mathematics, Introduction to Algorithms, Introduction to Computer Systems and Networking or equivalent or instructor approval
credit hours: 3

CMPS 4910 Independent Study in Computer Science
Independent Study in Computer Science
This is a directed study course that allows a student to pursue a topic of particular interest under the direction of a computer science faculty member. No more than three hours of 4910-4920 may be counted toward satisfying the major requirements.
Pre-requistites: Approval of the department.
credit hours: 3

CMPS 4990 Honors Thesis in Computer Science
Honors Thesis in Computer Science
Pre-requistites: Approval of the department.
credit hours: 3

CMPS 5000 Honors Thesis in Computer Science
Honors Thesis in Computer Science
Pre-requistites: Approval of the department.
credit hours: 3

CMPS 6120 Special Topics
Special Topics
This course varies from time to time, focusing on topics of interest to the faculty and students.
Pre-requistites: Permission of the instructor.
credit hours: 3

CMPS 6130 Introduction to Computational Geometry
Introduction to Computational Geometry
This course provides an introduction to geometric algorithms and geometric data structures. Computational Geometry is a young discipline which enjoys close relations to mathematics and to various application areas such as geometric databases, molecular biology, sensor networks, visualization, geographic information systems (GIS), VLSI, robotics, computer graphics and geometric modeling. Covered topics include fundamental geometric algorithm design and analysis paradigms, geometric data structures for planar subdivisions and range searching, algorithms to computer the convex hull, Voronoi diagrams, and Delaunay triangulation, as well as selected advanced topics.
Pre-requistites: CMPS 2200 or permission of the instructor.
credit hours: 3

CMPS 6150 Multi-Agent Systems
Multi-Agent Systems
This course will cover advanced topics in artificial intelligence. The topic will be announced at the start of each semester.
Notes: Approval of the department.
credit hours: 3

CMPS 6210 Algorithms for Computational Structural Biology
Algorithms for Computational Structural Biology
Over the last few decades, as we have been able to determine whole genome sequences, structural biologists have sought to determine and catalog protein structures with an increasing reliance on computational methods. Automated methods to analyze protein structure make it possible to leverage information from previously solved structures, and to interpret experimental data in a principled way. In this course, we will focus on the myriad of algorithms for analyzing numerous aspects of protein structure and protein-protein interactions.
Pre-requistites: CMPS 1600, CMPS 2200.
credit hours: 3

CMPS 6230 Advanced Computational Geometry
Advanced Computational Geometry
This course covers a selection of advanced geometric algorithms and geometric data structures, and their application to other disciplines. Selected topics may include: Dynamic and kinetic data structures, geometric algorithms and data structures in higher dimensions, shape analysis and matching, robustness and implementation issues, geometric approximation algorithms. Applications to disciplines such as geometric databases, molecular biology, sensor networks, visualization, geographic information systems (GIS), VLSI, robotics, computer graphics, and geometric modeling will be discussed.
Pre-requistites: CMPS 3130/6130 or permission of instructor.
credit hours: 3

CMPS 6260 Advanced Algorithms
Advanced Algorithms
Students who have taken neither MATH 2170 nor MATH 3200 require the permission of the instructor. A study of important algorithms (including searching and sorting, graph/network algorithms, and algorithms in number theory) and algorithm design techniques (including greedy, recursive, and probabilistic algorithms). Covers the analysis of algorithms (including worst-case and average-case analysis) and discussions of complexity classes for decision and enumeration problems (including P, NP, #P, PSPACE).
Pre-requistites: MATH 3050 or 3110 or 3200.
credit hours: 3

CMPS 6310 Logic in Computer Science
Logic in Computer Science
This course is an introduction to logic and its applications in computer science. The topics covered include soundness and completeness of propositional logic, predicate logic, linear time temporal logic and branching time temporal logics and their expressive power, frameworks for software verification, Hoare triples, partial and total correctness, modal logics and agents, and binary decision diagrams.
Pre-requistites: CMPS 2200 or equivalent and CMPS 2170 or equivalent or permission of instructor.
credit hours: 3

CMPS 6350 Introduction to Computer Graphics
Introduction to Computer Graphics
A comprehensive introduction to the mathematics and algorithms that drive today's digital special effects, animation, and games. Designed as a hands-on course, students will gain experience in building 2D/3D interactive applications using OpenGL. Topics covered will include geometric transformations, projections, raster algorithms, 3D object models (surface and volume), visible surface algorithms, texture mapping, lighting/shading, ray-tracing, anti-aliasing, and compositing.
Pre-requistites: CMPS 1600 or permission of instructor.
credit hours: 3

CMPS 6360 Information and Scientific Visualization
Information and Scientific Visualization
An introduction on how graphical representations of data can be used to aid understanding. This course details the theory and practice of designing effective information or scientific visualizations. The techniques learned in this class have wide applications to all fields in engineering and science, where due to increasing sizes and complexity data now demands effective presentation and analysis. Topics will include iso-surfacing, volume rendering, transfer functions, vector/tensor fields, topological analysis, large data visualization, and uncertainty in visualizations
credit hours: 3

CMPS 6730 This course focuses on advanced machine learning techniques and their application in the domain of natural language processing (
This course focuses on advanced machine learning techniques and their application in the domain of natural language processing (
Pre-requistites: CMPS 6720/4720 or CMPS 3240/6240 or equivalent, or permission of the instructor
credit hours: 3

CMPS 6750 Computer Networks
Computer Networks
This is a graduate level course on computer networking. The objective of the course is to introduce students to the core concepts and analytic techniques in the design and analysis of computer networks and network protocols. We will explain both how computer networks work using the Internet as the paradigm and why they work from an optimization and control perspective.
Pre-requistites: Discrete Mathematics and Introduction to Algorithms or equivalent or instructor approval
credit hours: 3

CMPS 6760 Distributed Systems
Distributed Systems
This course covers the fundamental concepts in distributed computing at the graduate level. The objective is to introduce students to the core notions, algorithms, and analytic tools in the design of distributed systems. Recent developments in peer-to-peer systems, cloud computing, sensor networks, etc. will be used as case studies to help students establish a firm understanding of the philosophy and pitfalls in the design of computer systems when there is no global clock and when unpredictable failures and variable latency are the norm.
Pre-requistites: Discrete Mathematics, Introduction to Algorithms, Introduction to Computer Systems and Networking or equivalent or instructor approval
credit hours: 3