Le cours est divisé en trois grandes parties :
1. Analyse de programmes
- propriétés de base des algorithmes : terminaison, correction, complétude, complexité
- preuves inductives et invariants
- modèles de calcul de complexité
- décidabilité et complexité des problèmes algorithmiques
- complexité en pratique : pire cas, meilleur cas, algorithmes récursifs
- complexité en moyenne et algorithmes probabilistes
2. Paradigmes de conception d'algorithmes
- énumération exhaustive
- backtracking
- diviser pour régner
- programmation dynamique
- algorithmes gloutons
- transformations de problèmes
3. Structures de données
- tableaux et listes
- complexité amortie
- files et piles
- files de priorités, tas
- arbres binaires de recherche et arbres AVL
- tables de hachage
Les TPs permettront de mettre tout cela en pratique au travers de la conception et du développement d'un outil de compression de fichiers.
- Manager: Didier Lime