Undergraduate Course Detail

CENG2010
Digital Logic Design Laboratory
This course aims at providing an intensive handson introduction to digital system design using a hardware description language (e.g. VHDL). Students will learn how to design, simulate and debug digital systems through lab exercises. Topics include the basic language syntax, signals/variables/constants declaration, data types, basic operators, concurrent and sequential statements, and structural modelings.

CENG2400/ESTR2100
Embedded System Design
This course introduces the techniques for building embedded systems such as the use of microprocessors, interfacing memory systems and timing control of digital signals. It also discusses peripheral input/output interfacing methods such as: timer, serial and parallel interfaces, analogtodigital conversion, polling, interrupt and device driver developments. Assembly language programming will also be introduced: concepts of addressing modes, data manipulation, control flow instructions, programme linkage and relation to high level languages.

CENG3150
Principles of System Software
Virtual machines. System supports for programme execution: microkernels, interrupts and synchronizations, interprocess communications, memory management, protection, portability, fault tolerance techniques and device drivers. Multiprocessor system support.

CENG3410
Smart Hardware Design
This is a handson projectbased course that introduces the devices, system architecture, communication protocol and design methodology needed for the design and construction of smart hardware systems. With the advent of affordable sensors and Internet of Things (IoT), smart hardware systems such as all sorts of wearable devices and smart home appliances are expected to significantly improve people’s living style and enhance work efficiency. Students in this course will work in groups to develop small smart hardware systems, prototype their designs and testing them.

CENG3420
Computer Organization and Design
This course introduces the organization and design of modem computer systems. The scope includes instruction set architecture, performance evaluation, design of arithmetic logic units, datapath and control, pipelining, memory hierarchy, interfacing processors and peripherals, and multicore processors.

CENG3430/ESTR3100
Rapid Prototyping of Digital Systems
This course introduces digital prototyping techniques such as the use of a hardware description language for hardware system development, and the methods for interfacing field programmable devices to memory systems and microprocessors. Techniques to build reliable digital systems in the presence of power supply variation, high frequency effects, transmission line effects and noise are also discussed.

CENG3470
Digital Circuits
This course examines the issues involved in designing and analysing digital circuits in CMOS technology. Topics include fabrication process, usage of SPICE, transfer characteristics, noise margin, loading effect, propagation delay, fanout analysis, transient current, power dissipation, bistable circuits and memories. A brief introduction to VLSI circuits is also included.

CENG3490
VLSI Design
This course teaches techniques in designing and analysing VLSI circuits. Topics include design rules, layout fundamentals, switchlevel simulation, charge sharing, static and dynamic logics, propagationdelay estimates, power considerations, datapath organization, clocking schemes, synchronizers, asynchronous circuits, pads, systolic computation, silicon compiler, highlevel synthesis and hardware description languages. Students will design complete IC's using both simple handlayout programmes and CAD tools.

CENG4100
Smartphones: Hardware Platform and Application Development
This course teaches the hardware platform and software development of smartphones. The scope includes: (i). Hardware architecture of smartphones, including their key components such as mobile processor, touch screen, graphics, battery, and various sensors; (ii). Application development on smartphones; (iii) Lowpower hardware/software design techniques.

CENG4120
Computeraided Design for Very Large Scale Integrated Circuits
This course aims at providing students basic knowledge and background on VLSI CAD. The course will cover various topics on automation across the design of a VLSI circuit including but not limited to, Boolean matching, logic optimization, chip planning, placement, routing, interconnect optimization, testing and manufacturing. Students will learn to use some EDA tools and also develop some algorithms to solve EDA problems.

CENG4480
Embedded System Development and Applications
This course aims at enhancing students¡¦ skills in developing embedded systems. Advanced techniques in the use of realtime operating systems, interfacing, integration and applications of sensors and actuators for signal analysis and control will be discussed. Project development methods and management skills will be introduced.
 CENG4998 Final Year Project I
 CENG4999 Final Year Project II

CENG5030
Energy Efficient Computing
Low power consumption is an important design concern in modern computing systems. It has direct impact on the battery life of mobile electronic equipment and on the operating speed of computing devices. This course aims at introducing students the basic concepts and modern techniques in designing, modeling and evaluating energyefficient computing systems. This course will study techniques to improve energy consumption at various design levels will also study representative research papers to introduce the state of the art approaches to energy efficient computing.
Prerequisite: ENGG2020 or ESTR2104 or CENG3420 
CENG5050
Hardware for Human Machine Interface
This course teaches topics in designing hardware for human machine interface. Principles and applications of sensors like pressure, light, sound, motion and electromagnetic transducers are introduced. Computer interfacing techniques for signal sampling, amplification, filtering, classification and interpretation are also discussed. Design examples may include Electroencephalography (EEG) signal analysis, human motion capturing, music signal interpretation and production. Functioning and control of actuators will also be studied.
Prerequisite: CENG2440 or ESTR2100 
CENG5270
EDA for Physical Design of Digital Systems
This course aims to present the fundamental concepts and algorithms applied in Design Automation (CAD) of VLSI circuits. The scope will include various areas in Physical Design of digital systems, including circuit partitioning, FPGA technology mapping, floorplanning, placement, routing, compaction and interconnect optimization.
Prerequisite: CSCI2100 or ENGG2020 or ESTR2102 or ESTR2104 
CENG5271
EDA for Logic Design of Digital Systems
The scope of this course focuses on logic design of digital systems. Fundamental theory and techniques applied in logic synthesis of Electronic Design Automation (VLSI CAD) process are introduced. Topics include advanced Boolean algebra, related graph and BDD algorithms, twolevel (SOP) and multilevel (Boolean networks) logic representations and optimization, sequential logic optimization, retiming, rewiring, FPGA design flow, etc. Hands on experience on the Berkeley ESPRESSO/SIS/ABC platform will be learned through class exercises.
Prerequisite: CSCI2100 and ENGG2020
Exclusion: CENG5330 
CENG5410/ENGG5101
Advanced Computer Architecture
This course is designed to present an overview of some advanced computer architectures and their underlying design principles. Issues discussed will include scalability and performance evaluation. The underlying technologies such as processor and memory hierarchy, cache and shared memory, and advanced pipelining techniques will be presented. Examples of high performance vector processors, multicomputers and massive parallel processors will be compared. Some novel architectures such as VLIW, fault tolerant systems and data flow machines will also be elaborated.
Prerequisite: CSCI3420
Course Exclusion(s): CMSC5708 
CENG5420
Computer Arithmetic Hardware
This course aims at introducing the fundamental theories and core techniques for speeding up the computer arithmetic operation. Topics include: signed number representation, redundant/residue number system, fast adder designs, highradix multipliers, tree/array multipliers, highradix dividers, division by convergence, floating point arithmetic, squareroot computation, CORDIC algorithm, arithmetic by table lookup, lowpower arithmetic, faulttolerant arithmetic.
Prerequisite: ENGG2020 or ESTR2104 or CENG3420  CENG5440 NetworksonChips for ManyCore Systems

