Acknowledgements: Parts of this course were developed by Joshua Knowles, Peter Jinks and Jon Shapiro.
This is arranged differently from some other courses. To reflect its practical nature there is one laboratory session (2 hours) per week and one lecture (1 hour) per week.
Warning: Lectures do not provide all the information you will need for the course, or to complete the laboratory exercises. You are expected to read additional material  this is part of developing algorithmic literacy. Lectures will, in the main, provide guidance on the structure of the course material, look briefly at some algorithms and algorithmic techniques, and, through invited lectures, look at areas of application of algorithms, for example in medicine and the biosciences, and in social sciences.
Normally, there will be ONE laboratory session and ONE lecture per week. The schedule is given in detail below.
Procedures for the Arcade records of your lab sessions:
Lectures start in Week 1, Laboratory exercises in Week 2.
Laboratory guidance
First Semester  

week  LECTURE  LAB 
Welcome/Registration Week  No laboratory session in Week 0 or Week 1.  
1  David Rydeheard: Introduction  Algorithms and their Performance  
2  Milan Mihajlovic: C  Introduction, Input/Output (in PowerPoint)
SalaryAnalysis: Java, C and diff  David Rydeheard: Lab  Algorithm Design and Performance (Paper and pencil exercises.) 
3  Milan Mihajlovic: C  Simple Data Structures (in PowerPoint), Q&A  Milan Mihajlovic: Lab  Compiling & running C; Input/Output 
4  Milan Mihajlovic: C  Recursive Data Structures (in PowerPoint), Q&A  Milan Mihajlovic: Lab  Arrays and Strings 
5  Milan Mihajlovic: C  Coping without Classes (in PowerPoint)  Milan Mihajlovic: Lab  Arrays and Memory management 
Reading Week  
7  Ian PrattHartmann: Introducing Complexity. For these two lectures, you should read pp. 150, pp. 689690 and pp. 695696 of the course textbook "Algorithm Design and Applications" by Goodrich and Tamassia.  Milan Mihajlovic: Lab  Pointers and Lists 
8  Ian PrattHartmann: Introducing Complexity.  Milan Mihajlovic: Lab  Pangolins 
9  Ian PrattHartmann: Basic sorting algorithms + Sorting Movies and Interactive Animations + quicksortlearner.c, demo1.c, demo2.c, demo3.c  
10  Ian PrattHartmann: Determinants and permanents  Ian PrattHartmann: Lab  PublicKey Cryptosystems 
11  (no lecture)  
12  Ian PrattHartmann: How to pass the exam. Warning: on the exam this year, there are two compulsory questions.  Ian PrattHartmann: Lab  Lexicographic Sorting 
Second Semester Easter break is 26th March  13th April (between Weeks 8 and 9). Monday 7th May (Week 12) is a Bank Holiday.  
week  LECTURE  LAB
Semester 2 labs may include marks for correctness arguments. 
1  Milan Mihajlovic: Data structures  Trees and Hash Tables. Correctness and complexity of algorithms. Slides 1, Slides 2, Slides 3  The labs this week (Week 1) are marking sessions only. 
2  Milan Mihajlovic: Lab spellchecker  
3  
4  David Rydeheard: Where do algorithms come from? Algorithmic techniques (1). Slides  
5  David Rydeheard: Algorithmic techniques (2): Tractable and intractable problems. Slides  Warning: To undertake this exercise you will need to read this
material on the Knapsack problems. (See also the material in the Resources
section above). Ian PrattHartmann: Lab Application development  Knapsack problem (Examinable lab) 
6  David Rydeheard. Graphs I: Applications, representations, basic algorithms, correctness and complexity. Slides  
7  David Rydeheard. Graphs II: Traversal techniques David Rydeheard. Graphs III: Survey of Graph Algorithms  
8  Milan Mihajlovic: Lab Graph Representation and Traversal  
9  Invited speaker: Prof. Andy Brass (Life Sciences and Computer Science): Genetic and protein matching  Knapsack techniques in action in life sciences and medicine.  Milan Mihajlovic: Lab Testing the smallworld hypothesis (Examinable Lab).

10  Revision lecture  
11  
12 
There are marking sessions this week at the usual lab times. However, the Monday is a public holiday, so on the next Monday there will be a lab session (Monday May 14th).
This is normally your last chance to get lab work marked 
C programming is assessed only via the laboratory exercises.
The full (two semester) course is assessed as follows:
Format: 1.5 hour exam: 2 questions, answer both.
The material covered in this exam is that of Semester 1, except that the C programming language is not examined (it is assessed in the laboratory exercises instead). Thus the exam covers Algorithm Development, Algorithm Performance Measures and Complexity, Sorting Algorithms and other lectured material and laboratory exercises in Semester 1, and related material in the course textbook, including material on cryptosystems and modular arithmetic, and on matrices, determinants and permanents.
The syllabus is defined by the lecture slides. The slides also contain references to specific sections of the coursebook that it is necessary to read. It is expected that you do this reading. Bear in mind that lectures are for getting a general understanding of a particular topic; textbooks are for details. In a very few cases, the indicated sections of the textbook contain explanations of specific topics not addressed in the lectures. In such cases, it is reasonable to suppose that detailed questions about this material will not appear on the examination. On the other hand, understanding general techniques and method of approach is likely to be useful in answering examination questions.
As always, the advice on scheduling revision is to start by getting a good general appreciation of the topics, and then progressively to deepen one's understanding. Never bet on a particular topic occurring: only a part of what we covered can be examined.
The examination is 2 hours in duration, with 3 questions. You are asked to answer all questions.
Examinable topics are: Graphs and graph navigation, Trees and hashing, Optimisation and knapsacktype problems, Trees, graphs and associated algorithms. Two of the questions are based on material in laboratory exercises.
You will need to know the material from both semesters to answer the questions successfully.
A Revision Guidance document outlining the parts of the course textbook relevant for the summer examination should help in your revision.
For samples of the kinds of questions you may be asked, see previous years' examination papers online, but the format may be different, and course content changes from yeartoyear.
Notes, questions and answers to help those who need additional mathematical support.
Guidance for ResitsIf, after the summer examinations, you have performed poorly overall and also in this course unit, you may be asked to resit this course unit (either the laboratory exercises, the examination, or both). Here are some guidelines for your resits. If you have to retake laboratory exercises, marking sessions will be arranged in the resit period (see below for arrangements for resitting laboratory exercises). Assessment: To pass this course unit at the resit stage, your resit courseunit mark will be calculated as follows.
