Cet enseignement nécessite de connaître et d'avoir intégré le contenu des UEs LIFAPI et LIFAPSD. Il est également préférable d'avoir suivi LIFAPB, LIFAPR et
LIFProjet.
Voici ici une liste non exhaustive des notions sur lesquelles vous rafraîchir la mémoire avant d'aborder l'UE :
- Gestion de la mémoire (...)
- Organisation en pile des variables d'un programme
- Allocation dynamique dans le tas (new/delete, malloc/free)
- Différents modes de passage des paramètres d'une procédure (...)
- Paramètres non modifiables : Donnée,
- Paramètres modifiables : Donnée-Résultat, Résultat
- Notion de pointeur (...)
- Arithmétique des pointeurs (...)
- Différence entre (type) pointeur et (pseudo-type) référence (...)
- Type Abstrait et Programmation
Modulaire (...)
- Constructeur et destructeur,
surcharge de l'opérateur d'affectation
- Nuance entre définition et déclaration
- Spécificité des tableaux statiques et des chaînes de caractères en C/C++ (...)
- Lecture / écriture
- scanf, printf, … (entrée/sortie standard)
- fscanf, fprintf, fread, fwrite, feof, fopen, fclose, …
(entrée/sortie sur fichiers)
- E/S avec << et >>
- Différentes étapes de la compilation (...)
- Makefile
- Types abstraits Liste, File, Pile et Arbre Binaire de Recherche
- ....
Contenu fourni à titre indicatif (le contenu d'une séance peut évoluer d'une année à l'autre).
Cours 1 et 2 - Présentation du cours, rappel sur les prérequis, introduction ou rappel de la notion de module
- Organisation de la mémoire : pile et tas, allocation dynamique
- Différence entre pointeur et référence
- Types abstraits
- Programmation modulaire et mise en oeuvre en C++
- Constructeurs, destructeurs, opérateurs d'affectation
Fichiers C++ de l'exemple du Module Complexe donné en exemple sur les slides :
ici.
Cours 3 - Preuve d'algorithme, classes de complexité, analyse asymptotique, preuve et complexité des algorithmes itératifs
- Conception et analyse d'un algorithme
- Preuve d'un algorithme
- Analyse de complexité
- Complexité des algorithmes itératifs
- Outils d'analyse asymptotique
Abordé en cours pour élargir vos compétences :
Cours 4 -
Outils de preuve, Tri fusion, Complexité des algorithmes récursifs, Master Theorem
- Outils de preuve des algorithmes itératifs
- Outils de preuve des algorithmes récursifs (Exemple du tri fusion)
- Complexité des algorithmes récursifs (Exemple du tri fusion)
- Equation de récurrence pour la complexité d'un algorithme
- Master Theorem concernant l'analyse des algorithmes "diviser pour régner" (Divide and conquer)
Cours 5 - Tri fusion (tableaux, fichiers, listes), TAD Séquence (ou Liste), TAD Ensemble et TAD Table
- Retour sur les versions itératives et récursives du tri fusion
- Retour sur le Type Abstrait Séquence et ses différentes implantations possibles
- Introduction des skip-lists pour l'implantation des Séquences Triées (et un lien vers l'article de recherche de l'inventeur des skip-lists, pour illustrer
l'intérêt de la recherche en informatique)
- Type Abstrait Ensemble
- Notion de clé et Type Abstrait Table
Cours 6 - Table de hachage, Pointeurs de fonction
- Table et fonction de hachage
- Gestion des collisions
- Adressage ouvert
- Pointeurs de fonction
Non fait en cours :
- Adressage fermé
- Exemple de fonctions de hachage
Cours 7 - Tri par partition, dérécursitication partielle ou totale
- Retour sur les algorithmes de tri sur place
- Tri par partition (Quick-sort)
- Coût de la récursivité
- Dérécursification, appels récursifs terminaux
- Dérécursification des appels récursifs non terminaux
Cours 8
- Arbres binaires, Analyseur syntaxique, Arbres Binaires de recherche
- Rappels sur les Arbres Binaires
- Dérécursification du parcours en profondeur d'un Arbre Binaire
- Analyse syntaxique pour
la construction de l'arbre binaire d'une expression arithmétique (non
fait en cours)
- Rappels sur les Arbres Binaires de Recherche (ABR) (parcours, insertion, taille, ...)
- Suppression dans un ABR
- ABR totalement équilibrés
Cours 9
- Arbre binaire de Recherche (ABR), AVL (Adelson-Velsky et Landis), Arbres 2-3-4, Arbres Rouge Noir
- ABR auto équilibrants
- AVL, définition
- Opérations de rééquilibrage dans les AVL : rotations droite, gauche, double à droite et double à gauche
- Arbres 234 (les B-arbres en sont une généralisation, utilisés dans les mécanismes de gestion des bases de données) (Abordés en TD)
- Arbres Rouge Noir (non faits en cours cette année)
Cours 10 - Graphes
- exemples de problèmes abordés en théorie des graphes
- graphes orientés vs. non orientés,
- définitions (chaînes, circuits, degré, etc.)
- représentation matricielle ou par liste d'adjacence
- parcours de graphe (largeur, profondeur)
- tri topologique
- admissibilité d'un plus court chemin
- introduction aux algorithmes gloutons
- algorithme de Dijkstra
Non fait en cours mais abordé en TP sous forme simplifiée liée à un cas particulier :
- réseau de transport
- Algorithme de Ford-Fulkerson
Abordés en TD uniquement : Arbres couvrants minimum, coloriage de graphes
Cours complémentaire : Méthodes de conception (approfondis en TD10)
- Algorithmes incrémentaux
- Diviser pour régner
- Programmation dynamique
- Algorithmes gloutons
Généricité
- Introduction à la généricité
- Macros
- Pointeurs de fonctions
- Généricité en C et en C/C++ (échange générique, éléments génériques, ...)
- Mise en oeuvre avec des void*
Il pourra arriver que vous ayez à rapatrier des fichiers sources sur ce site.
La description suivante peut être sujette à des modifications et est juste fournie à titre indicatif.
Séance de TP1
:
- Adapter un module aux changement de compilateurs g++, gcc
- Listes génériques
- Fichiers fournis
- Module Complexe : version C/C++, version C
- Module Element (à étendre si besoin) et entêtes du Module Liste : Version C++, version C
- Eléments de correction pour la version C++ (certaines fonctions sont données sous une forme itérative puis sous une forme récursive à titre indicatif)
Séance de TP 2
:
- Ajout d'une cellule (sentinelle) à une liste chaînée non
circulaire
- Module liste triée
- Ajout d'un second niveau de chaînage
Séance de TP 3
:
- Une implémentation des séquences triées performante pour les insertions : Skip-lists
- Eléments de correction (insertion avec ou sans doublon donnée sous une forme itérative, à vous d'écrire la fonction de recherche)
Séance de TP 4
:
- Profil de complexité de la recherche et de l'insertion dans une Skip-List; comparaison au profil obtenu pour des Listes et ou des Tableaux Dynamiques Triés.
- Fichiers fournis
- Rappels lecture/écriture sur fichiers (readwritescanfprintblablabla) avec fprintf, fscanf, fread et fwrite. Vous pouvez aussi utiliser des
ofstream et des ifstream.
Séance de TP 5
:
- Table de hachage
- Commencer la séance en se renseignant sur les pointeurs de fonctions qui seront utilisés dans ce TP (voir dernier slides du Cours 06).
Séance de TP 6
:
- Arbre Binaire de Recherche (prérequis de l'UE)
- Comparaison de performances entre les Arbres Binaires de Recherche et Table de Hachage
Séance de TP 7
:
Séance de TP8
- Arbres Binaires de Recherche Equilibrés : AVL
- Si certains étudiants ont terminé, ils peuvent établir des statistiques sur le temps d'une recherche ou d'une insertion dans un
AVL contenant n éléments et visualiser la courbe donnant ce temps moyen en fonction de n.
Séance de TP 9 : Graphes et images
- Graphes structurés en grille
- Des exemples simples de lecture écriture sur fichier (ascii ou binaire) : readwritescanfprintblablabla .
- Pour des affichages ascii en couleur (pour ceux qui veulent afficher sur la sortie standard): exemple
Séance de 10:
- Evaluation du TP portant sur les graphes.
- Au programme une interro portant sur l'archive que vous avez rendue. Puis
chaque binome sera interrogé à tour de rôle. Pendant ce temps, les
autres étudiants travailleront sur l'algorithme A* : sujet
(cette fois-ci le travail n'est pas à rendre :-) ).
Rendu de TPs
Interro de cours : au début de certaines séances de TD
Contrôle terminal (exemple annale contrôle final)
Il est vivement conseillé :
- de lire attentivement les transparents ainsi que vos notes de cours
- de s'entraîner à refaire les exercices vus en TD/TPs
L'assiduité des étudiants entre également dans l'évaluation du contrôle continu.