CENG5430
Architectures and Algorithms for Parallel Processing
This course aims at introducing the architectures and algorithms developed for parallel processing. Topics include: (I) models and complexity of parallel processing, sharedmemory algorithms, circuit modeling of parallel systems, (II) sorting and routing algorithms for 2D mesh, torus, hypercubes, and other networks; (III) coordination, data access and system robustness issues; (IV) implementation aspects on sharedmemory MIMD, messagepassing MIMD, and dataparallel SIMD machines.
Prerequisite: ENGG2020 or ESTR2104 or CENG3420 
CSCI1020
Handson Introduction to C++
This course aims to provide an intensive handson introduction to the C++ programming language. Topics include the basic C++ language syntax, variable declaration, basic operators, program flow and control, defining and using functions, file and operating system interface. Specific key features of the C++ programming language such as objectoriented methodology, class templates, encapsulation, inheritance, polymorphism, etc. will be highlighted.

CSCI1030
Handson Introduction to Java
This course aims to provide an intensive handson introduction to the Java programming language. Topics include the basic Java language syntax, variable declaration, basic operators, program flow and control, defining and using functions, file and operating system interface. Specific key features of the Java programming language such as objectoriented methodology, class templates, encapsulation, inheritance, polymorphism, etc. will be highlighted.

CSCI1040
Handson Introduction to Python
This course aims to provide an intensive handson introduction to the Python scripting language. Topics include the basic Python language syntax, variable declaration, basic operators, programme flow and control, defining and using functions, file and operating system interface. Specific key features of the Python scripting language such as objectoriented support, high level dynamic data types, embedding within applications etc. will be highlighted.

CSCI1050
Handson Introduction to MATLAB
This course aims to provide an intensive handson introduction to MATLAB programming. Topics include using the MATLAB interactive environment, variables, operators, expressions, control structures, arrays and matrix operations, defining and using functions, plotting graphs, using Simulink, etc.

CSCI1110
Introduction to Computing Using C
Computeroriented problemsolving methods and algorithm development; structured programming concepts; concepts of abstract data types; simple data structures such as array, pointers and linked lists; illustrative applications. The C programming language will be used.

CSCI1120/ESTR1100
Introduction to Computing Using C++
Computeroriented problemsolving methods and algorithm development; object oriented programming concepts; concepts of abstract data types; simple data structures; illustrative applications. The C++ programming language will be used.

CSCI1130/ESTR1102
Introduction to Computing Using Java
This course aims at providing students with the basic knowledge of computer programming. In particular, programming methodologies such as objectoriented programming and structured programming, and the use of abstract data types will be illustrated using highlevel programming languages such as Java.

CSCI1140
Programming Laboratory
Students will practise the programming principles they learn using C programming language.
Prerequisite: CSCI1120 or 1130 or with the consent of the instructor. 
CSCI1510
Computer Principles and C Programming
This course introduces computer programming in C. Students will learn the functional elements of a computer system, modern programming concepts, problem solving and creation of computer applications. Students will be able to apply these computing skills in various disciplines. This course also provides a foundation to further study in advanced computing topics.

CSCI1520
Computer Principles and C++ Programming
This course introduces computer programming in C++. Students will learn the functional elements of a computer system, objectoriented programming concepts, problem solving and creation of computer applications. Students will be able to apply these computing skills in various disciplines. This course also provides a foundation to further study in advanced computing topics.

CSCI1530
Computer Principles and Java Programming
This course introduces computer programming in Java. Students will learn the functional elements of a computer system, modern programming concepts, problem solving and creation of computer applications. Students will be able to apply these computing skills in various disciplines. This course also provides a foundation to further study in advanced computing topics.

CSCI1540
Fundamental Computing With C++
This course introduces fundamental computing principles, problemsolving methods and algorithm development, simple data structures, illustrative applications. The C++ programming language will be used.

CSCI1580
Visual Programming
This course introduces computer application programming using a visual programming environment. Students will learn visual programming principles, modern programming concepts, and problem solving techniques. There will be learning examples and handson exercises for the understanding and creation of GUIbased computer applications in areas such as data processing, statistical analysis, financial reporting, etc. Students will be able to apply these computing skills in building practical computer applications for various disciplines.

CSCI2100/ESTR2102
Data Structures
The concept of abstract data types and the advantages of data abstraction are introduced. Various commonly used abstract data types including vector, list, stack, queue, tree, and set and their implementations using different data structures (array, pointer based structures, linked list, 23 tree, Btree, etc.) will be discussed. Sample applications such as searching, sorting, etc., will also be used to illustrate the use of data abstraction in computer programming. Analysis of the performance of searching and sorting algorithms. Application of data structure principles.

CSCI2110
Discrete Mathematics
Set theory, functions, relations, combinatorics, graph theory, algebraic systems, propositional and predicate logic.

