Learning Outcomes At the end of the course, students should be able to:
explain the use of big-O, omega, and theta notation to describe the amount of work done by an algorithm,
use big-O, omega, and theta notation to give asymptotic upper, lower, and tight bounds on time and space complexity of algorithms,
determine the time and space complexity of simple algorithms,
deduce recurrence relations that describe the time complexity of recursively defined algorithms,
solve elementary recurrence relations,
for each of the strategies (brute-force, greedy, divide-and-conquer, recursive backtracking, and dynamic programming), identify a practical example to which it would apply,
use pattern matching to analyse substrings, and
use numerical approximation to solve mathematical problems, such as finding the roots of a polynomial.
Course Contents Basic algorithmic analysis. Asymptotic analysis of Upper and average complexity bounds. Standard Complexity Classes. Time and space trade-offs in analysis recursive algorithms. Algorithmic Strategies. Fundamental computing algorithms. Numerical algorithms. Sequential and Binary search algorithms. Sorting algorithms, Binary Search trees. Hash tables. Graphs and their representation.