Graduate Courses

521 Real Time Systems 

This course covers analysis techniques and development methodology for real- time systems. Topics include: real-time process and control, soft and hard real time systems, real-time scheduling algorithms, schedulability analysis theory, resource access control, real-time operating systems, real-time communications, performance analysis, requirement specification and system specification, verification of real-time systems, and formal development process of time critical real-time systems. Three credits. 

522 High Performance Computing 

This course is designed for graduate level parallel computing courses. This is not only a course which is linked to real parallel programming software, but also a course which covers many theoretical aspects on architectures, algorithms and applications. This course concentrates on parallel program to be executed not only on special multiprocessor systems or supercomputers, but also on networked workstations (Linux) or PCs using freely available parallel software tools such as Message Passing Interface (MPI) and Parallel Virtual Machine (PVM). Some emerging topics such as cluster computing, grid computing, cloud computing, peer- to-peer computing, as well as multicore systems will be introduced. Three credits. 

523 Software Engineering 

This course covers major concepts in software engineering. The fundamental characteristics of the software life cycle as well as tools and techniques for development and maintenance of large software systems will be presented. A major objective of this course is to give the student real-life software development experience. This objective is accomplished through the student’s participation on a team that will develop a single software product over the course of the term. Product development will follow the full software life cycle from requirements analysis through product delivery. The focus will be on an object-oriented development strategy. Three credits. 

524 Mobile Application Design/Development 

Mobile applications are software applications designed to run on mobile devices. The Android mobile platform has become one of the most popular platforms used by millions of devices around the world. This course introduces App development for the Android OS. The course covers the Android system, fundamental components of Android Apps, how to create user interfaces in Android, and how to create Android Apps that use databases, location, and networking, multimedia and/or other services. Three credits. 

526 Embedded Systems 

This course will study embedded programming with a focus on wireless sensor networks, and the state of the art in mobile communication research. Students are expected to present research papers from the recent literature, and to learn TinyOS programming with NesC and application development in MICA2 platform. Three credits. 

527 Big Data 

The emphasis of this course is to introduce big data technology. Course topics include reliable and big data storage, efficient big data processing and analytics, and important Spark APIs. Students will gain abilities to design highly scalable systems that can store, process, and analyze a big volume of unstructured and/or semi-structured data in batch mode and/or real time. Three credits. 

528 Advanced Data Analytics 

The course will introduce advanced algorithms for structured data analytics and their applications in real-world problems. Course topics include classification, cluster analysis, association analysis, and anomaly detection. Students will learn these algorithms with hands-on implementation and gain abilities to derive value from collected data by applying the advanced data analytics algorithms. Three credits. 

541 Theory of Computing 

This course focuses on three areas central to the theory of computation: automata, computability and complexity, to investigate the question: What are the fundamental capabilities and limitations of computers? We study automata (models of computation) e.g., finite state machines, pushdown automata and Turing machines and the languages recognized by them. We investigate complexity theory, to classify problems as easy or hard and computability theory to classify problems as solvable or not. Three credits. 

 542 Representation & Reasoning 

This course provides a survey of general methods for analyzing knowledge about the real world and mapping it to a computable form. Principles of knowledge representation and their role in adapting logic and ontology to the task of constructing computable models of an application domain are introduced. Methods for representing dynamically changing processes and events are presented. Ways of dealing with vague, uncertain, imprecise or inconsistent facts are discussed. Three credits.

543 Specification and Verification 

Topics covered include: introduction to formal methods; propositional and predicate logic; verification and model checking; Hoare-style program verification; modeling systems; specification using temporal (e.g., CTL, LTL), and other modal logics; various model checkers; partial order reduction; compositional reasoning and abstraction; automated theorem proving using tableau; problems/challenges to effective verification of large scale systems. Three credits. 

544 Computational Logic 

This course focuses on automated theorem proving. We start with a rigorous treatment of propositional and first order calculus (with equality) and the method of natural deduction, giving a thorough investigation of the soundness and completeness proofs and decidability. Then we compare and contrast several automated theorem proving methods such as tableau, resolution, sequent style calculus and rewrite systems. Extensions to other logics will be discussed. Students will implement one of the automated theorem proving methods. Three credits. 

545 Artificial Intelligence 

