Understand algorithm analysis methods, and understand how to analyze a given algorithm.

Differentiate effieicent vs non-efficient algorthmic 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.