- ECTS- 9 crédits 
- Composante- UFR Mathématiques 
- Volume horaire- 84h 
Description
Consolidation des connaissances en algorithmique, connaissance des rudiments de la complexité et des approches algorithmiques classiques.
Le cours est en partie mutualisé avec le master Math-Info.
- les étudiants du M1 mathématiques suivent les deux parties du cours (sur 12 semaines)
- les étudiants du M1 mathématiques-informatique suivent la seconde partie du cours (sur les 8 dernières semaines). Les étudiants de cette filière peuvent néanmoins suivre la première partie s'ils le désirent.
Algorithmique
- Algorithmes (tris, ... ) et méthodes algorithmiques (diviser pour régner, recherche exhaustive, programmation dynamique, algorithmes gloutons) de bases.
- Structures de données classiques : liste, file, pile, arbre, graphes, table de hachage.
- Graphes, algorithmes classiques de base : parcours, recherche de cycle, tri topologique, arbre de recouvrement, décomposition en composantes connexes, plus courts chemins
- Maîtrise d'un langage de programmation impératif
Volume horaire : 3h CM + 4h TD/TP pendant 4 semaines puis 1h TP pendant 8 semaines
Complexité
- Introduction : modèle de calcul, pseudo-langage
- Situer la difficulté algorithmique de certains problèmes classiques. Quelques exemples :
- Temps polynomial : méthodes de tris, plus courts chemins
- Problèmes nécessitant peu de mémoire : accessibilité de deux sommets dans un graphe
- Problèmes nécessitant beaucoup de temps et/ou de mémoire
 
- Formalisation des mesures de complexité en temps et espace.
- Réductions entre problèmes : transitivité, notion de complétude, problème "représentatif" d'une difficulté algorithmique
- Problèmes réputés difficiles en temps
- Problèmes difficiles en théorie et en pratique, exemples.
- NP : définition (algorithmes non-déterministe, witness-checking), NP-complétude
- Théorème de Cook-Levin : SAT est NP-complet
- Exemples de problèmes NP-complets et réductions : cliques, ensembles indépendants maximaux, recouvrement des sommets d'un graphe (Vertex Cover), ordonnancement de tâches, contraintes, ....
- Résolution pratiques de problèmes difficiles : SAT-solver pour le problème de satisfaisabilité, approches pratiques type kernelization pour les problèmes paramétrés (exemple de Vertex Cover)
 
- Problèmes réputés difficiles en espace (et au delà)
- Espace mémoire polynomial (PSPACE) : définition et exemple (recherche de stratégie gagnante dans des jeux)
- Problèmes PSPACE-complets
 
- Algorithmique parallèle
- Problèmes parallélisables efficacement. Exemples : implémentation des opérations arithmétiques usuelles, multiplication matricielle, matching maximal dans un graphe
- Classes de complexité parallèle et circuits (NC et AC)
- Problèmes non-parallélisables efficacement: P-complétude, exemples
 
- Perspective : comparaison des classes de complexité (efficacité comparée des approches algorithmiques), hiérarchie en temps et en espace
- Ouvertures possibles : rudiments sur les algorithmes d'approximation, algorithmes probabilistes
Volume horaire: 3h CM + 3h TD sur 8 semaines
Heures d'enseignement
- AlgorithmiqueCours Magistral24h
- Algorithmique16h
- AlgorithmiqueTravaux Pratiques8h
- Complexité Cours Magistral24h
- ComplexitéTravaux Dirigés24h
Syllabus
Bibliographie
- Arora, S., & Barak, B. (2009). Computational complexity: a modern approach. Cambridge University Press.
- Dasgupta, S., Papadimitriou, C.H., and Vazirani U.V. (2008). Algorithms. McGraw-Hill.
- Manber, U. (1989). Introduction to algorithms: a creative approach. Reading, MA: Addison-Wesley.
Dernière mise à jour le 10 juillet 2023


