"The Feynman Problem Solving Algorithm: (1) write down the problem; (2) think very hard; (3) write down the answer." *Richard Feynman*

"Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better." *Edsger Dijkstra*

"Beware of bugs in the above code. I have only proved it correct, not tried it." *Donald Knuth*

"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.", *Tony Hoare*

"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.", *Donald Knuth*

At the core of most computer applications is the storage and retrieval of information. The way that the stored data is structured has a strong impact on what can be retrieved, how quickly it can be retrieved and how much space it occupies. The use of generic structures, or abstract data types (ADTs), to encapsulate the data also allows software engineering principles of independent modification, extension and re-use.

The unit studies the specification, implementations and time and space performance of a range of commonly used ADTs and corresponding algorithms in an object-oriented setting. The aim is to provide students with the background needed both to implement their own ADTs where necessary, and to select and use appropriate ADTs from object-oriented libraries where suitable.

**Outcomes:**
Students develop an understanding of the fundamentals of data structure selection, analysis, design, implementation and application, and in-depth technical knowledge of key abstract data types; the ability to undertake problem identification, formulation and solution using ADT components for storing and retrieving data; and the ability to select and use appropriate ADTs for object-oriented libraries where suitable. Also, students gain in-depth technical competence in algorithm design, implementation and analysis and learn techniques for problem identification, formulation and solution.

- Data Structures and Problem Solving Using Java, by Weiss.
- Introduction to Algorithms, by Cormen, Lieserson, Rivest and Stein (any edition will do).

Type | Time | Day | Location |
---|---|---|---|

Lecture | 2-3pm | Tuesday | Maths: Weatherburn LT |

Lecture | 8-9am | Thursday | Physics:Ross LT |

Workshop | 9-10am | Thursday | Physics:Ross LT (starting week 2) |

Laboratory | 12pm-2pm | Monday | CSSE Lab 2.05 |

Laboratory | 4pm-6pm | Monday | CSSE Lab 2.03 |

Laboratory | 3pm-5pm | Tuesday | CSSE Lab 2.03 |

Laboratory | 4pm-6pm | Wednesday | CSSE Lab 2.03 |

Laboratory | 2pm-4pm | Thursday | CSSE Lab 2.03 |

Laboratory | 4pm-6pm | Thursday | CSSE Lab 2.03 |

Assessment | % of final mark | Assessment Dates |
---|---|---|

Laboratories | 8 x 2.5% | various |

Mid-semester test | 10% | 2pm, Tuesday, April 10 |

Project | 20% | Available:
April 25 Due: 11:59pm Friday, June 1 |

Final exam | 50% | End of Semester Examination Period |