Undergraduate Course Detail
Digital Logic Design Laboratory
This course aims at providing an intensive hands-on 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.
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, analog-to-digital 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.
Principles of System Software
Virtual machines. System supports for programme execution: micro-kernels, interrupts and synchronizations, interprocess communications, memory management, protection, portability, fault tolerance techniques and device drivers. Multi-processor system support.
Smart Hardware Design
This is a hands-on project-based 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.
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 multi-core processors.
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.
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.
This course teaches techniques in designing and analysing VLSI circuits. Topics include design rules, layout fundamentals, switch-level simulation, charge sharing, static and dynamic logics, propagation-delay estimates, power considerations, data-path organization, clocking schemes, synchronizers, asynchronous circuits, pads, systolic computation, silicon compiler, high-level synthesis and hardware description languages. Students will design complete IC's using both simple hand-layout programmes and CAD tools.
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) Low-power hardware/software design techniques.
Computer-aided 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.
Embedded System Development and Applications
This course aims at enhancing students¡¦ skills in developing embedded systems. Advanced techniques in the use of real-time 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
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 energy-efficient 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
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
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
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, two-level (SOP) and multi-level (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
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.
Course Exclusion(s): CMSC5708
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, high-radix multipliers, tree/array multipliers, high-radix dividers, division by convergence, floating point arithmetic, square-root computation, CORDIC algorithm, arithmetic by table lookup, low-power arithmetic, fault-tolerant arithmetic.
Prerequisite: ENGG2020 or ESTR2104 or CENG3420
- CENG5440 Networks-on-Chips for Many-Core Systems
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, shared-memory 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 shared-memory MIMD, message-passing MIMD, and data-parallel SIMD machines.
Prerequisite: ENGG2020 or ESTR2104 or CENG3420
Hands-on Introduction to C++
This course aims to provide an intensive hands-on 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 object-oriented methodology, class templates, encapsulation, inheritance, polymorphism, etc. will be highlighted.
Hands-on Introduction to Java
This course aims to provide an intensive hands-on 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 object-oriented methodology, class templates, encapsulation, inheritance, polymorphism, etc. will be highlighted.
Hands-on Introduction to Python
This course aims to provide an intensive hands-on 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 object-oriented support, high level dynamic data types, embedding within applications etc. will be highlighted.
Hands-on Introduction to MATLAB
This course aims to provide an intensive hands-on 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.
Introduction to Computing Using C
Computer-oriented problem-solving 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.
Introduction to Computing Using C++
Computer-oriented problem-solving 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.
Introduction to Computing Using Java
This course aims at providing students with the basic knowledge of computer programming. In particular, programming methodologies such as object-oriented programming and structured programming, and the use of abstract data types will be illustrated using high-level programming languages such as Java.
Students will practise the programming principles they learn using C programming language.
Prerequisite: CSCI1120 or 1130 or with the consent of the instructor.
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.
Computer Principles and C++ Programming
This course introduces computer programming in C++. Students will learn the functional elements of a computer system, object-oriented 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.
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.
Fundamental Computing With C++
This course introduces fundamental computing principles, problem-solving methods and algorithm development, simple data structures, illustrative applications. The C++ programming language will be used.
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 hands-on exercises for the understanding and creation of GUI-based 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.
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, 2-3 tree, B-tree, 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.
Set theory, functions, relations, combinatorics, graph theory, algebraic systems, propositional and predicate logic.
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.
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.
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 big-O notation will be illustrated with simple algorithms such as searching and sorting.
Building Web Applications
The course is concerned with the development of web applications. The major topics include 1) Building blocks of web applications, 2) Client-side technologies, 3) Server-side technologies, and 4) Web application design and securities issues.
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 non-linear equations, and their sensitivity to computational errors; constrained and unconstrained optimization; curve fitting; applications examples.
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.
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, syntax-directed translation, run-time environments, intermediate code generation, code generation and code optimization.
Formal Languages and Automata Theory
Deterministic and nondeterminisitic finite automata, regular expressions, context-free grammars, pushdown automata, context-sensitive grammars, parsing of LR(O) and LR(K) languages, introduction to Turing machines and computability.
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.
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: polynomial-time reductions and NP-completeness.
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.
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.
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, number-theoretic algorithms and numerical algorithms. Introduction to NP-completeness.
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, tree-based methods for multiple sequence alignment, suffix-tree, suffix-array and Burrows-Wheeler Transform for short read alignment, and algorithms based on de Bruijn graphs for sequence assembly
2. Statistical modeling: forward, backward, Viterbi and Baum-Welch algorithms for hidden Markov models, Gibbs sampling for sequence motif discovery, and Bayesian classifiers, logistic regression and expectation-maximization for data classification and clustering
3. Phylogenetics: methods based on Jukes-Cantor and Kimura models for divergence time estimation, maximum parsimony, UPGMA, Neighbor-joining and maximum likelihood methods for phylogenetic tree reconstruction.
4. High-throughput data analysis: Hierarchical clustering and k-means 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.
Fundamentals of Artificial Intelligence
Basic concepts and techniques of artificial intelligence. Knowledge representation: predicate logic and inference, semantic networks, scripts and frames, and object-oriented representation. Searching: such as A*, hill-climbing, minimax and alpha-beta 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.
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.
Industrial and professional workshops or seminars as required by the Major programme.
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.
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.
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.
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); data-Dr.iven synthesis; visual perception; high dynamic range imaging and tone mapping; image-based lighting; non-photorealistic rendering; and other applications in photography.
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.
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.
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 high-level 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.
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.
Open-Source 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.
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.
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 real-world cloud services (e.g. Amazon EC2, Windows Azure). This course will emphasize applied methodologies of using cloud computing for solving practical engineering problems.
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 multi-disciplinary in nature, and it is suitable for engineering, science, mathematics, economics or business students.
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.
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.
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.
Data Communication and Computer Networks
This course aims to introduce fundamental concepts and technologies in computer networking. The course adopts a top-down 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.
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.
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.
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 line-segment 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
External Memory Data Structures
This course will introduce worst-case 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
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, Ying-Yang alternation updating, and five action circling implementation).
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, high-throughput 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.
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.
Advanced Topics in Social Computing
This course aims to advance computational techniques used in social computing. More specifically, the course will present state-of-the-art 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, link-based 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.
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.
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.
Exclusion: CSCI5705 and SEEM5010
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 case-control 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.
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.
Theory of Computation Complexity
The course introduces some of the following topics: deterministic and non-deterministic Turing machine, time and space complexity, NP-completeness, 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, complexity-based cryptography, randomness-related topics such as derandomness, pseudorandomness, extractors, random walks, etc.
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.
Advanced Computer Graphics and Visualization
This course provides in-depth treatment of the following advanced computer graphics and visualization topics: radiosity rendering and global illumination, procedure texturing and modelling, image-based rendering, stereo imaging, real-time volume graphics and interactive visualization.
Prerequisite: CSCI3260 or equivalent
Combinatorial Search and Optimization with Constraints
Students will be exposed to various constraint-based 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.
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 e-commerce.
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.
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 NP-completeness of graph problems. The course will also discuss FPT algorithms for solving graph problems.
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 zero-sum 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
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.
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 real-time 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 (general-purpose computing in GPU), limitations of GPU, and case studies of advanced usages of GPU.
Prerequisite: CSCI2100 or CSCI2520 or equivalent
Autonomous Agents and Multiagent Systems
Characteristics of autonomous agents. Agent architectures: BELIEF-DESIRE-INTENTION architecture, purely reactive architectures and hybrid architecture. Multiagent systems: speech acts theory, agent communication, and agent cooperation protocols. Agent-oriented programming. Distributed hierarchical planning. Distributed rational decision making: protocols and strategies, Nash equilibrium and Pareto optimality, auctions, voting, Clarke tax, OCSM-contracts. Argumentation and negotiation.
- CSCI5440 Theory of Cryptography
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, semi-random method). Then we will show how these tools and methods can be used to design randomized algorithms (e.g. graph algorithms, number-theoretic 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, k-wise independence, small-bias space, pseudorandom generator).
This course introduces the fundamental and advanced research topics in virtual reality (VR), including VR tools & metaphors, multi-sensory interactions, geometric and behavior modeling, touch-enabled interfaces, real-time navigation, human factors in immersion, augmented reality systems, and internet-based VR applications. The web-based virtual reality interfaces plus 3D graphics engines build up the developing tools for testing the innovation for the advanced VR research and real-time applications.
Prerequisite: CSCI3260 or equivalent
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, large-scale 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
Big Data Analytics
This course aims at teaching students the state-of-the-art 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 map-reduce technology; similarity search techniques for big data such as minhash, locality-sensitive 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, location-based services, social networks, recommender systems, healthcare services, or other scientific applications.
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
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 non-interactive settings, privacy preserving algorithms, privacy in auctions, privacy and learning, and lower bounds on privacy.
Advanced File and Storage Systems
This course aims to introduce important systems-level 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., log-structured 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
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
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, in-memory 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.
Online Algorithms for Machine Learning and Optimizations
This course aims to cover topics in online learning and online optimization. Typical topics include multi-armed 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
Engineering Physics: Electromagnetics, Optics and Modern Physics
This is an introductory calculus-based 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, Biot-Savart 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: wave-particle 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.
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: 3-D vector space and algebra; vector differential calculus, gradient, divergence, curl; vector integral calculus, Green's theorem, Gauss's theorem, Stoke's theorem.
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 full-time 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 professor-in-charge, 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 professor-in-charge’s comment on internship undertaken before enrolling in the course.
Work-Study, the 12-month 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)
Digital Logic and Systems
Digital concepts; number systems; operations and codes; logic gates; Boolean algebra and logic simplification; combinational logic; functions of combinational logic; flip-flops and related devices; counters; finite state machines; programmable logic devices - programming and sequential logic applications; memory and storage; integrated circuit technologies.
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.
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.
Discrete Mathematics for Engineers
Set theory, functions, relations, combinatorics, graph theory, algebraic systems, propositional and predicate logic.
Introduction to Engineering Entrepreneurship
The 1-unit 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.
Engineering Entrepreneurship Development Project
The 2-unit 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 pre-alpha 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).
Web-scale Information Analytics
The course discusses data-intensive 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 large-scale 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 Item-sets and Association Rules ; Finding Similar Items in high-dimensional data ; Dimensionality Reduction techniques ; Clustering ; Recommendation systems ; Analysis of Massive Graphs and its applications on the World Wide Web ; Large-scale supervised machine learning; Processing and mining of Data Streams and their applications on large-scale network/ online-activity monitoring.
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.