At the end of this course, students will be able to:
- Understand algorithm analysis methods, and understand how to analyse a given algorithm
- Differentiate efficient vs. non-efficient algorithmic solutions
- Understand and apply various known algorithms in the literature to a given computational problem.
- Understand the behaviour of a given algorithm, and predicting the quality of the algorithm in terms of its efficiency
- Check the correctness of a given algorithm in terms of solving the computational problem
- Remember and use a large number of well-known algorithms and their computational complexities in the literature
- Critique different algorithms in terms time and space efficiency and for the same problem
- Interpret a computational problem specification and implement a solution in a programming language to solve that problem efficiently
- Construct new algorithms for new problems and critique the algorithmic solutions in terms time and space efficiency
- Modify an existing algorithm to a new problem to accommodate for extension and/or change of problem specifications
- Design a modular solution to a problem by decomposing it into smaller sub-problems