# CMPUT - Computing Science

Offered By:

Faculty of Science

Below are the courses available from the CMPUT code. Select a course to view the available classes, additional class notes, and class times.

**★ 3 (fi 6)(EITHER, 3-0-3)**

An introduction to fundamental concepts in computation, including state, abstraction, generalization, and representation. Introduction to algorithms, logic, number systems, circuits, and other topics in elementary computing science. This course cannot be taken for credit if credit has been obtained in CMPUT 114, 174, 274, or SCI 100. See Note (1) above.

**★ 3 (fi 6)(EITHER, 3-0-3)**

CMPUT 174 and 175 use a problem-driven approach to introduce the fundamental ideas of Computing Science. Emphasis is on the underlying process behind the solution, independent of programming language or style. Basic notions of state, control flow, data structures, recursion, modularization, and testing are introduced through solving simple problems in a variety of domains such as text analysis, map navigation, game search, simulation, and cryptography. Students learn to program by reading and modifying existing programs as well as writing new ones. No prior programming experience is necessary. Prerequisite: Math 30, 30-1, or 30- 2. See Note (1) above. Credit cannot be obtained for CMPUT 174 if credit has already been obtained for CMPUT 274 or 275, except with permission of the Department.

**★ 3 (fi 6)(EITHER, 3-0-3)**

A continuation of CMPUT 174, revisiting topics of greater depth and complexity. More sophisticated notions such as objects, functional programming, and Abstract Data Types are explored. Various algorithms, including popular searching and sorting algorithms, are studied and compared in terms of time and space efficiency. Upon completion of this two course sequence, students from any discipline should be able to build programs to solve basic problems in their area, and will be prepared to take more advanced Computing Science courses. Prerequisite: CMPUT 174 or SCI 100. Credit cannot be obtained for CMPUT 175 if one already has credit for CMPUT 275, except with permission of the Department.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to data acquisition, basic data manipulation (cleaning, outlier detection), analysis (regression, clustering, classification), basic statistics and machine learning tools, information visualization to communicate information from data. Prerequisite: Math 30-1. This course cannot be taken for credit if credit has been obtained in CMPUT 174, 195, or 274.

**★ 3 (fi 6)(EITHER, 3-0-3)**

This course introduces data science to students with prior computing experience. It covers the basics of data acquisition, manipulation, transformation, and cleaning, as well as data analysis (e.g., regression, clustering, classification) and visualization. Students learn principles and techniques of efficient data-driven communication and decision-making in various domains using industry-standard tools. Credit cannot be obtained for both CMPUT 191 and CMPUT 195. Prerequisite: CMPUT 174 or 274, or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

This course focuses on ethics issues in Artificial Intelligence (AI) and Data Science (DS). The main themes are privacy, fairness/bias, and explainability in DS. The objectives are to learn how to identify and measure these aspects in outputs of algorithms, and how to build algorithms that correct for these issues. The course will follow a case-studies based approach, where we will examine these aspects by considering real-world case studies for each of these ethics issues. The concepts will be introduced through a humanities perspective by using case studies with an emphasis on a technical treatment including implementation work. Prerequisite: one of CMPUT 191 or CMPUT 195, or one of CMPUT 174 or CMPUT 274 and one of STAT 141, STAT 151, STAT 235, STAT 265, SCI 151, MATH 181, or CMPUT 267, or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to the principles, methods, tools, and practices of the professional programmer. The lectures focus on the fundamental principles of software engineering based on abstract data types and their implementations. The laboratories offer an intensive apprenticeship to the aspiring software developer. Students use C and software development tools of the Unix environment. Prerequisite: CMPUT 175. Credit cannot be obtained for CMPUT 201 if credit has been obtained for CMPUT 275, except with permission of the Department.

**★ 3 (fi 6)(EITHER, 3-1S-0)**

The first of two courses on algorithm design and analysis, with emphasis on fundamentals of searching, sorting, and graph algorithms. Examples include divide and conquer, dynamic programming, greedy methods, backtracking, and local search methods, together with analysis techniques to estimate program efficiency. Prerequisites: CMPUT 175 or 275 and CMPUT 272; one of MATH 100, 113, 114, 117, 134, 144, 154, or SCI 100.

