1. To introduce the notation, terminology, and techniques underpinning the study of algorithms. 2. To introduce the standard algorithmic design paradigms employed in the development of efficient algorithmic solutions. 3. To introduce the mathematical tools needed for the analysis of algorithms in terms of the use of formal models of Time and Space
At the end of this module students should be able to:
1. describe standard algorithms such as sorting algorithms, search algorithms, string matching algorithms, graph traversal of algorithms;
2. apply these algorithms or a given pseudo code algorithm in order to solve a given problem;
3. carry out simple asymptotic analyses of algorithms involving sequence, selection, and iteration, and identify and compare simple properties of these algorithms;
4. describe the algorithm design principles of divide-and-conquer, greedy method, and dynamic programming and distinguish the differences between these principles;
5. apply the studied algorithms that illustrate these design principles;
6. apply the studied design principles to produce algorithmic solutions to a given problem; and
7. explain and illustrate the distinction between different classes of problems, in particular, polynomial time and exponential time solvable problems.
In each normal week, students will be expected to attend a three-hour formal lecture and to participate in a one-hour supervised problem class. Lectures will introduce students to the academic content and practical skills which are the subject of the module, while problem classes will allow students to practice those skills. In addition, students will be expected to devote 8 hours of unsupervised time for private study. Private study will provide time for reflection and consideration of lecture material and background reading. Two assessments will be used to test to what extent practical skills have been learnt. A written examination at the end of the module will assess the academic achievement of students.