CSCI2120
Introduction to Software Engineering
This course aims to introduce students to software engineering concepts. Software life cycles and processes: requirements analysis and specifications; design techniques, functional design, object oriented design; implementation methodology, software testing and maintenance; application of CASE tools; documentation. Software Engineering laboratory: a series of exercises to practise the principles of software engineering.

CSCI2510
Computer Organization
This course is designed to provide the basic knowledge of computer organization and assembly language programming. Functions and structures of the basic building blocks: CPU, memory unit and input/output units will be introduced. Assembly language programming is used as a tool to study the internal coding of information, number representation, arithmetic operations and the flow of information within a microcomputer.

CSCI2520
Data Structures and Applications
This course formally examines the relationship between abstract data types and data structures. The implementation of abstract data types using various data structures will be discussed. Abstract data types including list, stack, queue, symbol table, tree and graph will be introduced. Introductory complexity analysis and bigO notation will be illustrated with simple algorithms such as searching and sorting.

CSCI2720
Building Web Applications
The course is concerned with the development of web applications. The major topics include 1) Building blocks of web applications, 2) Clientside technologies, 3) Serverside technologies, and 4) Web application design and securities issues.

CSCI2800
Numerical Computation
This course aims at introducing the computational techniques on numerical methods. Course Contents: include computational error analysis; algorithms for roots finding; solutions of linear and nonlinear equations, and their sensitivity to computational errors; constrained and unconstrained optimization; curve fitting; applications examples.

CSCI3100
Software Engineering
Software lifecycles: system modelling, requirements analysis and specifications, design techniques, implementation methodology, testings, maintenance and engineering laboratory. Analytical tools: software metrics, system performance measurement and evaluation. Management techniques: estimations, planning, project management, communication skills and documentations. Introductions to CASE tools and security.

CSCI3120
Compiler Construction
The course aims at teaching students about compiler development methodology and its associated technology to modern applications. The Course Contents: included formal aspects, lexical analysis, syntax analysis, syntaxdirected translation, runtime environments, intermediate code generation, code generation and code optimization.

CSCI3130
Formal Languages and Automata Theory
Deterministic and nondeterminisitic finite automata, regular expressions, contextfree grammars, pushdown automata, contextsensitive grammars, parsing of LR(O) and LR(K) languages, introduction to Turing machines and computability.

CSCI3150/ESTR3102
Introduction to Operating Systems
Principles of operating systems: process management, memory management, file system, protection and security. Design and implementation methodology, performance evaluation. Case studies. Concurrent Programming.

CSCI3160/ESTR3104
Design and Analysis of Algorithms
Basics of algorithm analysis: correctness and time complexity. Techniques for designing efficient algorithms: greedy method, divide and conquer, and dynamic programming. Fundamental graph algorithms: graph traversals, minimum spanning trees and shortest paths. Introduction to complexity theory: polynomialtime reductions and NPcompleteness.

CSCI3170
Introduction to Database Systems
Concepts and principles of database management systems. Subjects include: basic concepts, system structures, data models, database languages (SQL in particular), relational database normalization, file systems, indexing, query processing, concurrency control and recovery schemes.

CSCI3180/ESTR3106
Principles of Programming Languages
This course introduces, analyses and evaluates the important concepts found in current programming languages. The concepts are illustrated by contrasting their appearances in different languages. Major topics include: concepts, paradigms and implementation techniques.

CSCI3190
Introduction to Discrete Mathematics and Algorithms
Introduction to logic, combinatorics, recurrence relations and graph theory. Design and analysis of algorithms: greedy method, divide and conquer, and dynamic programming. Fundamental algorithms including sorting, graph algorithms, numbertheoretic algorithms and numerical algorithms. Introduction to NPcompleteness.

CSCI3220
Algorithms for Bioinformatics
This course describes some algorithms commonly used in contemporary bioinformatics. After a brief introduction to basic molecular biology and genetics, four main topics will be covered with corresponding lists of algorithms:
1. Sequence alignment and assembly: dynamic programming for optimal sequence alignment, FASTA and BLAST for heuristic alignment of long sequences, treebased methods for multiple sequence alignment, suffixtree, suffixarray and BurrowsWheeler Transform for short read alignment, and algorithms based on de Bruijn graphs for sequence assembly
2. Statistical modeling: forward, backward, Viterbi and BaumWelch algorithms for hidden Markov models, Gibbs sampling for sequence motif discovery, and Bayesian classifiers, logistic regression and expectationmaximization for data classification and clustering
3. Phylogenetics: methods based on JukesCantor and Kimura models for divergence time estimation, maximum parsimony, UPGMA, Neighborjoining and maximum likelihood methods for phylogenetic tree reconstruction.
4. Highthroughput data analysis: Hierarchical clustering and kmeans for data clustering, and algorithms for selected problems such as signal peak calling, detection of gene fusion, haplotype phasing.
Other topics such as RNA secondary structure prediction may also be covered depending on the available time. 
CSCI3230/ESTR3108
Fundamentals of Artificial Intelligence
Basic concepts and techniques of artificial intelligence. Knowledge representation: predicate logic and inference, semantic networks, scripts and frames, and objectoriented representation. Searching: such as A*, hillclimbing, minimax and alphabeta pruning. Planning: the frame problem and the STRIPS formalism, representation schemes and planning strategies. Neural networks: learning algorithms, neural architecture and applications. Natural language processing. Knowledge acquisition and expert systems: properties, techniques and tools of expert systems.

CSCI3250
Computers and Society
This course studies social, legal, ethical issues of information technology in society. Problems related to privacy, computer crimes, freedom of speech, intellectual property, professionalism, health, safety will be discussed. Local and global examples will be used to illustrate the issues.

CSCI3251
Engineering Practicum
Industrial and professional workshops or seminars as required by the Major programme.