**★ 3 (fi 6)(EITHER, 3-0-3)**

An introduction to basic digital image processing theory, and the tools that make advanced image manipulation possible for ordinary users. Image processing is important in many applications: editing and processing photographs, special effects for movies, drawing animated characters starting with photographs, analyzing and enhancing remote imagery, and detecting suspects from surveillance cameras. Image processing concepts are introduced using tools like Photoshop and GIMP. Exposure to simple image processing programming with Java and MATLAB. This course is preparation for more advanced courses in the Digital Media area. Prerequisites: Any introductory-level Computing Science course, plus knowledge of introductory-level MATH and STAT; or consent of the instructor or SCI 100. Open to students in the Faculty of Arts, Engineering and Sciences; others require consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

An historical introduction to cryptography intended for a general audience. The development of codes and code-breaking from military espionage in ancient Greece to deciphering hieroglyphics via the Rosetta stone to modern computer ciphers. Includes frequency analysis, one-time-pad security, and public key cryptography. Prerequisite: Any 100-level course.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Number representation, computer architecture and organization, instruction-set architecture, assembly-level programming, procedures, stack frames, memory access through pointers, exception handling, computer arithmetic, floating-point representation, datapath, control logic, pipelining, memory hierarchy, virtual memory. Prerequisite: CMPUT 201 or 275. Credit may be obtained in only one of CMPUT 229, E E 380 or ECE 212.

**★ 3 (fi 6)(EITHER, 3-0-3)**

An interdisciplinary course for students in Science, Arts, and other faculties. The focus is on games as interactive entertainment, their role in society, and how they are made. Teams composed of students with diverse backgrounds (e.g. English, Art and Design, and Computing Science) follow the entire creative process: from concept, through pitch, to delivery, of a short narrative-based game using a commercial game engine. To achieve the required mix of backgrounds and experience, students must apply to be considered for this course. See the Department web site for the online form. Prerequisite: Second-year standing.

**★ 3 (fi 6)(EITHER, 3-0-3)**

The purpose of this course is for students to gain a breadth of understanding of the AI approaches employed in digital games. This involves learning basic topics covered in other AI courses as they apply to digital games and more specialized game AI topics. Assignments will involve programming Game AI algorithms across a variety of areas including pathfinding, decision making, and data science. Prerequisite: CMPUT 174 or 274.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to artificial intelligence focusing on techniques for building intelligent software systems and agents. Topics include search and problem-solving techniques, knowledge representation and reasoning, reasoning and acting under uncertainty, machine learning and neural networks. Prerequisites: one of STAT 141, 151, 235, or 265, or SCI 151. Corequisites: CMPUT 204 or 275. Credit cannot be obtained for CMPUT 261 if credit has already been obtained for CMPUT 366, except with permission of the Department.

**★ 3 (fi 6)(EITHER, 3-0-0)**

This course introduces the fundamental statistical, mathematical, and computational concepts in analyzing data. The goal for this introductory course is to provide a solid foundation in the mathematics of machine learning, in preparation for more advanced machine learning concepts. The course focuses on univariate models, to simplify some of the mathematics and emphasize some of the underlying concepts in machine learning, including: how should one think about data, how can data be summarized, how models can be estimated from data, what sound estimation principles look like, how generalization is achieved, and how to evaluate the performance of learned models. Prerequisites: CMPUT 174 or 274; one of MATH 100, 114, 117, 134, 144, or 154. Corequisites: CMPUT 175 or 275; CMPUT 272; MATH 125 or 127; one of STAT 141, 151, 235, or 265, or SCI 151.

**★ 3 (fi 6)(EITHER, 3-3S-0)**

An introduction to the tools of set theory, logic, and induction, and their use in the practice of reasoning about algorithms and programs. Basic set theory; the notion of a function; counting; propositional and predicate logic and their proof systems; inductive definitions and proofs by induction; program specification and correctness. Prerequisites: CMPUT 101, 174, 175, 274, or SCI 100.

**★ 3 (fi 6)(EITHER, 0-6L-0)**

