Skip to main content Skip to navigation

CY903 Practical Algorithms and Data Structures

This course is taught by the International Digital Laboratory, WMG. CSC taught-MSc students are entitled to take these for credit.

Comment from student feedback

"This was an excellent module. Very useful training in the fundamentals of computer science - was exactly what I wanted. Excellent coverage of lots of topics. Also great opportunity to work on C++ programming, as CY901 only allows C. The fluid dynamics model in the slides was also interesting!"

Current Lecturer:

Kurt Debattista 

Current Course Homepage:

Academic Year 2015-16 weeks 4 - 10  

Warwick Students: Days Time Room Nottingham Students: Days Time  
Monday 11:00-13:00 P523 Tuesday 27th October 14.00-16.00 Notts Access Grid Room
      Monday 2nd Nov onwards 11.00-13.00 Notts Access Grid Room
Wednesday 10.00-12.00 A0.01 Wednesday 10.00-12.00

Skype address







The module provides students with a coherent introduction to uni- and shared memory multi-processor data structures with a strong focus on practical scientific computing algorithms and parallel computing. The primary focus of this module will be to educate students on the primary building blocks required to solve problems using modern desktop machines composed of uniprocessors or multicore/multiprocessors.

Teaching and learning methods include lectures and reading material as well as weekly practical computer laboratory sessions.

Learning Outcomes:

By the end of the module the student should be able to:

  • Understand and develop a variety of techniques for designing algorithms both on uni- and multi-processor technology

  • Design a variety of data structures and algorithms and should be able to use them appropriately to solve problems in scientific computing

  • Understand some fundamental algorithms used in scientific computing and solve computational problems using these algorithms

  • Develop new or re-use already existing efficient algorithms to solve problems

  • Comprehend algorithmic complexity and be able to make educated choices when problem solving

  • Comprehend the importance of parallelism on modern desktop PCs and understand the pitfalls when designing algorithms for such machines


Support for this course is provided by a web based bulletin board. Please do not email the lecturer directly with questions and requests for help, but submit them to this forum so that everyone can see them (and answer them) and so that we have an archive of questions raised. All submissions to the bulletin board are also emailed to the lecturer so he will see them all.


Part 1 - Practical Uniprocessor Algorithms and Data Structures

  • Sorting and searching
  • Data structures
  • Trees and Heaps
  • Complexity and computability (slightly theoretical with practical examples)
  • Advanced Algorithmic methods

Part 2 - Practical Multiprocessor Algorithms and Data Structures for Shared Memory Multiprocessors

  • Parallel algorithms
  • Practical parallel data structures
  • Advanced methods

Illustrative Bibliography

Introduction to Algorithms
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein.
MIT Press; 2nd edition, 2001 (3rd edition available from 1 Sep 2009)

Algorithmics: The Spirit of Computing
D. Harel, Y. Feldman
Addison Wesley; 3rd edition, 2004

The Art of Multiprocessor Programming
M. Herlihy, N. Shavit
Morgan Kaufmann, 2008