Learning outcomes
The student will be able to :
-
formalize a problem described informally (specify) ;
-
systematically build a correct and efficient program solving this problem.
Objectives
Learn rigourous methods for efficient algorithm construction.
Content
We base our methods on formal proofs, of runtime and memory consumption. We use recursivity systematically. The methods selected are:
-
divide-and-conquer
-
memoization and dynamic programming
-
the greedy method
-
generate-and-test and its improvements : branch-and-bound, propagation
Table of contents
Part O. Specification by pre- and post-conditions, of proofs by invariants and variants. Runtime evaluation (complexity). Recursivity.
Part I. Programming methods:
-
divide-and-conquer
-
memoization and dynamic programming
-
the greedy method
-
generate-and-test and its improvements
Part II. Data structures. Data types. Lists. Hash tables. Binary search trees. Red-black trees. B-trees.
Teaching methods
Course of lectures illustrated with many examples. The students should actively develop new examples by themselves.
Evaluations
10% Small homeworks along the semester
20% A project with 3 problems to solve, to finish by the end of the teaching semester
70% A written examination, where new problems are posed and new, efficient solutions should be discovered by the students on basis of the methods learned in the course.
Recommended readings
The course follows a selection of chapters from: Introduction to Algorithms ( Second Edition), T. Cormen, C. Leiserson, R. Rivest, C. Stein, MIT Press.
Language of instruction
French / Français
Location for course
NAMUR
Organizer
Faculté d'informatique
rue Grandgagnage 21
5000 NAMUR
P. 081725252
F. 081724967
secretariat.info@unamur.be
Degree of Reference
Undergraduate Degree