This is part 1 of a 2 sequence intensive problem-based introduction to Computing Science. In part 1, the key concepts of procedural programming, basic algorithm design and analysis (lists, queues, trees, sorting, searching) are learned by solving a series of problems using Python. Development is done using the Linux operating system. Prerequisites: Math 30 or 31. Note: this course is taught in studio-style, where lectures and labs are blended into 3 hour sessions, twice a week. Enrollment is limited by the capacity of the combined lecture/lab facilities. Credit cannot be obtained for CMPUT 274 if one already has credit for any of CMPUT 174, 175, or 201, except with permission of the Department.

**★ 3 (fi 6)(EITHER, 0-6L-0)**

This is part 2 of a 2 sequence intensive introduction to Computing Science. Part 2 expands to add object-oriented programming, with C++, and more complex algorithms and data structures such as shortest paths in graphs; divide and conquer and dynamic programming; client-server style computing; and recursion. Prerequisite: CMPUT 274. Note: this course is taught in studio-style, where lectures and labs are blended into 3 hour sessions, twice a week. Enrollment is limited by the capacity of the combined lecture/lab facilities. Credit cannot be obtained for CMPUT 275 if one already has credit for any of CMPUT 174, 175, or 201, except with permission of the Department.

**★ 3 (fi 6)(EITHER, 3-0-1.5)**

Basic concepts in computer data organization and information processing; entity-relationship model; relational model; SQL and other relational query languages; storage architecture; physical organization of data; access methods for relational data. Programming experience (e.g., Python) is required for the course project. Prerequisites: CMPUT 175 or 274, and 272. Corequisite: one of CMPUT 201 or 275.

**★ 3 (fi 6)(VAR, VARIABLE)**

This topics course is designed for new course offerings that may be offered in a given term. Prerequisites are determined by the instructor in the course outline. See Note (3) above.

**★ 1.5 (fi 6)(VAR, VARIABLE)**

This topics course is designed for new course offerings that may be offered in a given term. Prerequisites are determined by the instructor in the course outline. See Note (3) above.

**★ 1.5 (fi 6)(VAR, VARIABLE)**

This topics course is designed for new course offerings that may be offered in a given term. Prerequisites are determined by the instructor in the course outline. See Note (3) above.

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

This topics course is designed for a one on one individual study course between a student and an instructor. Prerequisites are determined by the instructor in the course outline. See Note (3) above.

**★ 1.5 (fi 6)(VAR, VARIABLE)**

This topics course is designed for a one on one individual study course between a student and an instructor. Prerequisites are determined by the instructor in the course outline. See Note (3) above.

**★ 1.5 (fi 6)(VAR, VARIABLE)**

This topics course is designed for a one on one individual study course between a student and an instructor. Prerequisites are determined by the instructor in the course outline. See Note (3) above.

**★ 3 (fi 6)(EITHER, 3-1S-0)**

Social, ethical, professional, economic, and legal issues in the development and deployment of computer technology in society. Prerequisites: Any introductory-level Computing Science course or SCI 100, and any 200-level course.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Object-oriented design and analysis, with interactive applications as the primary example. Topics include: software process; revision control; Unified Modeling Language (UML); requirements; software architecture, design patterns, frameworks, design guidelines; unit testing; refactoring; software tools. Prerequisite: CMPUT 201 or 275. This course may not be taken for credit if credit has been obtained in MIS 419 or BTM 419.

**★ 3 (fi 6)(EITHER, 3-0-3)**

A complementary course to introductory software engineering focused on a user-centered approach to software design. The main themes are how humans interact with physical and information environments, and how to design software with human's information needs and their cognitive capacities in mind. Topics include the user-centered design cycle, and evaluation methods for discovering usability problems in interface design. Prerequisite: CMPUT 301.

**★ 3 (fi 6)(EITHER, 3-0-0)**

This course is focused on algorithmic problems, where a solution involves properly understanding a written description, designing an efficient algorithm to solve the problem, and then correctly implementing the solution. Students will use previous knowledge in algorithms, data structures, and mathematical reasoning to solve problems in addition to learning new algorithms and data structures. Lectures are shared with CMPUT 403. Credit cannot be obtained for both CMPUT 303 and CMPUT 403. Prerequisites: One of CMPUT 201 or CMPUT 275, CMPUT 204.

**★ 3 (fi 6)(EITHER, 3-1S-0)**

