Khallot
Faire un don Don Rejoindre la bêta

LES ÉCRITS · MÉTHODE

Informatique · du code qu’un correcteur peut lire

La complexité se demande, elle ne se devine pas

L’essentiel

Pas à pas

1 · Lire l’énoncé deux fois, stylo posé

Repère ce qui est fourni — fonctions données, résultats admis, notations — et ce qui est explicitement dispensé de justification. Beaucoup de candidats justifient ce que l’énoncé dit de ne pas justifier, et oublient les complexités qu’il réclame.

2 · Écrire la spécification avant le corps

Ce que la fonction prend, ce qu’elle rend, ce qu’elle suppose. Deux lignes de commentaire valent mieux qu’un code juste qu’on ne comprend pas.

3 · Traiter les cas de bord d’abord

Liste vide, un seul élément, valeur absente. Ce sont les trois cas qui font échouer un code par ailleurs correct, et ils se traitent en trois lignes.

4 · Justifier la terminaison et la correction

Un variant pour la terminaison, un invariant pour la correction. Ce sont deux phrases, et elles sont explicitement au programme.

5 · Donner la complexité, toujours

En temps et en espace, avec la justification en une ligne. Si la question la demande et que tu l’oublies, le point est perdu quel que soit le reste.

Les méthodes à connaître

7 situations de concours. Lis la situation, cherche la méthode de tête, puis ouvre : méthode, exemple résolu, piège. Vérifie que chaque résultat figure à ton programme : un théorème hors programme se redémontre avant d’être utilisé.

Preuve de programmes

Prouver qu’une boucle termine : le variantUne boucle « tant que » dont le nombre de tours n’est pas évident.
  1. Trouve une quantité entière, positive ou nulle à chaque tour, qui décroît strictement à chaque itération.
  2. Justifie ces deux propriétés à partir du corps de la boucle.
  3. Conclus : une suite d’entiers naturels strictement décroissante est finie, donc la boucle s’arrête.

Exemple résolu. Algorithme d’Euclide sur deux entiers naturels (tant que b ≠ 0 : a, b = b, a % b). b est un entier naturel, et le nouveau b, reste de la division par l’ancien b, lui est strictement inférieur. La boucle termine.

Le piège. Proposer une quantité qui décroît mais peut devenir négative, ou qui n’est pas entière : ce n’est pas un variant.

Prouver qu’un algorithme est correct : l’invariantOn doit justifier qu’une boucle calcule bien ce qu’elle prétend.
  1. Énonce une propriété vraie avant la boucle et conservée par chaque tour.
  2. Montre l’initialisation, puis la conservation : si elle est vraie au début d’un tour, elle l’est à la fin.
  3. À la sortie, combine l’invariant et la condition d’arrêt pour obtenir le résultat voulu.

Exemple résolu. Recherche dichotomique de x dans une liste triée t, avec g = 0 et d = len(t) − 1 au départ : invariant « si x est dans t, il est dans t[g..d] ». Chaque tour le conserve parce que t est triée ; à la sortie (g > d), la tranche est vide, donc x n’est pas dans t.

Le piège. Choisir un invariant qui ne dit rien à la sortie : avec la condition d’arrêt, il doit donner exactement le résultat.

Complexité

Estimer la complexité d’un algorithme récursifUne fonction s’appelle elle-même sur des entrées plus petites.
  1. Écris la relation de récurrence du coût : nombre d’appels, taille des sous-problèmes, coût du travail hors appels.
  2. Cas à connaître : C(n) = C(n/2) + O(1) donne O(log n) ; C(n) = 2C(n/2) + O(n) donne O(n log n) ; C(n) = C(n − 1) + O(n) donne O(n²) ; C(n) = 2C(n − 1) + O(1) donne O(2ⁿ).
  3. Compte le coût caché des opérations Python : une tranche t[a:b] copie b − a éléments.

Exemple résolu. Le tri fusion coupe la liste en deux, trie chaque moitié et fusionne en temps linéaire : C(n) = 2C(n/2) + O(n), soit O(n log n). Une recherche dichotomique qui passe t[:m] à l’appel suivant coûte O(n) et non O(log n), à cause des copies.

Le piège. Ignorer le coût des copies ou des concaténations dans les appels récursifs.

Algorithmique

Construire une programmation dynamiqueUn problème récursif recalcule les mêmes sous-problèmes : rendu de monnaie, plus longue sous-suite commune, sac à dos.
  1. Définis précisément le sous-problème et ses paramètres, par exemple L[i][j] = longueur de la plus longue sous-suite commune à u[:i] et v[:j].
  2. Écris la relation de récurrence et les cas de base.
  3. Remplis le tableau dans un ordre où chaque case ne dépend que de cases déjà calculées ; la complexité vaut le nombre de cases multiplié par le coût d’une case.

Exemple résolu. Plus longue sous-suite commune : L[i][j] = L[i−1][j−1] + 1 si u[i−1] = v[j−1], sinon max(L[i−1][j], L[i][j−1]), avec L[0][j] = L[i][0] = 0. Pour des mots de longueurs n et m : O(nm) en temps et en mémoire.

