Ressources basées sur :
Algorithmique 1
Licence 1 Informatique - Université Clermont Auvergne
Contact : Aurélie Lagoutte
Vous devez être authentifié et "inscrit" au cours (logo paramètres, en haut à droite, puis "M'inscrire / Enrol me" puis confirmation) pour avoir accès aux quizz.
Accueil
Conseils pour bien utiliser les activités disponibles dans ce cours
Cours et exercices
Chapitre 1 : Rappels d'algorithmique en pseudo-code
Objectifs:
- Comprendre l'intérêt du pseudo-code par rapport à un langage de programmation
- Connaître la syntaxe de pseudo-code qui sera utilisé dans ce cours
- Etre capable de refaire en pseudo-code des algorithmes vus dans les UE précédentes
Chapitre 2 : Analyse d'algorithmes: complexité temporelle
Objectifs:
- Comprendre que l'exécution d'une opération n'est pas instantanée
- Bien faire la différence entre "une ligne de code" et "une opération" car une ligne de code peut provoquer de nombreuses opérations.
- Savoir calculer la complexité temporelle d'un algorithme lorsque le paramètre n est précisé, ainsi que les opérations à compter.
- Savoir dire, entre deux algorithmes ayant des ordres de grandeur différents, lequel est le plus efficace. En particulier, bien comprendre la différence entre complexité d'ordre constant (le nombre d'opérations ne dépend pas de la taille de l'entrée) et d'ordre linéaire (le nombre d'opérations est proportionnel à la taille de l'entrée).
- Savoir estimer le temps d'exécution d'un algorithme à partir du nombre d'opérations par seconde et de la complexité de l'algorithme.
Chapitre 3 : Analyse d'algorithmes: preuves de correction et de terminaison
Objectifs:
- Savoir prouver qu'un algo est correct par rapport aux spécifications demandées grâce à un invariant de boucle, dans des cas simples
- Savoir prouver qu'un algo avec une boucle Tant Que termine.
A venir : des explications pour bien réussir le quizz sur les invariants
Chapitre 4 : Récursivité
Objectifs:
- Savoir écrire et exécuter un algorithme récursif
- Savoir calculer la complexité temporelle d'un algorithme récursif grâce à une suite définie par récurrence
- Savoir prouver le terminaison d'un algorithme récursif
- Savoir écrire et exécuter un algorithme de recherche dichotomique dans un tableau trié
- Connaître la complexité temporelle de recherche dichotomique dans un tableau trié: O(log n)
(Source : http://dpernoux.free.fr/suites.pdf )
Chapitre 5 : Structure de données et Types de Données Abstraits, en particulier les tableaux partiellement remplis et les listes chaînées
Objectifs:
- Comprendre qu'un Type de Données Abstrait est une façon de stocker des données en respectant certaines spécifications
- Savoir quel Type de Données Abstrait choisir pour stocker des données en fonction du problème (possible ou impossible? Coûteux ou efficace?)
- Maîtriser le Type de Données Abstrait Tableau Partiellement Rempli (Tableau PR):
- Connaître les spécifications du type Tableau Partiellement Rempli (Tableau PR)
- Savoir exécuter des algorithmes utilisant un tableau PR
- Savoir écrire des algorithmes utilisant un tableau PR, et calculer leur complexité en comptant les opérations élémentaires de tableau PR
- Savoir ré-écrire et ré-utiliser les algorithmes définis en cours sur ce type: ajouteDebut, ajouteFin, supprimeOrdre, supprimeDesorde, RecherchePos
- Maîtriser le Type de Données Abstrait Liste Chaînée (aussi appelé Liste simplement chaînée):
- Connaître les spécifications du type Liste Chaînée
- Savoir exécuter des algorithmes utilisant une Liste Chaînée
- Savoir écrire des algorithmes utilisant une Liste Chaînée et calculer leur complexité en comptant les opérations élémentaires de Liste Chaînée
- Savoir ré-écrire et ré-utiliser les algorithmes définis en cours sur ce type: tailleListe, valeurMaillon, valeurPremierMaillon, ajouteDebut, ajouteFin, supprime, RechercheAdr
A télécharger et à regarder comme une animation, page après page, avec un clic = page suivante.
Facultatif: pour ceux qui souhaitent implémenter (en C ou en Python) les fonctions vues sur les listes chaînées, vous trouverez ci-dessous un fichier définissant les structures/classes nécessaires pour manipuler des listes chaînées dans le langage choisi. Les premières fonctions sont déjà implémentées, à titre d'exemple, les autres sont à compléter par vos soins. Vous trouverez également quelques exemples d'utilisation des fonctions implémentées dans le programme principal.
Evolution envisagée : ajout d'exercices d'implémentation en C/Python évalués automatiquement, avec vérification de la complexité attendue.
Chapitre 6 : Variantes des listes chaînées (seulement pour étudiants en Majeure Info)
Objectifs:
- Maîtriser le Type de Données Abstrait Liste Doublement Chaînée (aussi appelé Liste DC):
- Connaître les spécifications du type Liste DC
- Savoir exécuter des algorithmes utilisant une DC
- Savoir écrire des algorithmes utilisant une Liste DC et calculer leur complexité en comptant les opérations élémentaires de Liste DC
- Savoir ré-écrire et ré-utiliser les algorithmes définis en cours sur ce type: tailleListe, valeurMaillon, valeurTete, ajouteDebut, ajouteFin, supprime, RechercheAdr
- Maîtriser le Type de Données Abstrait Liste Doublement Chaînée Circulaire (aussi appelé Liste DCC), mentionné en cours et vu en TD :
- Connaître les spécifications du type Liste DCC
- Savoir exécuter des algorithmes utilisant une DCC
- Savoir écrire des algorithmes utilisant une Liste DCC et calculer leur complexité en comptant les opérations élémentaires de Liste DCC
- Savoir ré-écrire et ré-utiliser les algorithmes définis en TD sur ce type: tailleListe, valeurMaillon, valeurTete, ajouteDebut, ajouteFin, supprime, RechercheAdr
- Maîtriser le Type de Données Abstrait Liste Doublement Chaînée (aussi appelé Liste DC):
Chapitre 7 : pile, file
Objectifs:
- Savoir utiliser les opérations élémentaires de pile, de file
- Savoir écrire des algorithmes manipulant des piles ou des files, (et ré-écrire ceux vus dans le cours)
- Savoir compter la complexité d'un algorithme utilisant une pile, une file
- Savoir choisir le meilleur type de données en fonction du problème à résoudre (si plusieurs choix sont possibles, choisir le plus économique en terme de complexité)
Chapitre 8 : arbre binaire
Objectifs:
- Connaitre la vocabulaire relatifs aux arbres
- Savoir écrire et executer au pas-à-pas des algorithmes simples sur les arbres bianires
- Savoir ré-écrire les algorithmes de parcours d'arbres (en largeur et en profondeur)
- Savoir exécuter un parcours en largeur et un parcours en profondeur sur un arbre donné en exemple (= donner l'ordre dans lequel les noeuds sont visités)
- Savoir détecter si un abre binaire vérifie les propriétés d'Arbre Binaire de Recherche (ABR)
- Savoir exécuter et ré-écrire les algorithmes de recherche et d'insertion simple d'une valeur dans un ABR
- Savoir executer et ré-écrire les algorithmes de parcours recursifs du cours: prefixe, infixe, suffixe
Chapitre 9 : tris
- pour chacun des 4 tris présentés (tri par insertion, tri par sélection, tri rapide, tri fusion), il faut savoir:
- expliquer le fonctionnement de l'algorithme
- savoir exécuter l'algorithme pas-à-pas sur un exemple
- réécrire l'algorithme, y compris les fonctions auxiliaires utilisées
- complexité: savoir la recalculer (pour tri par insertion et tri par sélection) ou la connaître "par coeur" (pour tri rapide et tri fusion) (les trois premiers sont en O(n^2) et le tri fusion est en O(n. log n)
- Remarque: un soin tout particulier doit être apporté à la compréhension du tri par insertion et du tri par sélection
- pour chacun des 4 tris présentés (tri par insertion, tri par sélection, tri rapide, tri fusion), il faut savoir:
TD: voir le dernier exercice de la fiche de TD06: arbres et tris
Révisions
Contributions, discussions enseignants