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: In addition, 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: Dictionary lookup and string matching  Ian PrattHartmann: Lab  PublicKey Cryptosystems 
11  Ian PrattHartmann: How to pass the exam. Here is the paper we shall go through. Warning: on the actual exam, there are three questions, of which you have to answer two.  
12  (no lecture)  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  Invited speaker: Prof. Martin Everett (Social Sciences): Social Network Analysis  modelling and analysis of communities using graph algorithms.
Exam Feedback session: To be arranged in this period David Rydeheard. Graphs II: Traversal techniques  
8  Milan Mihajlovic: Lab Graph Representation and Traversal  
9  David Rydeheard. Graphs III: Survey of Graph Algorithms.  Milan Mihajlovic: Lab Testing the smallworld hypothesis (Examinable Lab).

10  Invited speaker: Prof. Andy Brass (Life Sciences and Computer Science): Genetic and protein matching  Knapsack techniques in action in life sciences and medicine.  
11  Revision lecture. Slides: Revision advice  
12  A revision lecture may be arranged at a suitable time 
There are marking sessions this week at the usual lab times.
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: Answer any 2 questions out of 3.
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, and Sorting Algorithms, as in lectures and exercises in Semester 1 and in the course textbook.
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 (e.g. amortized analysis). 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 the general techniques and method of approach is likely to be useful when tackling examination questions. We have actually been quite careful (within reason) not to recommend reading unless it really is pertinent to the course.
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. You are asked to answer 3 questions out of 4:
(1) Graphs and graph navigation, (2) Trees and hashing, (3) Optimisation and knapsacktype problems, (4) 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 last year's examination.
Joshua Knowles's Revision slides give a sample answer to an exam question from several years ago on Knapsack problems.
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.
Resit Examination: The examination has FIVE questions of which you answer three, at least one from Section A (2 questions on the lab examinable exercises), and at least one from Section B (3 questions on the course material over the two semesters). 