Le piège. Écrire la récurrence sans définir exactement ce que contient une case : c’est là que naissent les décalages d’indice.

Graphes

Choisir le bon parcours de grapheUn problème se modélise par des sommets reliés par des arêtes.
  1. Parcours en largeur (file) : distances en nombre d’arêtes dans un graphe non pondéré, en O(n + m).
  2. Parcours en profondeur (pile ou récursion) : composantes connexes, détection de cycle, tri topologique.
  3. Algorithme de Dijkstra (file de priorité) : plus courts chemins pour des poids positifs ou nuls, en O((n + m) log n) avec un tas.

Exemple résolu. Nombre minimal de coups d’un cavalier entre deux cases d’un échiquier : le graphe (cases, coups possibles) n’est pas pondéré, donc un parcours en largeur depuis la case de départ donne la réponse.

Le piège. Utiliser Dijkstra avec des poids négatifs, ou un parcours en profondeur pour chercher des plus courts chemins.

Python

Éviter les pièges d’alias en PythonListes de listes, copies, fonctions qui modifient leurs arguments.
  1. L’affectation b = a ne copie pas une liste : a et b désignent le même objet.
  2. [[0] * m] * n crée n références vers la même ligne ; écris [[0] * m for _ in range(n)].
  3. Une fonction qui modifie une liste reçue en argument la modifie aussi pour l’appelant : copie-la d’abord si ce n’est pas voulu.

Exemple résolu. t = [[0] * 3] * 2 puis t[0][0] = 1 donne [[1, 0, 0], [1, 0, 0]] : les deux lignes sont le même objet.

Le piège. Croire que t.copy() copie aussi les sous-listes : c’est une copie superficielle.

Bases de données

Écrire une requête avec agrégationOn veut un résultat par groupe (par élève, par classe) à partir d’une table.
  1. FROM et JOIN … ON construisent la table de travail, avec la condition de jointure.
  2. WHERE filtre les lignes avant le regroupement ; GROUP BY forme les groupes ; HAVING filtre les groupes selon un agrégat.
  3. SELECT ne contient que les colonnes du GROUP BY et des agrégats : COUNT, SUM, AVG, MIN, MAX.

Exemple résolu. Élèves ayant au moins trois notes strictement supérieures à 15 : SELECT id_eleve, COUNT(*) FROM notes WHERE note > 15 GROUP BY id_eleve HAVING COUNT(*) >= 3.

Le piège. Mettre une condition sur un agrégat dans WHERE : WHERE COUNT(*) >= 3 est refusé, c’est le rôle de HAVING.

Ce que dit le jury

Citations des rapports de jury, qui sont des documents publics. Ta filière peut avoir d’autres jurys : vérifie le rapport de ton concours.

« Comme à chaque fois, beaucoup de temps ou de points sont perdus par une lecture trop superficielle de l’énoncé. Certains candidats justifient des réponses alors que l’énoncé indique explicitement de ne pas le faire ou oublient de donner des complexités élémentaires alors que la question les demande. »

Rapport du jury Centrale-Supélec 2025, filière MP, option informatique

Les points les moins chers à gagner sont dans l’énoncé. Dix minutes de lecture valent mieux que dix minutes de code.

« Le jury rappelle qu’il apporte une grande attention à la présentation : une copie aérée (en particulier dans les codes de programme) est bien plus facile à lire. À l’inverse, les écritures illisibles sont pénalisées. »

Rapport du jury Centrale-Supélec 2025, filière MP, option informatique

L’indentation se rend visible à la main : décale nettement, saute des lignes entre les blocs, et numérote juste.

Les pièges

DANS L’APPLICATION

Ce qu’une page web ne sait pas faire

3 exercices minutés : « Relever les consignes » (15 min), « Invariant et variant » (30 min), « Les trois cas de bord » (20 min). Et une liste de contrôle qui se coche, reliée à ton calendrier de devoirs et à ton journal d’erreurs.

La fiche que tu viens de lire est intégrale : on ne garde rien pour soi. L’application ajoute ce qui demande d’être minuté, coché, ou relié à ton propre travail.

Les autres méthodes

La dissertation, pas à pas · Philosophie · faire surgir le problème · Khôlle · avant, pendant, après · Lire les textes eux-mêmes · Cartes et rappel actif, bien réglés · Fatigue, stress : repérer les signaux, demander de l’aide · Maths · sécuriser les débuts, exploiter les annales · Sciences sociales · démontrer sans opinion · Physique-chimie · le contrôle avant la conclusion · S’entraîner en mêlant les chapitres · Mathématiques · la rigueur qui rapporte des points · BCPST · la synthèse de biologie · Chimie · interpréter, pas décrire · Les TP de concours · réussir, puis valider · Explication de texte à l’oral · Histoire et géographie · des faits qui prouvent · Le TIPE · choisir un sujet qui tienne un an · Idées reçues sur ce qu’attend le jury · Composition française · B/L · Composition française · A/L · Culture générale · définir la notion, faire penser les œuvres