The second course of a two-course sequence on algorithm design. Emphasis on principles of algorithm design. Categories of algorithms such as divide-and-conquer, greedy algorithms, dynamic programming; analysis of algorithms; limits of algorithm design; NP-completeness; heuristic algorithms. Prerequisites: CMPUT 204; one of STAT 141, 151, 235 or 265 or SCI 151; one of MATH 225, 227, 228; or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

An introductory course on the theory and applications of computer based 3D modeling and animation. The course will cover a selection of topics from overview of tools supporting modeling and animation, automatically generating 3D models, and animation of skeleton based models through algorithms and software. Applications of 3D modeling and animation in games, virtual/augmented environments, movies, and emerging video transmission algorithms will be discussed. Prerequisites: one of CMPUT 206, 308, or 411; or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

An introductory course in video data processing, with implementations in programming languages, like Python, C and MATLAB, using libraries like OpenCV. Topics in this course may include video capture, video compression, tracking, video content understanding, real-time video conferencing and surveillance. Time permitting, advanced topics like video mining, 3D modeling, and motion capture-based video coding, video-based 3D scene understanding could be discussed. Prerequisites: CMPUT 201, 206, MATH 125 or 127, STAT 151 or 265, or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Algorithms and software paradigms for robot programming; mathematical modeling of robot arms and rovers including kinematics, and an introduction to dynamics and control; sensors, motors and their modeling; basics of image processing and machine vision; vision-guided motion control. Prerequisite: CMPUT 275. Corequisite: CMPUT 340 or 418, or ECE 240. Students having CMPUT 174, 175, 201, 204 may seek consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to computer communication networks; protocols for error and flow control; wired and wireless medium access protocols; routing and congestion control; internet architecture and protocols; multimedia transmission; recent advances in networking. Prerequisites: CMPUT 201 and 204 or 275; one of CMPUT 229, E E 380 or ECE 212; and STAT 252 or 266.

**★ 3 (fi 6)(EITHER, 3-0-3)**

A study of the theory, run-time structure, and implementation of selected non-procedural programming languages. Languages will be selected from the domains of functional, and logic-based languages. Prerequisites: CMPUT 201 and 204 or 275; one of CMPUT 229, E E 380 or ECE 212, and MATH 125.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to visual recognition to recognize objects and classify scenes or images automatically by a computer. Supervised and unsupervised machine learning principles and deep learning techniques will be utilized for visual recognition. Successful commercial systems based on visual recognition range from entertainment to serious scientific research: face detection and recognition on personal devices, social media. Prerequisites: CMPUT 115 or 175; one of MATH 100, 113, 114, 117, 134, 144, 154; MATH 125; STAT 141, 151 or 235.

**★ 3 (fi 6)(EITHER, 3-0-3)**

CMOS technology, digital circuits, combinational logic, sequential logic, memory technologies, programmable logic devices, control logic design, register transfer logic, CPU design, hardware description languages. Prerequisite: one of CMPUT 229, E E 380 or ECE 212. Credit may be obtained in only one of CMPUT 329, E E 280 or ECE 210.

**★ 3 (fi 6)(EITHER, 3-0-0)**

Cryptography is the science of secure communications. This course is an introduction to computational methods for encrypting and deciphering messages, with an emphasis on computer implementation. Prerequisites: CMPUT 201 or 275, and CMPUT 272.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to the concepts and components involved in secure, networked, systems. The concepts of confidentiality, integrity, availability; shared and public key cryptography; authentication protocols; third-party authentication services; key agreement protocols; strong password protocols; digital signature schemes; non-repudiation; certificate authorities; random number generation; proof-of-work; network protocol and network services vulnerabilities; firewalls; malicious code; computer viruses and worms; intrusion detection. Prerequisite: CMPUT 201 or 275.

**★ 3 (fi 6)(EITHER, 3-1S-3)**

Computer arithmetic and errors. The study of computational methods for solving problems in linear algebra, non-linear equations, optimization, interpolation and approximation, and integration. This course will provide a basic foundation in numerical methods that supports further study in machine learning; computer graphics, vision and multimedia; robotics; and other topics in Science and Engineering. Prerequisites: CMPUT 204 or 275; MATH 125, 214; one of STAT 141, 151, 235 or 265 or SCI 151.

