Présentation du cours

L'écriture d'un programme est souvent l'objet d'un compromis entre son temps d'exécution (efficacité algorithmique de la solution codée) et son temps de développement (réflexion, implémentation et débuggage). Deux attitudes caricaturales sont : a) rechercher la solution la plus efficace théoriquement (c.-à-d. quand n temps vers l'infini) même si elle est très compliquée à implémenter ou b) implémenter la première idée venue. L'objectif de ce cours est d'essayer de trouver un équilibre entre ces deux façons d'agir, idéalement de développer rapidement et de façon sûre une solution efficace sans avoir à débugguer. Le choix de la solution à retenir repose typiquement sur le temps disponible d'une part et les caractéristiques particulières des instances à résoudre d'autre part (taille, décomposition éventuelle,...). Le choix de la structure de données est également un paramètre crucial d'efficacité.

Dans ce cours, nous étudirons différents problèmes (algorithmiques purs) que nous cherchons à résoudre effectivement en écrivant un programme (dans le langage de votre choix - C/C++/Java/Ocaml/...) qui sera testé/validé sur des jeux de données.

L'objectif de ce cours est à la fois d'obtenir une compréhension profonde des algorithmes classiques et de leurs performances réelles, et d'apprendre à résoudre efficacement et effectivement un problème algorithmique.

Le cours se déroulera en salle machine et se décomposera en essentiellement deux types de sessions:

  • Algorithmique avancée et implémentation des algorithmes :
    • algorithmes classiques : enveloppe convexe, couplage parfait, flot, systèmes dans Z/2Z, composantes fortement connexes, branch-and-bound, algorithme de Gauss,...
    • structures de données classiques : différentes tables de hachage, tables dynamiques, tas, union-find,...
  • Résolution effective de problèmes  :
    • choisir la structure de données, écrire un pseudo-code lisible, implémenter, éviter d'avoir à débugguer
    • en temps limité ou non

Ce cours a également pour but de préparer trois équipes d'étudiants (environ) au concours d'algorithmique et programmation « ACM International Collegiate Programming Contest », et dans le cadre de cette préparation, de constituer une base de données d'algorithmes écrits de façon lisible et efficace qui accompagnera nos candidats (un listing de 50 pages de code est autorisé lors des épreuves).

The lectures can be done in english upon request.

L'ouvrage de référence :

Autres ouvrages utiles

  • T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms. MIT Press, 2nde éd. (2001), ISBN: 0-262-03293-7. Traduit en français par X. Cazin et G.-L. Kocher, Dunod (2002), ISBN: 2-10-003922-9.

Archives 2004-2005

Le cours

Les TPs

Partiel et Examen

Base de données

Liens

Le concours ACM :

 
Dernière mise à jour le 12 décembre, 2008 14:02