CSCI3260
Principles of Computer Graphics
Fundamental computer graphics techniques and algorithms will be introduced. Topics to be covered include: graphics hardware and interaction devices, transformation of coordination systems, scan conversion algorithms, hidden surface algorithms, illumination models and shading, rendering, texture mapping, computer animation and visualization.

CSCI3270
Advanced Programming Laboratory
The course will mainly focus on programming exercises for advanced data structures and algorithms. Topics include dynamic programming, computational geometry, number theory, simulation, combinatorial problems, optimization techniques, graph theory, etc.

CSCI3280
Introduction to Multimedia Systems
This course covers the design and implementation of modern multimedia systems. Topics include multimedia systems design, multimedia data representation, multimedia hardware and software, multimedia communication and networking, multimedia programming and multimedia information systems.

CSCI3290
Computational Imaging and Vision
Computational Photography is an emerging new field created by the convergence of computer graphics, computer vision and conventional photography. Its main purpose is to overcome the limitations of the traditional camera by using computational techniques to produce a richer, more vivid, perhaps more perceptually meaningful representation of our visual world. The content of this course is to study ways in which samples from the real world (images and video) can be used to generate compelling computer imagery. We will learn how to acquire, represent, and render scenes from digitized photographs. The following topics will be covered: cameras, image formation and models; image manipulation (warping, morphing, mosaicing, matting, compositing); dataDr.iven synthesis; visual perception; high dynamic range imaging and tone mapping; imagebased lighting; nonphotorealistic rendering; and other applications in photography.

CSCI3310
Mobile Computing and Applications Development
This course aims at introducing various development considerations in mobile applications. Topics include: Fundamental concepts in user interface design, mobile file systems, networking and security issues, energy saving consideration in mobile application development. Graphics programming on mobile devices such as OpenGL ES will also be discussed.

CSCI3320
Fundamentals of Machine Learning
The first part introduces basic methods, including minimum error versus maximum likelihood, parametric versus nonparametric estimation,¡@linear regression, factor analysis, Fisher analysis, singular value decomposition, clustering analysis, Gaussian Mixture, EM algorithm, spectral clustering, nonnegative matrix factorization. The second part provides an introduction on small sample size learning, consisting of model selection criteria, RPCL learning, automatic model selection during learning, regularization and sparse learning.

CSCI3420
Computer System Architectures
This course provides a foundation for understanding and evaluating the design principles incorporated in modern computer systems with particular emphasis on architectural features required to support highlevel languages and system software: design methodology and descriptive tools; instruction set design; memory system design; control system design; input/output systems design; parallel processing concepts and future trends.

CSCI4120
Principles of Computer Game Software
This course aims at establishing the principles, techniques and tools in the design and development of computer game software with focus on the real time performance consideration. Topics include: stages in computer game development, concept of game engine, rendering considerations, physics effects, artificial intelligence (AI), audio effects, scripting and environment for game project development.

CSCI4140
OpenSource Software Project Development
This course is to introduce techniques in developing software projects. Topics include leveraging the web server, the database server, and the scripting languages, such as the LAMP (Linux, Apache, MySQL, PHP) platform, to develop software projects, advanced debugging techniques, and performance tuning techniques. Also, this course will introduce the knowledge on software licensing, such as the GNU public license (GPL) and the Berkeley Software Distribution (BSD) license. Last but not least, this course emphasizes in arousing the creativity and fun in developing software projects.

CSCI4160
Distributed and Parallel Computing
This course introduces concepts, models and implementations related to distributed and parallel computing. Topics include parallel and distributed system architectures, concurrent languages, synchronization and concurrency control techniques, and applications in distributed databases.

CSCI4180/ESTR4106
Introduction to Cloud Computing and Storage
This course introduces the concepts and principles of cloud computing. Subjects include: cloud computing models (including SaaS, PaaS, IaaS); distributed and parallel data processing (e.g. MapReduce, Hadoop, multicore technologies); virtualization technologies (such as hypervisor, virtual machines, full virtualization, paravirtualization); data storage (cloud storage architectures, data centers, data deduplication); security/privacy issues; and case studies of realworld cloud services (e.g. Amazon EC2, Windows Azure). This course will emphasize applied methodologies of using cloud computing for solving practical engineering problems.

CSCI4190
Introduction to Social Networks
This course introduces how the social, technological, and natural worlds are connected, and how these relationships can be modeled as high dimensional graphs. The use of algorithmic approach to study these large scale networks so as to shed light on their connections and intrinsic properties will be employed. Topics include:1) how opinions, personal interests, idea, news and political movements spread via social networks; 2) how to maintain the robustness of the world wide web; 3) why we observe fragility in some of our electrical networks; 4) understand the formation process of large scale online social networks like Facebook; 5) how to perform effective product advertisement in large scale online social networks; and 6) how information or virus can be propagated in these large scale online social networks. This course aims to provide simple but fundamental theories on how one can understand the formation and interaction on these social networks. This course is multidisciplinary in nature, and it is suitable for engineering, science, mathematics, economics or business students.

CSCI4210
Reverse Software Engineering
This course introduces the concepts of software reverse engineering, and illustrate how these concepts can be applied to protective programming style that leads to secure software systems design. Topics include: pointer subterfuge, dynamic memory management, data types conversion and security implication, proper file I/O operations, reverse engineering basics, Windows and Linux OS fundamentals, various executable formats, reversing engineering tools, modifying and auditing program binaries, malware detection, watermarking applications.

CSCI4220
Introduction to Game Theory in Computer Science
This course aims at introducing the decision making and game theory in the context of Computer Science. The course starts with decision making under risk, decision making under uncertainty and utility theory. It then covers rational behaviour of agents in strategic games and the existence of pure and mixed strategy Nash equilibrium. Then extensive games and subgame perfect equilibrium, including repeated games and trigger strategy equilibrium, will be introduced. The course also introduces coalitional games and the concept of the cores. Finally, social choices, Arrow's Impossibility Theorem and the revelation principle will be discussed.

