This unit teaches you data structures, algorithms, and algorithm analysis. When faced with a challenging software problem to solve, it is important to be familiar with a range of clever, but general algorithms and data structures that others in the field have already developed. When no ready-made solution exists, it is important to understand and be guided by the general principles of algorithm design, and to draw upon the experience of the profession in creating new methods. You will learn how to analyse the time efficiency of new and existing algorithms, to determine their suitability for the task at hand. And most importantly, you will learn how to apply your knowledge to solve practical real-world problems.