1. AC12.01 | Analyser un problème avec méthode Pour chaque version, nous avons dû comprendre précisément le problème posé, identifier les limites de l’implémentation brute (croissance exponentielle des appels récursifs), puis formuler des hypothèses sur ce qui ralentissait l’exécution.
2. AC12.02 | Comparer des algorithmes pour des problèmes classiques Nous avons codé les 5 versions successives du programme, en mesurant l’efficacité de la méthode estGagnante() avec deux indicateurs :
Nous avons construit des graphiques comparatifs montrant l’évolution de ces deux métriques en fonction du nombre d’allumettes n. Chaque version apportait des gains de performance, que nous avons interprétés dans le rapport PDF.
3. AC12.03 | Formaliser et mettre en oeuvre des outils mathématiques pour l’informatique Les versions avancées reposaient sur des propriétés mathématiques issues de la théorie des jeux :
J’ai codé des fonctions spécifiques pour exploiter ces propriétés dans les algorithmes.
Dans cette SAE, nous devions développer plusieurs versions d’un même programme Java permettant de jouer au jeu de Grundy, en y intégrant une intelligence artificielle. J’ai travaillé en binôme, mais j’ai été très impliqué dans les choix algorithmiques et l’analyse des performances.
Nous avons d’abord compris le fonctionnement de la version récursive brute, avant de proposer des optimisations progressives (mémorisation des situations perdantes, puis gagnantes, puis simplifications mathématiques). J’ai pris en charge le développement des versions 0 à 2 ainsi que la réalisation des tests d’efficacité (nombre d’appels récursifs, temps d’exécution, etc.).