Course Description
Principles of design of efficient algorithms: recursion, divide and conquer, balancing, dynamic programming, greedy method, data structure selection. Correctness and analysis of algorithms. Examples drawn from problems in sorting, searching, set manipulation, pattern matching, graphs, matrices, polynomials, and integers.
Intended Learning Outcomes
CILO-1: Apply basic and advanced algorithm design techniques such as data structures, divide-and-conquer, dynamic programming, greedy and graph paradigms to analyse and design for different computer science problems.
CILO-2: Evaluate and argue the correctness of algorithms using inductive proofs and invariants, and provide upper and lower bounds for the complexity of the algorithms.
CILO-3: Present the design of the algorithms and mathematical proofs, in both written and verbal formats effectively.