**★ 3 (fi 6)(EITHER, 3-0-3)**

This course focuses on state-of-the-art AI and graphics programming for video games. Part 1 introduces C++, the language of choice for video game engines, emphasizing efficiency, safety, the Standard Template Library, and OpenGL. Part 2 on real time strategy deals with efficient pathfinding algorithms, planning, and scripting AI systems. Student projects give hands-on experience directly applicable to the video games industry. Prerequisites: CMPUT 201 or 275, and 204.

**★ 3 (fi 6)(EITHER, 3-0-0)**

An introduction to algorithms and theory behind computer programs that solve puzzles (mazes, peg solitaire, etc.) or play games (chess, Go, Hex, etc.). This course is intended for a general audience. Prerequisite: any 200-level Computing Science course.

**★ 3 (fi 6)(EITHER, 3-0-0)**

Introduction to information retrieval focusing on algorithms and data structures for organizing and searching through large collections of documents, and techniques for evaluating the quality of search results. Topics include boolean retrieval, keyword and phrase queries, ranking, index optimization, practical machine-learning algorithms for text, and optimizations used by Web search engines. Prerequisites: CMPUT 201 and CMPUT 204, or 275. One of MATH 102, 125, or 127 is strongly recommended.

**★ 3 (fi 6)(EITHER, 3-0-0)**

This course provides an introduction to reinforcement learning, which focuses on the study and design of learning agents that interact with a complex, uncertain world to achieve a goal. The course will cover multi- armed bandits, Markov decision processes, reinforcement learning, planning, and function approximation (online supervised learning). The course will take an information-processing approach to the study of intelligence and briefly touch on perspectives from psychology, neuroscience, and philosophy. The course will use the University of Alberta MOOC on Reinforcement Learning. Any student who understands the material in this course will understand the foundations of much of modern probabilistic artificial intelligence (AI) and be prepared to take more advanced courses, or to apply AI tools and ideas to real-world problems. Prerequisites: CMPUT 175 or 275; one of CMPUT 267, 466, or STAT 265; or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

This course provides an introduction to search and planning in artificial intelligence. The course covers deterministic single-agent and multi-agent problems. Students will learn how to model real-world problems as state-space search problems and how to solve such problems. The course covers algorithms for solving deterministic shortest path problems with factored and non-factored states, combinatorial optimization problems, constraint satisfaction problems, and multi- agent problems. Prerequisites: CMPUT 204 or 275, and CMPUT 272.

**★ 3 (fi 6)(EITHER, 3-0-0)**

This course in machine learning focuses on higher-dimensional data and a broader class of nonlinear function approximation approaches. Topics include: optimization approaches (constrained optimization, hessians, matrix solutions), kernel machines, neural networks, dimensionality reduction, latent variables, feature selection, more advanced methods for assessing generalization (cross-validation, bootstrapping), introduction to non-iid data and missing data. Credit cannot be obtained for both CMPUT 367 and CMPUT 466. Prerequisites: CMPUT 204 and 267; one of MATH 115, 118, 136, 146, or 156.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to the structure, components, and concepts behind modern general-purpose operating systems. Processes: process state transitions; operations on processes; interrupt processing; multiprocessor considerations; resource allocation; synchronization; critical sections and events; semaphores; deadlock: avoidance, detection, and recovery; memory management; virtual memory; paging and segmentation; page replacement strategies; working sets; demand paging; process scheduling; scheduling algorithms; file system functions; file organization; space allocation; virtual machines. Prerequisites: CMPUT 201 and 204, or 275; one of CMPUT 229, E E 380 or ECE 212.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Graphics processing units (GPU) can be programmed like a coprocessor to solve non-graphics problems, including voice recognition, computational physics, convolutional neural networks, and machine learning. The many processing cores of a GPU support a high-degree of parallelism. Course topics include hardware architecture, algorithmic design, programming languages (e.g., CUDA, OpenCL), and principles of programming for GPUs for high performance. Prerequisites: CMPUT 201 or 275, and CMPUT 229.

**★ 3 (fi 6)(EITHER, 3-0-3)**

