Approaches to analysing algorithm complexity and implementation efficiency will be introduced; and used to motivate the development of appropriate abstract data types. Students will be taught to recognise the role of abstract data types and algorithms in solving real-world problems; and given the opportunity to implement solutions to such problems.