Junior Level Courses

Here is a list of the junior level courses currently available in computer science. Not every course is offered every year - the department rotates the topics so that each area is represented at least once every two years.

Special Topics in Computer Science

CMPS 3120 – Special Topics in Computer Science
This course varies from time to time, focusing on topics of interest to the faculty and students.

Prerequisites: Permission of the instructor.

Introduction to Computational Geometry

CMPS 3130 – 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.

Prerequisites: CMPS 2200 or permission of the instructor.

Introduction to Artificial Intelligence

CMPS 3140 – 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.

Prerequisites: CMPS 1500, CMPS/MATH 2170.

Algorithms for Computational Structural Biology

CMPS 3210 – 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.

Prerequisites: CMPS 1600, CMPS 2200.

Introduction to Machine Learning

CMPS 3240 – 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.

Prerequisites: CMPS 1500, CMPS/MATH 2170.

Theory of Computation

CMPS 3250 – 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. (Same as MATH 3250.)

Prerequisite: CMPS/MATH 2170 or equivalent.

Advanced Algorithms

CMPS 3260 – Advanced Algorithms
This course focuses on advanced techniques in the design and analysis of algorithms and illustrates how they are used in deriving a variety of now-classic results. Topics include graph algorithms, randomized algorithms, parallel computing, linear programming and approximation algorithms. (Same as MATH 3260.)

Prerequisite: CMPS 2200 or permission of the instructor.

Information Theory

CMPS 3280 – 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. (Same as MATH 3280.)

Prerequisite: MATH 3050 or MATH 3090 and familiarity with discrete probability or permission of instructor.

Software Studio

CMPS 3300 – 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.

Prerequisite: CMPS 1600, CMPS 2200, or approval of the instructor

Logic in Computer Science

CMPS 3310 – 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.

Prerequisite: CMPS 2200 or equivalent and CMPS 2170 or equivalent, or permission of instructor.

Introduction to Computer Graphics

CMPS 3350 – 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.

Prerequisites: CMPS 1600. Prerequisite can be waived with permission of instructor.

Information and Scientific Visualization

CMPS 3360 – 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. (Same as MATH 3360.)

Prerequisites: CMPS 1600 or good programming skills (C and C++ are the preferred languages of the course). Prerequisite can be waived with permission of instructor.

Service Learning: CMPS 3300 (Software Studio)

CMPS 3890 – Service Learning: CMPS 3300 (Software Studio)
An optional service learning component is included in the Software Studio (CMPS 3300/6300) course. You will work with a real business or nonprofit organization and develop a website to help them in their work. This component provides a unique experience of communicating with a nontechnical customer, converting their requirements into technical specifications, working to meet those requirements, refining requirements as you go, experiencing real life associated technical challenges (such as environment incompatibility, difference in data formats, restricted access to data), preventing and resolving those challenges, and seeing your product come to life