The techniques of algorithm design form one of the core practical technologies of computer science. This course focuses on advanced techniques for designing and analysing algorithms, and explores their use in a variety of application areas. Topics include: sorting and search algorithms, graph traversal algorithms, combinatorial search, heuristics methods, and dynamic programming, intractable problems. Students learn the skill of recognizing computational complexities of computing problems and designing solutions for them.
This seminar focuses on the fundamentals of technology entrepreneurship. It involves taking a technology idea and finding a high-potential commercial opportunity, gathering resources such as talent and capital, figuring out how to sell and market the idea, and managing rapid growth. It also involves bringing incorporating a new technology idea into an existing business. There will be guest lecturers from the industry.
Data analysis is a burgeoning field that allows organizations to discover patterns in data to help explain current behaviours or predict future outcomes. In this course, students learn the theories, techniques and practices involved in modern data analysis in order to effectively collect, process, interpret and use data in decision making. The course utilizes case studies from fields such as finance and statistics to expose students to topics including data collection, storage, processing, representation, and reporting, and also further develop their decision-making skills using decision trees and artificial intelligence.
Parallel computing is ubiquitous today for problems which require more resources than a single serial computer can provide. Programming parallel computers requires new paradigms,algorithms and programming tools.This course covers fundamentals of parallel programming, illustrated with applications developed and tested by students on a parallel computing system provided for the course. The parallel programming paradigms to be covered include OpenMP for multicore shared memory computers, MPI for distributed memory parallel computers, CUDA programming for GPUs (Graphic Processing Units), and Apache Hadoop/Spark for big data processing on computer clusters. The course will focus on the challenges in developing practical parallel programs that scale efficiently with available computing resources.
Machine learning is the science of getting computers to act without being explicitly programmed. In the past decade, machine learning has given us self-driving cars, practical speech recognition, effective web search, and a vastly improved understanding of the human genome. This course focuses on machine learning, data mining, and statistical pattern recognition. Topics include supervised learning (parametric/non-parametric algorithms, support vector machines, kernels, neural networks) and unsupervised learning (clustering, dimensionality reduction, recommender systems, deep learning). Students work with variety of learning algorithms and evaluate which are most likely to be successful.
Apple iPhones are one of the most popular smartphones on the market today, with thousands of applications downloaded every day. This course provides students with the knowledge to develop applications for iPhones, iPads, and iPods, using the Cocoa Touch framework on iOS and introducing students to the programming language Swift. More specifically, students learn how to develop interfaces for mobile devices and the challenges faced when developing applications that use different input modalities. Other topics include web services and memory management for mobile devices.
As the worldwide smartphone market continues to grow, so does the demand for mobile applications. This course provides students with the skills for creating and deploying applications for mobile devices using Android, the most widely used operating system. With an emphasis on the Model-View-Controller paradigm this course provides students with the foundational knowledge that underlies many popular programming languages. The course cumulates with the development of an original Android application. Knowledge of Java is required.
This course focuses on both the principles and practice in computer security. It provides an introduction to fundamental principles of computer systems and network security. It also covers the best practices of computer systems and network security protection and defense. The roadmap for the course includes seven main sections, including security objectives, vulnerabilities, attacks and exploitation, wireless security, web application security, defense and countermeasures, and incident handling and forensic investigation. Specifically, it first covers security objectives such as confidentiality, data integrity, authentication, authorization, access control, availability, and non-repudiation. Also, it covers the fundamental theories of vulnerabilities in software, computer system, network protocols, cryptographic techniques and social engineering. It then covers various security protection and defense mechanisms, including major security protocols and standards, firewalls, intrusion detection, wireless security, and web application security. It also discusses the latest cutting-edge insidious attack vectors, and the patterns of denial-of-service attacks. This course also presents the understanding tools needed to defend against attackers maintaining access and covering their tracks. This course examines and reviews various types of hacking tools as well as ways to harden the system or application against these attacks.
Alexei Kaltchenko, Graduate Officer
We see you are accessing our website on IE8. We recommend you view in Chrome, Safari, Firefox or IE9+ instead.×