This course covers the implementation of RDBMSs and some non- relational data models, along with their query languages. Topics: compilation, execution, and optimization of SQL queries; concurrent execution of transactions; indexing; advanced constructs in SQL; semi-structured data models and query languages; distributed and parallel databases; NoSQL and cloud-based database systems. Prerequisites: CMPUT 201 and 204, or 275; and CMPUT 291.

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(EITHER, 3-1S-3)**

All phases of software development are reviewed from a process perspective. Best practices in software project and product development and management are introduced. Architectural and technological impacts on management. Group projects require specification and initial design or redesign of a software system. Prerequisite: CMPUT 301.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Software quality issues are covered. Various types of software testing, ranging from unit testing to integration testing are discussed. Processes to ensure quality, such as reviews and continuous integration, are introduced. State-of-the-art software quality tools that analyze different artifacts within the software lifecycle are described. Prerequisite: CMPUT 301.

**★ 3 (fi 6)(EITHER, 3-1S-0)**

This course is focused on algorithmic problems that can be solved within at most several hours by well-prepared people, where a solution involves properly understanding a written description, designing an efficient algorithm to solve the problem, and then correctly implementing the solution. Students will use algorithms, data structures, and mathematical reasoning to solve problems. Lectures are shared with CMPUT 303. CMPUT 403 covers additional material relevant to advanced programming contests. Credit cannot be obtained for both CMPUT 303 and CMPUT 403. Prerequisites: One of CMPUT 201 or CMPUT 275, CMPUT 204, and any 300-level Computing Science course, or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to modern web architecture, from user-facing applications to machine-facing web-services. Topics include: the evolution of the Internet, relevant technologies and protocols, the architecture of modern web-based information systems, web data exchange and serialization, and service-oriented middleware. Prerequisites: CMPUT 301 and 291, or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

2D and 3D transformation; 3D modeling and viewing; illumination models and shading methods; texture mapping; ray tracing. Prerequisites: CMPUT 204 or 275, 301; one of CMPUT 340, 418 or equivalent knowledge, and MATH 214.

**★ 3 (fi 6)(EITHER, 3-0-3)**

A project-based course dealing with the design and implementation of mobile robots to accomplish specific tasks. Students work in groups and are introduced to concepts in sensor technologies, sensor data processing, motion control based on feedback and real-time programming. Prerequisites: CMPUT 201 and 204, or 275; one of CMPUT 340, 418 or equivalent knowledge; MATH 214.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to basic principles and algorithms used in multimedia systems. Students obtain hands-on experience in issues relating to multimedia data representation, compression, processing, and animation. Topics will be selected from image and video coding and transmission, animation, human perceptual issues associated to multimedia technologies. Prerequisites: one of CMPUT 306, CMPUT 307 or CMPUT 411, or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Compilers, interpreters, lexical analysis, syntax analysis, syntax- directed translation, symbol tables, type checking, flow analysis, code generation, code optimization. Prerequisites: one of CMPUT 229, E E 380 or ECE 212, and a 300-level Computing Science course or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-0)**

Introduction to the main concepts of program analysis such as intermediate representations, inter-procedural and intra-procedural analysis techniques, call graphs, pointer analysis, and analysis frameworks. The course will also include relevant research papers that introduce both classical and state-of-the-art research in the field. The course will give an overview of the program analyses that work and those that do not work in practice and how to design program analyses for modern software systems. Prerequisites: CMPUT 201 or 275, and CMPUT 272. Knowledge of grammars and automata, regular expressions, and finite state machines is recommended.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Introduction to the geometry and photometry of the 3D to 2D image formation process for the purpose of computing scene properties from camera images. Computing and analyzing motion in image sequences. Recognition of objects (what) and spatial relationships (where) from images and tracking of these in video sequences. Prerequisites: CMPUT 201 or 275; one of CMPUT 340, 418, ECE 240, or equivalent knowledge; one of MATH 101, 115, 118, 136, 146 or 156, and one of MATH 102, 125, or 127.

**★ 3 (fi 6)(EITHER, 3-0-3)**

A discussion of computer system design concepts with stress on modern ideas that have shaped the high-performance architecture of contemporary systems. Instruction sets, pipelining, instruction-level parallelism, register reuse, branch prediction, CPU control, cache- coherence, accelerators, and related concepts. Memory technologies, caches, I/O, high-performance networks. Prerequisites: CMPUT 201 or 275; one of CMPUT 229, E E 380 or ECE 212. Credit may be obtained in only one of CMPUT 429 or CMPE 382.