CSCI4230
Computational Learning Theory
This course introduces theoretical foundations of efficient learning algorithms and their limitations. Topics include Probably Approximately Correct learning, Occam learning, Vapnik–Chervonenkis dimension, boosting, Statistical Query learning, active learning, and crypotgraphic hardness of learning.

CSCI4430/ESTR4120
Data Communication and Computer Networks
This course aims to introduce fundamental concepts and technologies in computer networking. The course adopts a topdown approach introducing the TCP/IP networking stack. The design of the contemporary communication applications will be studied. The fundamental concepts in implementing the reliable transport protocols, such as TCP, will be taught in this course. Design issues of TCP, such as the sliding window protocol and the congestion control, will also be included. This course will also focus on the IP network and the routing algorithms used in the Internet. Last, the design issues in the data link layer (e.g., Ethernet), including the medium access control, will be introduced.

CSCI4998
Final Year Project I
This course involves a significant project in any area of computer science. The project may be taken individually or in small group. A project report has to be written under the supervision of the teaching staff.

CSCI4999
Final Year Project II
This course involves a significant project in any area of computer science. The project may be taken individually or in small group. A project report has to be written under the supervision of the teaching staff.

CSCI5010
Practical Computational Geometry Algorithms
This course will discuss data structures and algorithms for solving fundamental problems in computational geometry with good theoretical guarantees. Topics covered include linesegment intersection, polygon triangulation, convex hull, linear programming, orthogonal range searching, point location, voronoi diagram, delaunay triangulation, and so on.
Prerequisite: CSCI2100 or CSCI2520 or equivalent 
CSCI5020
External Memory Data Structures
This course will introduce worstcase efficient data structures in the external memory (EM) computation model. In this model, the space complexity is measured in the number of disk blocks, while the time complexity is measured in the number of I/Os (each transferring a block of data between the memory and the disk). Fundamental techniques of designing and analyzing EM structures will be studied, in the context of several classical problems including sorting, stabbing queries, orthogonal range searching, and so on.
Prerequisite: CSCI2100 or CSCI2520 or equivalent 
CSCI5030
Machine Learning Theory
This course first introduces fundamentals of machine learning with a large size of samples, including basic principles (maximum likelihood vs least redundancy) and typical structures (linear systems of hidden factors, mixture of local structures, and Markov temporal models), The second part of the course covers learning theories towards small sample size challenge, including major topics (model selection, learning regularization, two stage implementation, sparse learning, and automatic model selection) and three streams of efforts, namely generalization error estimation (CV, AIC, VC theory), shortest coding length (MML vs MDL) or similarly various Bayes (BIC, MAP, Laplace, marginal, and variational) , and BYY learning (BYY system, best harmony theory, YingYang alternation updating, and five action circling implementation).

CSCI5050
Bioinformatics and Computational Biology
This course introduces several core topics in bioinformatics and computational biology. Each topic will be discussed from three aspects: 1) motivation and concepts, 2) computational problems and methods, and 3) available tools and data. The topics include basics in molecular biology, highthroughput experiments and data preprocessing, sequencing and alignment, motifs and domains, ontology and functional enrichment, biological networks and data mining, secondary and tertiary structures, and other latest developments in this research area.

CSCI5060
Techniques in Theoretical Computer Science
This course introduces advanced techniques that are commonly used, including but not limited to the following:
 Techniques related to randomness, such as random sampling, random projection, random walk.
 Techniques related to algebra, such as Fourier analysis on finite group (especially on the Boolean hypercube), spectral algorithms, algebraic graph theory.
 Techniques from other areas, such as information theory, optimization, geometry, topology.

CSCI5070
Advanced Topics in Social Computing
This course aims to advance computational techniques used in social computing. More specifically, the course will present stateoftheart methodologies and approaches to mine social data, signals, and behaviours. The course topics include, but are not limited to: social network theory and analysis, graph mining, linkbased analysis and algorithms, web intelligence, web data mining, knowledge discovery on the web, web analytics, web information retrieval, learning to rank, ranking algorithms, relevance feedback, collaborative filtering, recommender systems, human/social computation, social games, opinion mining, sentiment analysis, social monetization, security/privacy issues related to web intelligence, question and answering, and other related topics in social computing, etc.

CSCI5080
Advanced System Security
The aim of this course is to understand advanced concepts in computer system security. Topics include kernel exploits, rootkit detection, malicious software identification and defence, computer systems forensic and investigation, forensic and data collection tools, analysis of malicious software and its implications.

CSCI5120
Advanced Topics in Database Systems
This course will introduce to students advanced topics in database systems including advanced data structures, concurrency control, deadlock resolutions, recovery schemes, distributed database systems, multimedia database indexing techniques, data mining, data on the web and network data analysis.
Prerequisite: CSCI3170
Exclusion: CSCI5705 and SEEM5010 
CSCI5150
Machine Learning Algorithms and Applications
This course introduces a dozen of machine learning algorithms and typical applications in computational finance, bioinformatics, and other big data analyses, including six topics that consist of (1) unsupervised learning algorithms for clustering analysis, local subspaces, manifold learning, and their applications in image analysis and bioinformatics; (2) arbitrage pricing theory (APT) and temporal factor analysis for finance market modelling and stream data analysis；(3) supervised learning algorithms(decision tree and deep learning) for pattern recognition, (4) learning biomedical casecontrol analyses and machine fault detection from an integrative view of description, classification, and hypothesis test；(5) algorithms of graph analysis and nonnegative matrix decomposition for learning biology networks and social computing; (6) brief introductions of other learning algorithms such as transfer learning, recommendation systems, etc.

