Understand algorithm design techniques, and understand how and when to use appropriate technique to a given computational problem.
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 in the literature.
Critique different algorithms for the same problem.
Interpret a computational problem specification and implement a solution in a programming language to solve that problem.
Construct new algorithms for new problems.
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.