**★ 3 (fi 6)(EITHER, 3-0-0)**

When making decisions in games, computers rely on three main ideas: search, knowledge and simulations. Knowledge can be created by machine learning techniques and encoded in deep neural networks. Search and simulations help to understand the short and long-term consequences of possible actions. This course leads from basic concepts to state-of-the-art decision-making algorithms. Prerequisite: any 300-level Computing Science course.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Natural language processing (NLP) is a subfield of artificial intelligence concerned with the interactions between computers and human languages. This course is an introduction to NLP, with the emphasis on writing programs to process and analyze texts, covering both foundational aspects and applications of NLP. The course aims at a balance between classical and statistical methods for NLP, including methods based on machine learning. Prerequisites: 201 or 275, and any 300-level Computing Science course.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Probabilistic graphical models (PGMs; including Bayesian Belief Nets, Markov Random Fields, etc.) now contribute significantly to many areas, including expert systems, computer perception (vision and speech), natural language interpretation, automated decision making, and robotics. This course provides an introduction to this field, describing semantics, inference and learning, as well as practical applications of these systems. Programming assignments will include hands-on experiments with various reasoning systems. Prerequisites: one of CMPUT 340 or 418; one of STAT 141, 151, 235 or 265 or SCI 151; or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Learning is essential for many real-world tasks, including recognition, diagnosis, forecasting and data-mining. This course covers a variety of learning scenarios (supervised, unsupervised and partially supervised), as well as foundational methods for regression, classification, dimensionality reduction and modeling. Techniques such as kernels, optimization and probabilistic graphical models will typically be introduced. It will also provide the formal foundations for understanding when learning is possible and practical. Credit cannot be obtained for both CMPUT 367 and CMPUT 466. Prerequisites: CMPUT 204 or 275; MATH 125; CMPUT 267 or MATH 214; or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-3)**

Students will experience the challenges, and rewards, of working in a team to address a real-world task, related to artificial intelligence or machine learning. This will involve first identifying the task itself, then iteratively addressing relevant issues (typically with feedback from a domain expert), leading to an implementation and culminating in evaluating that system. Students will also learn about best practices in organizing team projects, as well as important information about effective communication. Prerequisites: CMPUT 267, 365, and 366.

**★ 3 (fi 6)(EITHER, 3-0-0)**

Formal grammars; relationship between grammars and automata; regular expressions; finite state machines; pushdown automata; Turing machines; computability; the halting problem; time and space complexity. Prerequisites: CMPUT 204, one of CMPUT 229, E E 380 or ECE 212 and one of MATH 225, 227, or 228 or consent of the instructor.

**★ 3 (fi 6)(EITHER, 3-0-0)**

This course provides an undergraduate-level introduction to parallel programming, parallel and distributed systems, and high-performance computing in science and engineering. Both shared-memory parallel computers and distributed-memory multi computers (e.g., clusters) will be studied. Aspects of the practice of, and (some) research issues in, parallelism will be covered. There will be an emphasis on thread programming, data-parallel programming, and performance evaluation. Prerequisite: CMPUT 379, or consent of the instructor.

**★ 0.1 (fi 1)(EITHER, 0-1S-0)**

This weekly seminar brings students, researchers, and practitioners together to examine a variety of topics, both foundational and leading edge. Content varies over successive offerings of the course. Required of all Honors Computing Science students during each Fall/Winter semester of their degree program. Prerequisite: Restricted to Honors Computing Science students, or consent of the instructor.

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 1.5 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(VAR, VARIABLE)**

**★ 3 (fi 6)(FIRST, 3-0-0)**

This course provides information and resources on teaching and research methods in computing science, and also gives an overview of the research done by faculty in the department. Ethics and professional development are included in this course. Required for all graduate students.

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 3 (fi 6)(EITHER, 3-0-0)**

**★ 6 (fi 12)(VAR, 0-6S-0)**

A major essay on an agreed topic.

**★ 3 (fi 12)(VAR, 0-6S-0)**

A major essay on an agreed topic.

**★ 3 (fi 12)(VAR, 0-6S-0)**

A major essay on an agreed topic.