CSCI5160/ENGG5102
Advanced Algorithms
This course will study the design and analysis of exact and approximation algorithms using advanced techniques such as combinatorial methods, probabilistic methods, linear programming, semidefinite programming, and spectral methods.
Exclusion: ENGG5102 
CSCI5170
Theory of Computation Complexity
The course introduces some of the following topics: deterministic and nondeterministic Turing machine, time and space complexity, NPcompleteness, polynomial time hierarchy, probabilistic computation, interactive proofs, complexity of counting, concrete models such as query complexity, communication complexity, formula complexity, branching programs and circuit complexity, quantum computation, complexitybased cryptography, randomnessrelated topics such as derandomness, pseudorandomness, extractors, random walks, etc.

CSCI5180/ENGG5103
Techniques for Data Mining
Data mining provides useful tools for the analysis, understanding and extraction of useful information from huge databases. These techniques are used in business, finance, medicine and engineering. This course will introduce the techniques used in data mining. Topics will include clustering, classification, estimation, forecasting, statistical analysis and visualization tools.
Exclusion: CMSC5724 
CSCI5210
Advanced Computer Graphics and Visualization
This course provides indepth treatment of the following advanced computer graphics and visualization topics: radiosity rendering and global illumination, procedure texturing and modelling, imagebased rendering, stereo imaging, realtime volume graphics and interactive visualization.
Prerequisite: CSCI3260 or equivalent 
CSCI5240
Combinatorial Search and Optimization with Constraints
Students will be exposed to various constraintbased combinatorial search and optimization techniques that arise in artificial intelligence, operations research, etc. Topics include, but are not limited to, local propagation, consistency algorithms, Boolean constraint solving, numerical constraint solving, linear programming, search, and their applications.

CSCI5250/ENGG5106
Information Retrieval and Search Engines
This course surveys the current research in information retrieval for the Internet and related topics. This course will focus on the theoretical development of information retrieval systems for multimedia contents as well as practical design and implementation issues associated with Internet search engines. Topics include probabilistic retrieval, relevance feedback, indexing of multimedia data, and applications in ecommerce.

CSCI5280/ENGG5104
Image Processing and Computer Vision
This course will cover fundamental knowledge and advanced topics in image processing and computer vision, including feature detection, segmentation, motion estimation, panorama construction, 3D reconstruction, scene detection and classification, color image processing and restoration. Applications in computer graphics will also be introduced, including image transformation, and camera calibration. Basic concepts of related algorithms and mathematic background will be discussed.
Exclusion: CMSC5711 
CSCI5320
Topics in Graph Algorithms
This course will discuss graph theory and graph algorithms with emphasis on the algorithmic aspects of graph theory. The course will cover classical topics such as search techniques, connectivity, colouring, matching and covering, network flows, planarity, traversability, perfect graphs, and NPcompleteness of graph problems. The course will also discuss FPT algorithms for solving graph problems.
Prerequisite: CSCI3160 
CSCI5350
Advanced Topics in Game Theory
This course starts with a review of the basic concepts in game theory, including pure strategy and mixed strategy Nash equilibrium. It then discusses some specific types of games, such as zerosum games and Bayesian games, and introduces other types of equilibriums including correlated equilibrium and evolutionary equilibrium. Rationalisability and the relation between knowledge and equilibrium will also be discussed. After a review of subgame perfect equilibrium and sequential equilibrium, bargaining games, implementation theory, perfect Bayesian equilibrium and trembling hand perfect equilibrium will be discussed. Finally, the relationship between the core, the stable sets, and the Shapley value in coalitional games will be discussed.
Prerequisite: CSCI2110 or ENGG2440 or ESTR2004, ENGG2040 or ENGG2430 or ESTR2002 and CSCI4220
Exclusion: CMSC5728 
CSCI5370
Quantum Computing
This course introduces various topics in quantum computing, including but not limited to the following ones. 1.Quantum algorithms: quantum Fourier transform, amplitude amplifi cation, quantum walk. 2.Quantum complexity: quantum structural complexity, quantum interactive proof, quantum communication complexity, quantum query complexity. 3.Other topics such as quantum cryptography and quantum information theory.
Prerequisite: CSCI2110 
CSCI5390
Advanced GPU Programming
The evolution of consumer graphics hardwares leads to the introduction of parallel, programmable GPUs (Graphics Processing Units). The strong parallel computational power of GPUs not only supports realtime and realistic rendering, but also the cost effective platform for scientific computing, such as physical simulation, numerical analysis, evolutionary computation, image processing, and computer vision, etc. This course introduces the evolution of shading language and GPU, the basic concept in GPU programming and the recent advanced usage of GPU in computer graphics and general purpose computing. Topics covered include: shader programming, procedural texture and modelling, programmable graphics pipeline, modern shading language, GPGPU (generalpurpose computing in GPU), limitations of GPU, and case studies of advanced usages of GPU.
Prerequisite: CSCI2100 or CSCI2520 or equivalent 
CSCI5430
Autonomous Agents and Multiagent Systems
Characteristics of autonomous agents. Agent architectures: BELIEFDESIREINTENTION architecture, purely reactive architectures and hybrid architecture. Multiagent systems: speech acts theory, agent communication, and agent cooperation protocols. Agentoriented programming. Distributed hierarchical planning. Distributed rational decision making: protocols and strategies, Nash equilibrium and Pareto optimality, auctions, voting, Clarke tax, OCSMcontracts. Argumentation and negotiation.
Prerequisite: CSCI2110  CSCI5440 Theory of Cryptography

CSCI5450
Randomness and Computation
This course is to study the use of randomness in theoretical computer science. We will introduce basic probability tools (e.g. random variables, expectation, moments and derivations, tail inequalities, martingales) and probabilistic methods (e.g. first moment method, second moment method, Lovasz local lemma, semirandom method). Then we will show how these tools and methods can be used to design randomized algorithms (e.g. graph algorithms, numbertheoretic algorithm, computational geometry), efficient data structures (e.g. balls and bins, hashing, load balancing), and sublinear algorithms (e.g. property testing, constant time algorithms, data streaming). We will also demonstrate how these tools and methods can be combined with other techniques, such as Markov chain and random walk (e.g. electric networks, expanders, random sampling, approximate counting), algebraic techniques (e.g. determinant method, fingerprinting, polynomial identity testing, interactive proof), and mathematical programming (e.g. linear programming, randomized rounding, semidefinite programming). Finally we study some methods of derandomization (e.g. conditional probability, kwise independence, smallbias space, pseudorandom generator).

