École Privée d’Ingénierie du Niger — L’école du nouveau monde

✉ elearning@epiniger.edu.ne    🌐 epiniger.edu.ne

Filière : Master Professionnel en Informatique, option Génie Logiciel (MGL)

  • Intelligence artificielle

    Ce cours présente les fondements scientifiques et les techniques opérationnelles de l’intelligence artificielle (IA) dans une perspective d’ingénieur logiciel. Il part de la notion d’agent rationnel et de la formalisation d’un problème en espace d’états, passe par les algorithmes de recherche aveugle et heuristique (A*, minimax, élagage alpha-bêta), la représentation des connaissances (logique, règles, systèmes experts, raisonnement incertain), puis introduit l’apprentissage automatique (arbres de décision, classification bayésienne, perceptron et réseaux de neurones) et son évaluation. Les exemples sont tirés du contexte nigérien : planification d’itinéraires entre Niamey et Zinder, scoring de crédit en microfinance, détection de fraude sur le mobile money, filtrage de SMS indésirables. Une attention particulière est portée à l’intégration de composants d’IA dans des applications logicielles et aux enjeux éthiques (biais, explicabilité, protection des données).

    Objectifs d’apprentissage

    • Formaliser un problème en termes d’agent, d’environnement, d’espace d’états et de fonction de coût.
    • Choisir, dérouler et comparer des algorithmes de recherche (largeur, coût uniforme, glouton, A*, minimax, alpha-bêta) en justifiant complétude et optimalité.
    • Représenter des connaissances en logique et en règles de production, et construire un petit système expert à chaînage avant et arrière.
    • Appliquer le raisonnement probabiliste (théorème de Bayes, classifieur bayésien naïf) à un problème de décision.
    • Entraîner et évaluer des modèles d’apprentissage (arbre de décision, perceptron, réseau de neurones) avec les métriques adaptées (précision, rappel, F1).
    • Analyser de façon critique l’intégration d’un composant d’IA dans un système d’information (données, biais, explicabilité).

    Prérequis

    Algorithmique et structures de données avancées (graphes, files de priorité), logique propositionnelle, notions de probabilités et d’algèbre linéaire, programmation (Python recommandé).

    Plan du cours

    1. Leçon 1 — Fondements de l’IA et résolution de problèmes par recherche
    2. Leçon 2 — Recherche heuristique, algorithme A* et jeux
    3. Leçon 3 — Représentation des connaissances, raisonnement et systèmes experts
    4. Leçon 4 — Apprentissage automatique et réseaux de neurones

    Modalités d’évaluation

    Volume horaire : 10 h de cours (CM), 10 h de travaux dirigés (TD), 10 h de travaux pratiques (TP) et 30 h de travail personnel (TPE), soit 60 h pour 3 crédits. Évaluation : contrôle continu (TD, comptes rendus de TP en Python, quiz en ligne : 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • Stuart Russell, Peter Norvig, Artificial Intelligence: A Modern Approach, Pearson (trad. fr. Intelligence artificielle, Pearson Education France).
    • Tom M. Mitchell, Machine Learning, McGraw-Hill, 1997.
    • Aurélien Géron, Hands-On Machine Learning with Scikit-Learn, Keras and TensorFlow, O’Reilly (trad. fr. Dunod).
    • Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press, 2016.
    • Documentation officielle de scikit-learn (scikit-learn.org).
  • Management stratégique

    Le management stratégique étudie la manière dont une organisation définit ses orientations de long terme, choisit ses domaines d’activité et ses modes de développement, puis mobilise ses ressources pour créer un avantage concurrentiel durable. Pour un ingénieur génie logiciel appelé à devenir architecte, DSI, chef de projet ou créateur d’entreprise numérique, ces outils sont indispensables : un projet informatique ne vaut que s’il sert la stratégie de l’organisation, et une start-up ou une entreprise de services numériques (ESN) de Niamey doit elle-même se positionner face à la concurrence nationale et régionale. Le cours couvre le diagnostic externe (PESTEL, cinq forces de Porter, facteurs clés de succès), le diagnostic interne (ressources et compétences, chaîne de valeur, VRIO) et sa synthèse SWOT, les choix stratégiques (stratégies génériques, matrices d’Ansoff et du BCG, modes de croissance), puis l’alignement stratégique des systèmes d’information, la gouvernance du numérique et le pilotage de la mise en œuvre par le tableau de bord prospectif.

    Objectifs d’apprentissage

    • Conduire un diagnostic stratégique externe et interne d’une organisation avec les outils de référence.
    • Synthétiser le diagnostic dans une matrice SWOT exploitable et des matrices d’évaluation pondérées.
    • Formuler et justifier des choix stratégiques au niveau de l’entreprise et des domaines d’activité.
    • Analyser l’alignement entre stratégie d’affaires et stratégie des systèmes d’information et proposer un schéma directeur.
    • Traduire une stratégie en objectifs, indicateurs et initiatives avec le tableau de bord prospectif (Balanced Scorecard).

    Prérequis

    Notions générales d’économie et de gestion d’entreprise, connaissance du fonctionnement d’un projet informatique ; curiosité pour l’environnement économique du Niger et de l’UEMOA.

    Plan du cours

    1. Leçon 1 — Fondements du management stratégique et diagnostic externe : PESTEL et cinq forces de Porter
    2. Leçon 2 — Diagnostic interne et synthèse : ressources, chaîne de valeur, VRIO et SWOT
    3. Leçon 3 — Choix stratégiques : stratégies génériques, matrices d’Ansoff et du BCG, modes de croissance
    4. Leçon 4 — Stratégie et systèmes d’information : alignement, gouvernance, mise en œuvre et pilotage

    Modalités d’évaluation

    Volume horaire : 10 h de cours magistral, 10 h de travaux dirigés (20 h en présentiel) et 20 h de travail personnel (TPE), soit 40 h pour 2 crédits. Évaluation : contrôle continu (études de cas en TD, dossier de diagnostic stratégique d’une organisation nigérienne réalisé en groupe) et examen terminal écrit (cas de synthèse).

    Bibliographie

    • Michael E. Porter, Competitive Strategy: Techniques for Analyzing Industries and Competitors, Free Press.
    • Michael E. Porter, Competitive Advantage: Creating and Sustaining Superior Performance, Free Press.
    • Gerry Johnson, Richard Whittington, Kevan Scholes et al., Stratégique, Pearson (adaptation française d’Exploring Strategy).
    • Robert S. Kaplan, David P. Norton, The Balanced Scorecard: Translating Strategy into Action, Harvard Business School Press.
    • ISACA, COBIT 2019 Framework ; norme ISO/IEC 38500 (gouvernance des technologies de l’information).
  • Management d’équipe projet et leadership

    Un projet logiciel est d’abord une aventure humaine : les études sur l’échec des projets citent régulièrement des causes humaines (communication défaillante, rôles flous, démotivation, conflits non traités) avant les causes techniques. Ce cours de l’UE Management prépare l’ingénieur génie logiciel appelé à devenir chef de projet, Scrum Master, responsable technique (tech lead) ou manager d’une équipe de développement dans une entreprise de services numériques, une banque, un opérateur télécom ou une administration. Il aborde la constitution et l’organisation d’une équipe projet, les théories et styles de leadership, la délégation et la prise de décision, la motivation, la communication et la gestion des conflits, puis l’animation d’une équipe agile avec Scrum et le suivi de sa performance. Les cas pratiques sont ancrés dans le contexte nigérien : équipes pluriculturelles et multilingues, relations hiérarchiques marquées, collaboration à distance avec des partenaires étrangers, contraintes de ressources.

    Objectifs d’apprentissage

    • Constituer une équipe projet équilibrée (rôles, compétences, taille, organisation) et accompagner son développement.
    • Analyser et adapter son style de leadership à la maturité des collaborateurs et à la situation.
    • Déléguer efficacement et choisir un mode de prise de décision adapté.
    • Mobiliser les leviers de motivation, communiquer avec assertivité et gérer les conflits de manière constructive.
    • Animer une équipe Scrum et piloter sa performance (vélocité, capacité, rétrospectives) sans dérive managériale.

    Prérequis

    Notions de gestion de projet (cycle de vie, planification), expérience d’un travail en équipe (projets tutorés, stage), bases du génie logiciel agile.

    Plan du cours

    1. Leçon 1 — Constituer et organiser une équipe projet : rôles, compétences et dynamique de groupe
    2. Leçon 2 — Leadership, délégation et prise de décision
    3. Leçon 3 — Motivation, communication et gestion des conflits
    4. Leçon 4 — Animer une équipe agile : Scrum, rôles, cérémonies et pilotage de la performance

    Modalités d’évaluation

    Volume horaire : 10 h de cours magistral, 10 h de travaux dirigés (20 h en présentiel) et 20 h de travail personnel (TPE), soit 40 h pour 2 crédits. Évaluation : contrôle continu (études de cas, jeux de rôle en TD, fiche d’analyse réflexive sur une expérience d’équipe) et examen terminal écrit (cas de synthèse).

    Bibliographie

    • Tom DeMarco, Timothy Lister, Peopleware: Productive Projects and Teams, Addison-Wesley.
    • Frederick P. Brooks Jr., The Mythical Man-Month, Addison-Wesley.
    • Patrick Lencioni, The Five Dysfunctions of a Team, Jossey-Bass.
    • Ken Schwaber, Jeff Sutherland, The Scrum Guide (scrumguides.org, version 2020).
    • Daniel H. Pink, Drive: The Surprising Truth About What Motivates Us, Riverhead Books.
  • Analyse et montage d’un projet informatique

    Beaucoup de projets informatiques échouent non pas pour des raisons techniques, mais parce qu’ils ont été mal cadrés, mal estimés ou mal financés : périmètre flou, budget sous-évalué, planning irréaliste, absence d’étude de rentabilité. Ce cours de l’UE Management donne au futur chef de projet et architecte logiciel une démarche complète pour transformer une idée (dématérialiser les inscriptions d’une université, créer une application de paiement de factures d’eau, informatiser la gestion d’un hôpital régional) en un projet structuré, chiffré et finançable. Il couvre le cycle de vie et le cadrage, l’étude d’opportunité et de faisabilité, l’expression des besoins et le cahier des charges, l’estimation des charges (points de fonction, COCOMO) et des coûts, la planification (WBS, PERT, Gantt), l’analyse financière (VAN, TRI, délai de récupération) et la constitution du dossier de projet présenté à un décideur ou à un bailleur.

    Objectifs d’apprentissage

    • Situer un projet informatique dans son cycle de vie et mener une étude d’opportunité et de faisabilité multicritère.
    • Recueillir et formaliser des besoins dans un cahier des charges fonctionnel et technique exploitable.
    • Estimer la charge d’un logiciel par points de fonction et par le modèle COCOMO, puis en déduire un budget en FCFA.
    • Construire un WBS, un réseau PERT et un diagramme de Gantt, et identifier le chemin critique.
    • Évaluer la rentabilité (VAN, TRI, délai de récupération) et monter un dossier de projet complet et argumenté.

    Prérequis

    Notions de génie logiciel (cycles de vie, UML ou Merise), bases de gestion (charges, budget), tableur.

    Plan du cours

    1. Leçon 1 — Cycle de vie et cadrage d’un projet informatique : opportunité, faisabilité et parties prenantes
    2. Leçon 2 — Du besoin au cahier des charges : expression des besoins, périmètre et exigences
    3. Leçon 3 — Estimation des charges et des coûts : points de fonction, COCOMO et budget
    4. Leçon 4 — Planification et montage du dossier de projet : WBS, PERT, Gantt et rentabilité

    Modalités d’évaluation

    Volume horaire : 10 h de cours magistral, 10 h de travaux dirigés (20 h en présentiel) et 20 h de travail personnel (TPE), soit 40 h pour 2 crédits. Évaluation : contrôle continu (TD et dossier de projet réalisé en équipe sur un cas réel ou réaliste) et examen terminal écrit (étude de cas avec estimation, planification et analyse financière).

    Bibliographie

    • Project Management Institute, A Guide to the Project Management Body of Knowledge (PMBOK Guide), PMI.
    • Barry W. Boehm, Software Engineering Economics, Prentice Hall.
    • Barry W. Boehm et al., Software Cost Estimation with COCOMO II, Prentice Hall.
    • Norme ISO 21500, Lignes directrices sur le management de projet ; manuel de comptage IFPUG (Function Point Counting Practices Manual).
    • Axelos, Managing Successful Projects with PRINCE2, The Stationery Office.
  • Linux et programmation système

    Linux fait tourner l’essentiel des serveurs web, des plateformes cloud, des conteneurs Docker et une grande partie des systèmes embarqués. Pour un ingénieur génie logiciel qui déploie des API, administre un serveur d’application dans une banque ou un opérateur de Niamey, ou écrit des services performants, la maîtrise de Linux et de son interface de programmation système est indispensable. Ce cours présente l’architecture du système, l’usage avancé du shell et des scripts Bash, la gestion des fichiers, des utilisateurs et des droits, puis la programmation système en C selon la norme POSIX : création et contrôle de processus, signaux, tubes et autres mécanismes de communication inter-processus, threads et sockets. Les TP guidés se déroulent sur une distribution Debian ou Ubuntu (machine virtuelle ou WSL).

    Objectifs d’apprentissage

    • Expliquer l’architecture de Linux (noyau, appels système, espace utilisateur, arborescence FHS).
    • Automatiser des tâches d’exploitation avec des scripts Bash robustes (variables, tests, boucles, tubes, codes de retour).
    • Gérer fichiers, utilisateurs, groupes et permissions en appliquant le principe du moindre privilège.
    • Programmer en C la création et la synchronisation de processus (fork, exec, wait) et la gestion des signaux.
    • Faire communiquer des processus et des threads (tubes, mémoire partagée, mutex, sockets TCP).

    Prérequis

    Langage C (pointeurs, structures, compilation avec gcc), notions de systèmes d’exploitation (processus, mémoire, fichiers), bases des réseaux TCP/IP.

    Plan du cours

    1. Leçon 1 — Architecture de Linux, shell et scripts Bash
    2. Leçon 2 — Fichiers, utilisateurs, droits et administration de base
    3. Leçon 3 — Processus en C : fork, exec, wait et signaux
    4. Leçon 4 — Communication inter-processus, threads et sockets

    Modalités d’évaluation

    Volume horaire : 10 h de cours magistral, 10 h de travaux dirigés, 10 h de travaux pratiques (30 h en présentiel) et 30 h de travail personnel (TPE), soit 60 h pour 3 crédits. Évaluation : contrôle continu (comptes rendus de TP guidés, scripts et programmes rendus) et examen terminal écrit (commandes, lecture de code C système, questions de cours).

    Bibliographie

    • Michael Kerrisk, The Linux Programming Interface, No Starch Press.
    • W. Richard Stevens, Stephen A. Rago, Advanced Programming in the UNIX Environment, Addison-Wesley.
    • Christophe Blaess, Développement système sous Linux, Eyrolles.
    • Andrew S. Tanenbaum, Herbert Bos, Modern Operating Systems, Pearson.
    • Pages de manuel Linux (man7.org) et norme POSIX.1 (The Open Group, IEEE Std 1003.1).
  • Système embarqué

    Les systèmes embarqués sont partout : compteurs d’électricité à prépaiement, terminaux de paiement, stations météorologiques du Sahel, pompes solaires d’irrigation, balises de suivi de flottes, capteurs de qualité de l’eau. Ce cours de découverte, rattaché à l’UE « Environnement système et sécurité », donne à l’ingénieur génie logiciel les bases pour concevoir et programmer du logiciel qui s’exécute sur du matériel contraint (mémoire de quelques kilo-octets, alimentation sur batterie, exigences temps réel). Il couvre l’architecture matérielle, la programmation en C au plus près du matériel, l’ordonnancement temps réel et les systèmes d’exploitation temps réel (RTOS), puis l’efficacité énergétique, la sûreté et l’Internet des objets (IoT). Les exemples utilisent des plateformes accessibles à Niamey : Arduino (AVR ATmega328P), ESP32, Raspberry Pi.

    Objectifs d’apprentissage

    • Décrire l’architecture d’un système embarqué et choisir un microcontrôleur, des capteurs et des actionneurs adaptés à un cahier des charges.
    • Programmer en C embarqué les périphériques de base : GPIO, interruptions, temporisateurs, convertisseur analogique-numérique, UART, I2C, SPI.
    • Analyser la faisabilité d’un ensemble de tâches temps réel (RMS, EDF, temps de réponse) et utiliser les services d’un RTOS.
    • Estimer la consommation et l’autonomie d’un objet connecté et appliquer les techniques d’économie d’énergie.
    • Concevoir une chaîne IoT sécurisée (protocoles, passerelle, cloud) adaptée au contexte nigérien.

    Prérequis

    Programmation en C (pointeurs, opérateurs bit à bit), architecture des ordinateurs (processeur, mémoire, bus), notions d’électricité (tension, courant, loi d’Ohm), bases des systèmes d’exploitation.

    Plan du cours

    1. Leçon 1 — Architecture des systèmes embarqués : microcontrôleurs, mémoires, capteurs et actionneurs
    2. Leçon 2 — Programmation embarquée en C : GPIO, interruptions, temporisateurs, conversion et bus de communication
    3. Leçon 3 — Systèmes temps réel : ordonnancement, analyse de faisabilité et RTOS
    4. Leçon 4 — Énergie, sûreté de fonctionnement et Internet des objets

    Modalités d’évaluation

    Volume horaire : 20 h de cours magistral, 10 h de travaux dirigés, pas de TP en présentiel (30 h en présentiel), 30 h de travail personnel (TPE), soit 60 h pour 3 crédits. Les manipulations proposées peuvent être réalisées sur simulateur (Wokwi, Tinkercad) dans le cadre du TPE. Évaluation : contrôle continu (TD notés, mini-dossier de conception d’un objet connecté) et examen terminal écrit.

    Bibliographie

    • Edward A. Lee, Sanjit A. Seshia, Introduction to Embedded Systems: A Cyber-Physical Systems Approach, MIT Press.
    • Giorgio C. Buttazzo, Hard Real-Time Computing Systems, Springer.
    • Jane W. S. Liu, Real-Time Systems, Prentice Hall.
    • Elecia White, Making Embedded Systems, O’Reilly Media.
    • Documentation technique Microchip ATmega328P et Espressif ESP32 ; documentation FreeRTOS (freertos.org).
  • Bases de données avancées

    Ce cours de spécialité approfondit la conception, la programmation et l’exploitation des systèmes de gestion de bases de données (SGBD) relationnels et non relationnels. Au-delà du SQL de base vu en licence, il prépare l’ingénieur logiciel à concevoir des schémas robustes, à programmer la logique métier côté serveur, à garantir la cohérence des données sous forte concurrence (paiements mobile money, inscriptions en ligne, guichets bancaires) et à optimiser des bases de plusieurs millions de lignes. Les exemples s’appuient sur des systèmes réalistes au Niger : gestion scolaire d’un établissement de Niamey, plateforme de paiement mobile, e-gouvernement. Les travaux pratiques utilisent PostgreSQL (logiciel libre), les notions étant transposables à Oracle, SQL Server ou MySQL.

    Objectifs d’apprentissage

    • Analyser un schéma relationnel à l’aide des dépendances fonctionnelles et le normaliser jusqu’à la FNBC en justifiant les compromis.
    • Écrire des requêtes SQL avancées : jointures externes, sous-requêtes corrélées, CTE récursives, fonctions de fenêtrage.
    • Programmer la logique côté serveur : fonctions et procédures stockées PL/pgSQL, déclencheurs, vues et gestion des droits.
    • Expliquer et maîtriser les transactions (ACID), les niveaux d’isolation, le verrouillage, le MVCC et la reprise après panne.
    • Estimer le coût d’une requête, choisir des index pertinents et interpréter un plan d’exécution (EXPLAIN).
    • Situer les bases réparties et NoSQL (théorème CAP, réplication, partitionnement) et choisir une technologie adaptée à un besoin.

    Prérequis

    Modèle entité-association et modèle relationnel (Merise ou UML), algèbre relationnelle, SQL de base (SELECT, jointures, GROUP BY), notions de programmation procédurale et de systèmes d’exploitation.

    Plan du cours

    1. Leçon 1 — Conception relationnelle avancée : dépendances fonctionnelles, normalisation et SQL analytique
    2. Leçon 2 — Programmation côté serveur : PL/pgSQL, procédures stockées, déclencheurs et sécurité d’accès
    3. Leçon 3 — Transactions, contrôle de concurrence et reprise après panne
    4. Leçon 4 — Indexation, optimisation des requêtes, bases réparties et NoSQL

    Modalités d’évaluation

    Volume horaire : 20 h de cours magistral, 20 h de travaux dirigés, 20 h de travaux pratiques (60 h en présentiel) et 60 h de travail personnel de l’étudiant (TPE), soit 120 h pour 6 crédits. Évaluation : contrôle continu (TD notés, comptes rendus de TP guidés, mini-projet de base de données pour une application de gestion scolaire) et examen terminal écrit (conception, SQL, transactions, optimisation).

    Bibliographie

    • Ramez Elmasri, Shamkant B. Navathe, Fundamentals of Database Systems, Pearson.
    • Abraham Silberschatz, Henry F. Korth, S. Sudarshan, Database System Concepts, McGraw-Hill.
    • Georges Gardarin, Bases de données, Eyrolles.
    • Martin Kleppmann, Designing Data-Intensive Applications, O’Reilly Media.
    • Documentation officielle PostgreSQL (postgresql.org/docs) et norme ISO/IEC 9075 (SQL).
  • Programmation Java

    Java reste l’un des langages les plus utilisés dans les systèmes d’information critiques : core banking, plateformes de monnaie électronique, systèmes de facturation des opérateurs télécoms, applications Android et back-ends d’e-gouvernement. Ce cours donne aux étudiants du Master Génie Logiciel une maîtrise professionnelle de Java SE moderne (JDK 17 ou 21, versions à support long) : programmation orientée objet rigoureuse, gestion des erreurs, collections et programmation fonctionnelle avec les streams, entrées/sorties, interfaces graphiques, concurrence et accès aux bases de données avec JDBC. Les 20 heures de TP construisent progressivement une application réelle, « ScolaPay », qui gère les frais de scolarité d’une école de Niamey et leur paiement par mobile money, avec Maven, Git et JUnit 5.

    Objectifs d’apprentissage

    • Mettre en place un environnement professionnel (JDK, IDE, Maven, Git) et expliquer le fonctionnement de la JVM.
    • Concevoir des classes robustes : encapsulation, héritage, interfaces, polymorphisme, records, énumérations.
    • Gérer les erreurs avec les exceptions et écrire du code générique et typé.
    • Choisir la collection adaptée et traiter des données avec les lambdas et l’API Stream.
    • Lire et écrire des fichiers, construire une interface graphique simple et programmer des traitements concurrents sûrs.
    • Accéder à une base relationnelle avec JDBC de façon sécurisée (requêtes préparées, transactions) et tester avec JUnit.

    Prérequis

    Algorithmique, programmation dans un langage impératif, bases de la modélisation objet (UML) et du langage SQL.

    Plan du cours

    1. Leçon 1 — Plateforme Java et programmation orientée objet
    2. Leçon 2 — Exceptions, génériques, collections et streams
    3. Leçon 3 — Entrées/sorties, interfaces graphiques et programmation concurrente
    4. Leçon 4 — Accès aux bases de données avec JDBC, architecture en couches et tests

    Modalités d’évaluation

    Volume horaire : 10 h de cours (CM), 10 h de TD, 20 h de TP, 40 h de TPE ; 4 crédits. Évaluation : contrôle continu (50 % : TP notés, projet ScolaPay remis sur un dépôt Git, quiz) et examen terminal (50 % : épreuve écrite et/ou sur machine).

    Bibliographie

    • Joshua Bloch, Effective Java, 3e éd., Addison-Wesley.
    • Cay S. Horstmann, Core Java, vol. I et II, Pearson / Oracle Press.
    • Brian Goetz et al., Java Concurrency in Practice, Addison-Wesley.
    • Robert C. Martin, Clean Code, Prentice Hall.
    • Oracle, The Java Tutorials et spécification du langage Java (JLS) — docs.oracle.com/javase.
  • Algorithmes et structures de données avancées

    Ce cours approfondit l’algorithmique pour des ingénieurs appelés à concevoir des systèmes qui doivent tenir la charge : un opérateur de mobile money qui traite des millions de transactions par jour, une plateforme d’e-gouvernement qui indexe l’état civil de tout un pays, une application logistique qui optimise des tournées entre Niamey, Dosso, Tahoua et Maradi. Il s’agit de savoir analyser rigoureusement le coût d’un algorithme, de choisir la structure de données adaptée (tas, table de hachage, arbre équilibré, B-arbre, graphe) et de concevoir des solutions efficaces à l’aide des grands paradigmes (diviser pour régner, glouton, programmation dynamique). Les TP se font en Python (ou Java) avec mesures expérimentales de performances.

    Objectifs d’apprentissage

    • Évaluer la complexité temporelle et spatiale d’un algorithme (notations O, Ω, Θ, analyse amortie) et résoudre des récurrences par le théorème maître.
    • Choisir et justifier un algorithme de tri ou de recherche selon les données et contraintes.
    • Implémenter et analyser tas, tables de hachage, arbres AVL, rouge-noir et B-arbres.
    • Appliquer les algorithmes de graphes (BFS, DFS, tri topologique, Dijkstra, Bellman-Ford, Prim, Kruskal) à des problèmes réels.
    • Concevoir des solutions par diviser pour régner, stratégie gloutonne et programmation dynamique, et prouver leur correction.
    • Valider expérimentalement les analyses théoriques par des mesures.

    Prérequis

    Algorithmique et structures de données de licence (tableaux, listes, piles, files, arbres binaires, récursivité), mathématiques discrètes (logarithmes, sommes, raisonnement par récurrence), un langage de programmation.

    Plan du cours

    1. Leçon 1 — Complexité, récurrences, tri et recherche
    2. Leçon 2 — Structures de données avancées : tas, hachage, arbres équilibrés et B-arbres
    3. Leçon 3 — Algorithmes de graphes : parcours, plus courts chemins et arbres couvrants
    4. Leçon 4 — Paradigmes de conception : diviser pour régner, glouton et programmation dynamique

    Modalités d’évaluation

    Volume horaire : 20 h de cours (CM), 10 h de TD, 10 h de TP, 40 h de TPE ; 4 crédits. Évaluation : contrôle continu (40 % : TP avec rapport de mesures, quiz, devoir) et examen terminal écrit (60 %).

    Bibliographie

    • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduction to Algorithms, MIT Press (trad. française : Algorithmique, Dunod).
    • Robert Sedgewick, Kevin Wayne, Algorithms, Addison-Wesley.
    • Jon Kleinberg, Éva Tardos, Algorithm Design, Pearson.
    • Donald E. Knuth, The Art of Computer Programming, vol. 1 et 3, Addison-Wesley.
    • Steven S. Skiena, The Algorithm Design Manual, Springer.
  • Programmation logique et fonctionnelle

    La programmation impérative décrit comment calculer, pas à pas, en modifiant un état. Les paradigmes déclaratifs décrivent ce que l’on veut obtenir : la programmation fonctionnelle compose des fonctions pures et immuables ; la programmation logique énonce des faits et des règles et laisse un moteur d’inférence chercher les solutions. Ces paradigmes irriguent aujourd’hui tout le génie logiciel : lambdas et streams de Java, fonctions d’ordre supérieur de JavaScript et Python, MapReduce et Spark pour le traitement de données massives, moteurs de règles métier dans les banques, requêtes Datalog et systèmes experts. Ce cours en présente les fondements théoriques (lambda-calcul, unification, résolution SLD) et la pratique en Haskell et en Prolog (SWI-Prolog), avec des cas nigériens : calcul des frais scolaires, traitement de transactions de mobile money, éligibilité à un microcrédit.

    Objectifs d’apprentissage

    • Situer les paradigmes déclaratifs et en expliquer les avantages (raisonnement équationnel, parallélisme, tests).
    • Réduire des lambda-termes et expliquer les stratégies d’évaluation.
    • Écrire des programmes fonctionnels typés utilisant récursivité, filtrage par motif et fonctions d’ordre supérieur (map, filter, fold).
    • Calculer un unificateur le plus général et dérouler une résolution SLD avec retour arrière.
    • Écrire des programmes Prolog sur les listes, maîtriser la coupure et la négation par échec, réaliser un petit système expert.
    • Transposer ces idées dans les langages industriels (Java, Python, JavaScript).

    Prérequis

    Algorithmique, programmation dans un langage impératif, logique propositionnelle et notions de logique des prédicats.

    Plan du cours

    1. Leçon 1 — Paradigmes déclaratifs et lambda-calcul
    2. Leçon 2 — Programmation fonctionnelle : types, récursivité et fonctions d’ordre supérieur
    3. Leçon 3 — Programmation logique : faits, règles, unification et résolution
    4. Leçon 4 — Prolog avancé : listes, contrôle, systèmes experts et intégration des paradigmes

    Modalités d’évaluation

    Volume horaire : 10 h de cours (CM), 10 h de TD, 10 h de TP, 30 h de TPE ; 3 crédits. Évaluation : contrôle continu (40 % : TP notés en Haskell et Prolog, quiz) et examen terminal écrit (60 %).

    Bibliographie

    • Harold Abelson, Gerald Jay Sussman, Structure and Interpretation of Computer Programs, MIT Press.
    • Graham Hutton, Programming in Haskell, Cambridge University Press.
    • Ivan Bratko, Prolog Programming for Artificial Intelligence, Addison-Wesley / Pearson.
    • Leon Sterling, Ehud Shapiro, The Art of Prolog, MIT Press.
    • Documentation officielle : www.haskell.org et www.swi-prolog.org.