Data structures and algorithms are fundamental to programming and to understand computation. The purpose of this module is to provide students with a coherent introduction to techniques for using data structures and some basic algorithms, and with the tools for applying these techniques to computational problems. Teaching and learning methods include lectures and reading materials which describe algorithmic techniques and applications of these techniques to specific problems. Problem sheets give students opportunities to practice problem solving.
On completion of the module the student will be able to:
Understand a variety of data structures and be able to use them effectively in design and implementation of algorithms.
- Understand a variety of techniques for designing efficient algorithms, proving their correctness, and analyzing their efficiency.
- Understand some fundamental algorithmic problems and algorithms for solving them.
- Basics of algorithm analysis.
- Elementary graph algorithms.
- Greedy algorithms.
- Divide-and-conquer algorithms.
- Dynamic programming.
- Network flows.
- NP and computational intractability.