CSCI5460
Virtual Reality
This course introduces the fundamental and advanced research topics in virtual reality (VR), including VR tools & metaphors, multisensory interactions, geometric and behavior modeling, touchenabled interfaces, realtime navigation, human factors in immersion, augmented reality systems, and internetbased VR applications. The webbased virtual reality interfaces plus 3D graphics engines build up the developing tools for testing the innovation for the advanced VR research and realtime applications.
Prerequisite: CSCI3260 or equivalent 
ENGG5105/CSCI5470
Computer and Network Security
This course aims to introduce important topics in computer and network security from an applied perspective. Topics include: (i) applied cryptography (e.g., cryptographic primitives, programming with OpenSSL), (ii) network security (e.g., unauthorized accesses, largescale network attacks, firewall & intrusion detection systems), (iii) web security (e.g., HTTP session management and web attacks), and (iv) system security (e.g., buffer overflow, passwords, file system security), (v) wireless security (e.g., WiFi security, wireless broadband network security). The course also discusses latest applied security topics depending on the current research trends.
Advisory: Students are expected to have taken both CSCI3150 and CSCI4430, or their equivalent" in course descriptions
Exclusion: CMSC5726 
CSCI5510/ENGG5108
Big Data Analytics
This course aims at teaching students the stateoftheart big data analytics, including techniques, software, applications, and perspectives with massive data. The class will cover, but not be limited to, the following topics: advanced techniques in distributed file systems such as Google File System, Hadoop Distributed File System, CloudStore, and mapreduce technology; similarity search techniques for big data such as minhash, localitysensitive hashing; specialized processing and algorithms for data streams; big data search and query technology; managing advertising and recommendation systems for Web applications. The applications may involve business applications such as online marketing, computational advertising, locationbased services, social networks, recommender systems, healthcare services, or other scientific applications.
Exclusion: CMSC5741 
CSCI5530
Interactive Computer Animation and Simulation
This course will introduce the advanced interactive animation and related physical simulation techniques, widely applicable in computer animation, interactive media and dynamic special effects. Algorithms and approaches for animation and simulation will be covered, including rigid and deformable models, particle systems, natural phenomena and materials, liquids simulation, SPH dynamics, flocking and crowd simulation, animated sketch, and physical interfaces.
Prerequisite: CSCI3260 or its equivalent 
CSCI5520
Foundations of Data Privacy
This course introduces foundational notions and techniques for privacy preserving data access and computation. Topics include tradeoffs between utility and privacy, differential privacy, mechanisms for private data access, privacy in interactive and noninteractive settings, privacy preserving algorithms, privacy in auctions, privacy and learning, and lower bounds on privacy.

CSCI5550
Advanced File and Storage Systems
This course aims to introduce important systemslevel research topics in the design and implementation of practical file and storage systems. Topics include: (i) storage device organization (e.g., disk drives, disk arrays, RAID, solid state drives), (ii) file system design (e.g., logstructured file systems, distributed file systems), (iii) data availability (e.g., erasure coding techniques, data integrity protection), (iv) data consistency (e.g., journaling techniques), (v) data compression (e.g., deduplication), (vi) benchmarking (e.g., I/O metrics, benchmarking tools), etc. Depending on the current research trends, the course also discusses the latest applied storage topics, especially related to scalable and dependable big data management.
Prerequisite: CSCI3150 or ESTR3102 
CSCI5560
Analysis of Boolean Functions
This course introduces various analytical tools for studying Boolean functions, and their applications in learning algorithm design complexity theory, social choice, property testing, additive combinatorics, Gaussian geometry, etc.
Prerequisite: CSCI2110 or ENGG2440 or ESTR2004 
CSCI5570
Large Scale Data Processing Systems
This course introduces contemporary systems for large scale data processing. Topics to be covered include, but are not limited to: (1) advanced database systems (including distributed, parallel, columnar, inmemory systems, etc., for both OTLP and OLAP applications); (2) NoSQL and NewSQL systems; (3) distributed data stores; (4) big data analysis systems; (5) graph processing systems; (6) stream processing systems; and (7) data visualization. Advanced algorithms for data analytics (e.g., distributed machine learning algorithms, streaming algorithms, etc.) that are implemented using the systems introduced in the course will also be discussed.

CSCI5580
Online Algorithms for Machine Learning and Optimizations
This course aims to cover topics in online learning and online optimization. Typical topics include multiarmed bandit (MAB) problems in various settings, online convex optimization (OCO) problems such as online linear regression, online classification, and certain general reinforcement learning problems. Different algorithms will be introduced to solve these problems and analysis of the performance and efficiency will be provided.
Advisory: Students are expected to have taken CSCI3160.  CSCI5590 Advanced Topics in Blockchain
 CSCI5600 Advanced Topics in Distributed Systems

ENGG1310/ESTR1003
Engineering Physics: Electromagnetics, Optics and Modern Physics
This is an introductory calculusbased engineering physics course covering topics in electromagnetics, optics and modern physics. Topics in electromagnetics include: electric and magnetic properties, Coulomb’s law, Gauss’ law, electromagnetic energy and forces, BiotSavart law, electromagnetic fields and Maxwell’s equations, propagation of plane electromagnetic waves. Topics in optics include: optical interference, interferometers, optical diffraction. Topics in modern physics include: waveparticle duality, momentum and energy of photons and electrons, electronic states and energy bands, electrical conduction in metals and semiconductors. Contents will be supplemented by discussions on applications relevant to engineering.