This course covers advanced core concepts in artificial intelligence (AI). Topics covered include intelligent agents, uninformed and informed (heuristic) search, logical and probabilistic knowledge representation, logical and probabilistic inference, essentials of machine learning, neural networks, reinforcement learning, and evolutionary computation. Project requires and in-depth study of a topic related to AI. Three credits. 

546 Biomedical Computation 

Technological development has transformed modern biomedical data analysis. The large amounts of biomedical data currently acquired has the potential to have real world positive impacts, however, the underlying nature of the data presents major challenges for computational biomedical analysis techniques. This course focuses on advanced technologies applied to biomedical computation, a rapidly growing eld with tremendous potential for having a bene cial impact on patient care and public health. Three credits. 

547 Evolutionary Computation 

Evolutionary computation is a family of powerful optimization algorithms often used to find solutions to computationally intractable problems. The study of these algorithms and their application to problems is a large research area within computer science. Course topics include combinatorial optimization, genetic algorithms, particle swarm optimization, search space analysis, multi-objective optimization, and neuroevolution. Research practices and technical writing will be emphasised for course assignments/projects. Three credits. 

550 Approximation Algorithms
Approximation algorithms are efficient algorithms that are guaranteed to compute solutions such that the value of the solution is provably close to the optimum. This course provides an introduction at the graduate level to the area of approximation algorithms, highlighting key algorithm design techniques for approximation algorithms and the complementary study of hardness of approximation for hard optimization problems. Three credits. Only available to graduate students, or permission of the chair.

554 Matrix Computation 

Through the use of lectures, discussions, the text, assignments, and labs, this course will familiarize students with the advanced knowledge of triangular systems, positive definite systems, banded systems, sparse positive definite systems, general systems; Sensitivity of linear systems; orthogonal matrices and least squares; singular value decomposition; eigenvalues and eigenvectors; and QR algorithm with their applications. Three credits. 

555 Data Mining and Machine Learning 

The course covers the most current techniques used in data mining and machine learning and their background theoretical results. Two basic groups of methods are covered in this course: supervised learning (classification or regression) and unsupervised learning (clustering). The supervised learning methods includes Recursive Partitioning Tree, Random Forest, Linear Discriminant and Quadratic Discriminant Analysis, Neural Network, Support Vector Machine. The unsupervised learning methods include Hierarchical Clustering, K-means, K-nearest-neighbour, model-based clustering methods. Furthermore, the course also covers the dimensional reduction techniques such as LASSO and Ridge Regression, and model checking criteria. Three credits. 

561 Computer and Network Security 

The objective of the course is to provide a broad overview of issues and approaches, while exposing students to recent advancements in computer and network security. This course will cover the theory and practice of computer and network security. While covering the theory of computer communication security, the course will focus on using and in some cases implementing various algorithms as well. Three credits. 

562 Computer Graphics 

Fundamental mathematical, algorithmic and representational issues in computer graphics. Graphics programming. Geometrical objects and transformations. 2-D and 3-D data description and manipulation. Viewing, Projections, Clipping, Shading, Animation. Three credits. 

563 Advanced Database Systems 

Explores advanced and evolving issues in database management systems. Topics include advanced database design and normalization, database implementations and optimizations, advanced and embedded SQL, ODBC and JDBC, XML, data warehousing, and emerging database trends. A major project is a key component of the course. Three credits. 

564 Constraint Processing and Heuristic Search 

The course will examine combinatorial problem solving and optimization with constraint processing and heuristic search methods for a variety of real world applications. It contains two main parts. The first part covers basic and advanced search techniques and the second part studies constraint processing techniques and constraint programming. Three credits. 

594 Computer Science Graduate Seminar 

This seminar course prepares graduates for industry or academia by developing knowledge and skills that will be applicable in a variety of professional contexts. Among these skills will be professional communication with industry and non- industry audiences, social and ethical issues in the field, grant and proposal writing, job search skills, research skills, and current innovations in research. The course is facilitated by computer science faculty members and includes presentations by invited experts. Pass/Fail. Six credits. 

595 Project 

The main objective of this course is to give the student real-life software development experience. The student will work with an industry or academic partner and develop a computing solution to a real-world problem. The student will be responsible to manage the project from development to execution. The student will gain practical experience on methods, languages, and tools in software design and development. Six credits. 

598 Research 

Six credits. 

599 Thesis 

Eighteen credits.