This unit introduces you to core problem-solving, analytical skills, and methodologies useful for developing flexible, robust, and maintainable software. In doing this, it covers a range of conceptual levels, from fundamental algorithms and data structures, down to their efficient implementation as well as complexity. Topics include data types, data structures, algorithms, algorithmic complexity, recursion, and their practical applications.
This unit has a requirement of 1-2 hours per week of asynchronous learning. Minimum total expected workload to achieve the learning outcomes for this unit is 144 hours per semester typically comprising a mixture of scheduled online and face to face learning activities and independent study. Independent study may include associated reading and preparation for scheduled teaching activities.
Determine appropriate basic abstract data types, including; stacks, queues, lists, binary trees, priority queues, heaps and hash tables; for specific contexts;
Theoretically and experimentally evaluate different implementations of basic abstract data types;
Analyse the efficiency of algorithms by determining their best-case and worst-case big-O time complexity;
Translate problem statements into algorithms and implement them in a high level programming language;