ENGG1410/ESTR1004
Linear Algebra and Vector Calculus for Engineers
Linear algebra: matrices, matrix addition, matrix multiplication, inverses, special matrices; vector spaces, basis and dimension, linear independence, rank, determinants; linear transformations, projection, orthogonality, systems of linear equations, Gaussian elimination; eigenvalues and eigenvectors. Vector calculus: 3D vector space and algebra; vector differential calculus, gradient, divergence, curl; vector integral calculus, Green's theorem, Gauss's theorem, Stoke's theorem.

ENGG1820
Engineering Internship
The objective of the course is to enable students to have a basic understanding of the practical aspects of the engineering profession. Prior to the enrolment of this course, students must have completed not less than 8 weeks of fulltime internship approved by the Faculty of Engineering. To be qualified for award of the subject credit, the student must submit a report, within the semester of enrolment, summarizing what he or she has done and learnt during the internship, together with a testimonial from the corresponding employer. Pass or fail of the course will be determined by the professorincharge, based on the report and the testimonial submitted.
Student may look for internship opportunities at the Placement and Internship Program (PIP) website administered by Centre for Innovation and Technology of the Faculty, or from any other sources available to him or her. Students are recommended to seek professorincharge’s comment on internship undertaken before enrolling in the course.
WorkStudy, the 12month internship program organized by the Faculty, is a valid internship satisfying the requirements of ENGG1820.
Advisory: For year 2 or above Engineering Majors students. (new curriculum)

ENGG2020/ESTR2104
Digital Logic and Systems
Digital concepts; number systems; operations and codes; logic gates; Boolean algebra and logic simplification; combinational logic; functions of combinational logic; flipflops and related devices; counters; finite state machines; programmable logic devices  programming and sequential logic applications; memory and storage; integrated circuit technologies.

ENGG2420/ESTR2000
Complex Analysis and Differential Equations for Engineers
Complex analysis: analytic functions and Cauchy Riemann; complex integration, Cauchy principal value; elementary complex valued functions: exponential functions, Euler’s formula, trigonometric and hyperbolic functions, logarithm and general powers; power series, Taylor series and convergence tests. ODE: classification of differential equations; 1st order ordinary differential equations; 2nd order ordinary differential equations. Partial differential equations.

ENGG2430/ESTR2002
Probability and Statistics for Engineers
Fundamental probability concepts: probability and events; expectation, variance, moments, moment generating functions; single variate distributions. Multivariate probability: conditional probability, joint probability; Bayes’ Theorem; conditional expectation, covariance; multivariate distributions, functions of random variables. Central limit theorems, law of large number. Statistics: estimation, sample size and applications.

ENGG2440/ESTR2004
Discrete Mathematics for Engineers
Set theory, functions, relations, combinatorics, graph theory, algebraic systems, propositional and predicate logic.

ENGG3802
Introduction to Engineering Entrepreneurship
The 1unit course will introduce engineering entrepreneurship and provide the key basic concepts needed in the preparation of technical proposals and business plans. The course will introduce students to analytical process of evaluating new ideas, and metrics to compare ideas with existing approaches in the market. The course will include in class discussion of forecasts based on market size estimates, cashflow analysis and technical development plans. The course objective is to prepare students to develop and present their innovative technical ideas that have potential for practical development as a preliminary entrepreneurship project in the following semester in ENGG3803. In addition to a formal written proposal to describe their ideas, students will also be asked to present their proposal to the course instructor. Shortlisted proposals will be invited to a second presentation where a panel of experienced engineering entrepreneurs select proposals for further development.

ENGG3803
Engineering Entrepreneurship Development Project
The 2unit course is project based. Students will be provided with individual or small group project supervision to help them implement their project proposal from ENGG3802. The objective of the course is to provide an initial technical implementation showing the technical feasibility of the proposal. The focus is carry out practical prototyping, simulations and/or computer coding and build a prealpha proof of concept demonstration via initial computer software or design/building of the critical hardware subsystems. At the end of the course, students will present their work to a panel of assessors in a project competition, and those shortlisted will be assessed by a panel including external entrepreneurs who may consider the successful projects for possible continuation (eg as the final year project or capstone project of their major programme).

ENGG4030/ESTR4300/IERG4300
Webscale Information Analytics
The course discusses dataintensive analytics, and automated processing of very large amount of structured and unstructured information. We focus on leveraging the MapReduce paradigm to create parallel algorithms that can be scaled up to handle massive data sets such as those collected from the World Wide Web or other Internet systems and applications. We organize the course around a list of largescale data analytic problems in practice. The required theories and methodologies for tackling each problem will be introduced. As such, the course only expects students to have solid knowledge in probability, statistics, linear algebra and computer programming skills. Topics to be covered include: the MapReduce computational model and its system architecture and realization in practice ; Finding Frequent Itemsets and Association Rules ; Finding Similar Items in highdimensional data ; Dimensionality Reduction techniques ; Clustering ; Recommendation systems ; Analysis of Massive Graphs and its applications on the World Wide Web ; Largescale supervised machine learning; Processing and mining of Data Streams and their applications on largescale network/ onlineactivity monitoring.

ENGG5781
Matrix Analysis and Computations
Matrix analysis and computations are widely used in engineering fields—such as machine learning, computer vision, systems and control, signal and image processing, optimization, communications and networks, and many more—and are considered key fundamental tools. This course covers matrix analysis and computations at an advanced or research level. It consists of several parts. The first part focuses on various matrix factorizations, such as eigendecomposition, singular value decomposition, Schur decomposition, QZ decomposition and nonnegative factorization. The second part considers important matrix operations and solutions such as matrix inversion lemmas, linear system of equations, least squares, subspace projections, Kronecker product, Hadamard product and the vectorization operator. Sensitivity and computational aspects are also studied. The third part explores presently frontier or further advanced topics, such as matrix calculus and its various applications, tensor decomposition, and compressive sensing (or managing undetermined systems of equations via sparsity). In every part, relevance to engineering is emphasized and applications are showcased.