## About CS2516

Algorithms are specifications of processes for carrying out tasks. Implementations of algorithms are running on every computer, and they are at the core of much of what happens in modern life. Understanding algorithms and being able to design algorithms for specific tasks are fundamental skills for computer scientists and software engineers.

This module builds on the material of CS2515 (Algorithms and Data Structures I). We will look at more precise methods of analysing algorithm complexity. We will study algorithms for sorting and selection, considering the fundamental limits of any sorting algorithm. We will study algorithms and data structures for processing graphs, including those for route finding in road networks and for processing social network graphs. We will also consider algorithms and applications for fast processing of text.

The module assumes you are comfortable with all the material from CS2515, and from CS1112 and CS1113 (i.e. sets, functions, relations, logic, the concept of graphs and trees, basic algorithm analysis, array-based lists, linked data structures, stacks, queues, binary trees, AVL trees, dictionaries, priority queues, binary heaps and hash tables, and the basics of object-oriented programming in Python 3).