Compétences#
Mis à jour : May 15, 2025, lecture : 5 minutes minimum, PhL.
Important
Les compétences de cet enseignement sont rassemblées pour vous aider à contrôler votre apprentissage au long du semestre.
Note
Les (\(\star\)) correspondent à l’objectif d’apprentissage niveau 20.
Savoir faire et pré-requis technique#
Dans/avec un notebook jupyter :
savoir mettre en oeuvre de la programmation simple en python (niveau semestre 1) dans un notebook jupyter
savoir documenter cette programmation (énoncés, descriptions, …) avec markdown
Fonctions#
Avoir les idées claires#
reconnaitre et utiliser une fonction prédéfinie ou existante
reconnaitre et distinguer :
définition et paramètres formels vs. appel et paramètres effectifs
spécification, en-tête, signature : spécifier pour utiliser, pour vérifier vs. corps : implémentation du traitement
comprendre que appel = changement de contexte
trace de l’exécution vs. séquentialité des instructions écrites
\(\star\) dynamique vs. statique
distinguer appelant vs. appelé :
le rôle de l’appel,
le rôle du
return
identifier la portée des variables :
variables locales vs. variables plus globales
se souvenir que l’effet de bord est indésirable
Ce qu’il faut savoir faire#
Cadre : en/pour python
utiliser une fonction prédéfinie ou existante
définir et écrire la spécification d’une fonction qui réalise un traitement décrit en français, ou qui résout un problème (simple) décrit en français
définir et écrire des appels simples (ou des tests unitaires)
définir, écrire et utiliser des tests unitaires
définir et écrire l’implémentation d’une fonction associée à une spécification
Récursivité#
Avoir les idées claires#
Savoir conduire une approche diviser pour régner et en déduire une solution récursive : application à des exemples calculatoires simples (factorielles, exponentiation entière, exponentiation rapide)
Savoir identifier la (ou les) terminaison, la récursion et l’initialisation d’un traitement avec un algorithme récursif : application à des exemples simples (factorielles, exponentiation entière, exponentiation rapide)
Savoir-faire#
Savoir écrire sous la forme d’une fonction de même signature les versions itérative et récursive d’un traitement calculatoire simple
Construire la pile des appels et son évolution lors d’un traitement récursif
Complexité (2025)#
Avoir les idées claires#
Connaitre le principes de l’analyse de la complexité en temps : modèle de calcul, mesure et paramètre de la complexité, meilleur et pire cas
Savoir exprimer et exploiter une complexité asymptotique : principales complexités, interprétation pratique de ces complexités
(\(\star\)) Savoir établir la complexité d’algorithmes itératifs simples ou récursifs terminaux (algorithmes étudiés en cours)
Savoir-faire#
Connaitre des exemples significatifs d’algorithmes de complexité polynomiale et logarithmique (complexité, pires et meilleurs cas)
Savoir identifier (sans nécessairement le prouver) la complexité, les meilleur-pire cas d’un algorithme
Rechercher#
Avoir les idées claires#
Connaitre les principes des formes itératives et récursives des algorithmes de recherche fondamentaux : recherche séquentielle, recherche dichotomique.
Savoir conduire une approche diviser pour régner et en déduire une solution récursive pour le problème de la recherche d’une valeur dans un ensemble ou des problèmes similaires.
Savoir identifier la (ou les) terminaison, la récursion et l’initialisation d’une recherche de valeur (ou problème similaire) avec un algorithme récursif
Savoir-faire#
Savoir écrire sous la forme d’une fonction de même signature les versions itérative et récursive d’un algorithme de recherche de valeur dans un ensemble
Savoir écrire des tests unitaires pertinents pour ces traitements
Trier#
Avoir les idées claires#
Connaitre, reconnaitre et savoir classifier les algorithmes de tri selon leurs caractéristiques : tris en place ou non, par comparaisons ou non, (tris de complexité quadratique/rapide/linéaire)
Comprendre les algorithmes de tri insertion, quicksort et fusion grâce à leur invariant
Savoir identifier les pires et meilleurs cas des tris insertion, quicksort et fusion
Savoir-faire#
Savoir écrire des traitements récursifs en place de tableaux (indices \([g, d[\))
Savoir écrire les tris insertion, quicksort et fusion sous une forme simple (itérative vs. récursive)
Savoir écrire des tests unitaires pertinents pour ces traitements
Types composés#
Avoir les idées claires#
Distinguer les caractéristiques des structures de données (SD) tuple, liste, dictionnaire, ensemble et chaine de caractères – aussi appelés type composé ou conteneur en python
pour représenter, stocker les données et effectuer les traitements adaptés au problème
pour effectuer l’accès aux valeurs, le parcours (séquences, itérateur), et la modification ou la copie (mutabilité) de ces SD.
(\(\star\)) Connaitre les complexités de ces traitements
Savoir faire#
Connaitre la syntaxe python de définition et manipulation de ces SD
Créer des listes et dictionnaires en compréhension
Connaitre les méthodes (prédéfinies) utiles au traitement, en particulier des chaines de caractères
Définir des spécifications de fonctions avec un ou des paramètres de type composé
Modules utiles#
Avoir les idées claires#
Pouvoir définir une stratégie de tests avec un part d’aléatoire bien choisie
Pouvoir définir une stratégie de mesure des temps de traitements, être conscient de la difficulté de la fiabilité de ce type de mesures
Savoir-faire#
Savoir générer de l’aléa avec le module
random
Savoir utiliser le module
matplotlib
pour créer des tracés graphiques pertinentsSavoir mesurer des temps d’exécution à l’aide du module
time
Savoir rechercher et (re)trouver dans la documentation de ces modules
Entrées-Sorties simples avec des fichiers#
Avoir les idées claires#
Distinguer fichier logique vs. physique, texte vs. binaire, mode lecture vs. écriture (vs. lecture-écriture)
Connaitre les 4 étapes de manipulation d’un fichier : association/ouverture/lecture-écriture/fermeture
Distinguer représentation textuelle et valeur (numérique)
Savoir-faire#
Savoir écrire les lectures-écritures simples de fichier texte avec
.readline()
,.read()
et.write()
Comprendre et gérer l’effet des caractères spéciaux
Savoir écrire les lectures-écritures de fichiers texte avec les instructions python adaptées
(\(\star \)) Sous programmes et affectations : aspects avancés#
Avoir les idées claires#
Les principes du passage de paramètres appelant <-> appelé
“matériel” : par valeur vs. par adresse
logique : in vs. out vs. inout
aide : différencier fonction vs. procédure
L’effet de bord est néfaste
possible pour le passage par adresse, et les variables globales (à proscrire)
L’affectation et le passage de paramètres en python
pas de surprise pour les non-mutables (= variables locales)
attention aux mutables : danger d’effet de bord si modification partielle
ne pas prendre de risque :
return
dans la fonction et affectation dans l’appelant
Savoir-faire en python#
Fonctions avec arguments nommés, avec paramètres par défaut.
Affectation en python
non-mutables : (référence à) la valeur
mutables : (référence à) l’adresse
attention aux mutables : modification partielles vs. duplication (par
copy.copy
ou par “tranches complètes”)penser “objet” aide pour le comportement des mutables
Fonction et passage d’argument appelant/appelé en python :
similaire à l’affectation : distinguer mutable vs. non mutable
Savoir effectuer des introspections (fonction
id()
)
(\(\star \)) Entrées-Sorties : aspects avancés#
Avoir les idées claires#
Connaitre les principes du formatage des données pour pouvoir retrouver rapidement dans la documentation (de cours ou de référence) les commandes pour effectuer ce traitement.
Savoir-faire#
Utiliser les formatages de base des types
int
etfloat
de pythonEn s’appuyant sur les documents de cours ou de référence, définir et appliquer des formatages évolués et adaptés aux données manipulées avec python
Des QCM et autres sites à exploiter#
Le net est riche de ressources à exploiter. En voici quelques-unes sélectionnées et à exploiter en plus de ceux proposés à chaque fin de chapitre.
Site de M. Bernon : QCMs interactifs issus de la banque de données des E3C
Site de Fabrice Sincere (lien sur le qcm sur les fonctions)
Fonctions, Objectif 20 : [France IOI] (http://www.france-ioi.org/algo/chapter.php?idChapter=509)