CCINP Option Informatique MP 2022Sujet, corrigé et rapport du jury
- Automates finis non déterministes
- Arbres binaires et tas
- Programmation Python
- Programmation récursive en OCaml : types récursifs
- Preuves par induction
- Invariant et variant de boucle
- Complexité des algorithmes
Téléchargements
Présentation du sujet
AccessibleAutomates augmentés, tas binomiaux en Python et arbre de Calkin-Wilf en OCamlAfficher ou masquer la section
Présentation du sujet
AccessibleLe sujet comporte trois parties indépendantes. La première définit un automate augmenté et le langage reconnu à un seuil donné. La deuxième construit des arbres et des tas binomiaux en Python. La troisième étudie l'arbre de Calkin-Wilf pour énumérer les fractions positives, avec programmation OCaml, preuves par induction et complexité.
- 1Partie I : automatesCalculs réussis au seuil s dans un automate augmenté, dénombrement et construction d'un automate fini associé.
- 2Partie II : autour des tasinformatique pour tousArbres binomiaux et tas binomiaux en Python : construction, ordre, minimum, insertion, complexité et invariant de boucle.
- 3Partie III : énumération des fractions positivesArbre de Calkin-Wilf en OCaml, PGCD, preuves par récurrence, suite de Stern, chemins et premier ancêtre commun.
Accessible. Le jury qualifie le sujet de facile, d'une longueur adaptée, avec des questions très simples sans justification ; beaucoup de candidats sont allés jusqu'au bout.
L'épreuve en chiffres
Moyenne 10,6 / 20 · écart-type 3,74 · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 10,6/ 20
- Écart-type
- 3,74
- Coefficient
- 7
- Durée
- 4 h
Votre note sur 20 à ce sujet, en conditions de concours.
Source : document officiel du concours, épreuve du 12 mai 2022. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.
Ce qu'a observé le jury
6 erreurs relevéesDéfinition de l'automate augmenté mal comprise · Invariant de boucle confondu avec un variant · Calculs de complexité hésitantsAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesLe sujet a permis à chaque candidat ayant un minimum de prérequis de s'exprimer et a bien discriminé les niveaux faibles. Le niveau de programmation est jugé correct, malgré des confusions de syntaxe entre Python et OCaml. La partie sur les automates, mal comprise, n'a été que partiellement traitée.
Les erreurs les plus sanctionnées
- 1Définition de l'automate augmenté mal compriseQ6
Beaucoup de copies confondent calcul (suite d'états) et mot (suite de lettres), ainsi que transitions et états, et comprennent mal la notion de seuil.
- 2Invariant de boucle confondu avec un variant
L'invariant prouve la correction, le variant prouve la terminaison ; la distinction n'est pas maîtrisée.
« La notion d’invariant de boucle, pourtant explicitement au programme, n’est pas maîtrisée par les candidats »
- 3Calculs de complexité hésitants
La complexité a posé des difficultés à certains candidats dans la partie sur les tas.
- 4Type OCaml d'arbre binaire mal écritQ21
La définition d'un type récursif, pourtant classique, est souvent fausse ou mal écrite en syntaxe OCaml.
« Beaucoup de candidats ne savent pas écrire un type Caml aussi classique que des arbres binaires »
- 5Preuves par induction mal rédigéesQ26, Q28
L'écriture d'une preuve par induction fait partie des points de cours non maîtrisés.
« Les preuves par inductions sont parfois très mal rédigées »
- 6Consignes non respectées
Absence de justification quand elle est demandée, ou code OCaml écrit là où Python est exigé.
Ce qui a été bien réussi
- La partie II, assez facile, est globalement bien traitée.
- La partie III est traitée de façon assez complète : la quasi-totalité des copies va au moins jusqu'à Q35 et beaucoup jusqu'à Q39.
- Des questions très simples comme Q20, Q27, Q30 et Q36 ont permis d'assurer un minimum de points.
Conseils du jury
- Lire attentivement les définitions nouvelles avant de répondre, en particulier en théorie des automates.
- Respecter le langage imposé par chaque question.
- Justifier chaque réponse lorsque l'énoncé le demande.
- Savoir définir un type récursif en OCaml et rédiger une preuve par induction complète.
Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
ÉPREUVE MUTUALISÉE AVEC E3A-POLYTECH ÉPREUVE SPÉCIFIQUE - FILIÈRE MP
INFORMATIQUE
N.B. : le candidat attachera la plus grande importance à la clarté, à la précision et à la concision de la rédaction. Si un candidat est amené à repérer ce qui peut lui sembler être une erreur d'énoncé, il le signalera sur sa copie et devra poursuivre sa composition en expliquant les raisons des initiatives qu'il a été amené à prendre.
RAPPEL DES CONSIGNES
- Utiliser uniquement un stylo noir ou bleu foncé non effaçable pour la rédaction de votre composition ; d'autres couleurs, excepté le vert, peuvent être utilisées, mais exclusivement pour les schémas et la mise en évidence des résultats.
- Ne pas utiliser de correcteur.
- Écrire le mot FIN à la fin de votre composition.
Les calculatrices sont interdites.
Partie I - Automates
Un automate fini non déterministe est un quintuplet
-
Q un ensemble fini non vide d'états, de cardinal|Q| ; -
Σ un alphabet; -
I ⊂ Q l'ensemble des états initiaux; -
δ : Q × Σ → P(Q) une fonction de transition : siq ∈ Q eta ∈ Σ, δ(q, a) désigne l'ensemble des étatsq^′ deQ tels qu'il existe une transition étiquetée para deq versq^′ ; -
F ⊂ Q l'ensemble des états finaux.
Soient
L'ensemble
Définition 3 (Calcul réussi au seuil
Soit
i)
ii)
iii) pour tout
Soit

Q2. Donner, en justifiant votre réponse,
Q3. Soit
i) une majoration de
ii) un encadrement de
iii) une majoration de
Partie II - Autour des tas
L'objectif est ici d'étudier et d'implémenter quelques outils autour d'une structure de données appelée tas binomial. Un tas binomial est une structure assez proche du tas binaire (utilisé par exemple pour réaliser une file de priorité), pour lequel la procédure de fusion de deux tas est efficace et peu complexe.
II. 1 - Arbre binomial
Un arbre enraciné est un graphe acyclique orienté possédant une unique racine et tel que tous les nœuds sauf la racine ont un unique parent.

Q7. Écrire les fonctions Python:
- Vide(a) qui renvoit True si l'arbre a est vide, False sinon;
- Racine(a) qui renvoit la racine de a si a est non vide;
- Fils(a) qui renvoit la liste des arbres, fils de la racine de a.
Un arbre binomial
i)
ii) pour
-
t_(n − 1) est un arbre binomial d'ordre (k − 1 ); - (
r, [t_0, ⋯t_(n − 2)] ) est un arbre binomial d'ordre (k − 1 ); - la racine de
t_(n − 1) a une valeur supérieure ou égale à r .

Q10. En déduire une fonction Python Ordre(a) qui renvoie l'ordre de l'arbre binomial a.
Q11. Montrer qu'un arbre binomial a d'ordre
Q12. Écrire une fonction récursive Python EstUnArbreBinomial (a) qui renvoie True si a est un arbre binomial, False sinon.
II. 2 - Tas binomial
Soient
Q13. Quelle structure Python adopter pour coder un tas?
Définition 8 (Signature d'un tas)
Soit
Soit
Algorithme 1 - Insertion de $p$ dans T.
Entrées : un tas $\mathrm{T}=\left\{a_{0} \cdots a_{k}\right\}$, une valeur $p$
Sorties: un tas T augmenté de la valeur $p$
début
$i \leftarrow 0$
Coder $p$ dans un arbre binomial a d'ordre 0
tant que $i<k+1$ et a non vide faire
si $a_{i}$ est vide alors
$a_{i} \leftarrow \mathrm{a}$
Vider a
sinon
a $\quad a \oplus a_{i} \quad(* * *)$
Vider $a_{i}$
$i \leftarrow i+1$
si a n'est pas vide alors
Ajouter a au tas T.
Q17. Évaluer la complexité de cet algorithme en fonction de
Q19. Donner, sans justification, un invariant de boucle pour la boucle de l'algorithme 1 permettant de prouver la correction de ce dernier.
Partie III - Autour de l'énumération des fractions positives
Notations
-
n ∧ d le PGCD (Plus Grand Commun Diviseur) den etd ; -
⌈x⌉ la partie entière supérieure de x. Ainsi⌈3.45⌉ = 4 ; -
⌊x⌋ la partie entière inférieure de x. Ainsi⌊3.45⌋ = 3 ; -
log_2 la fonction logarithme de base 2. C'est la fonction réciproque de la fonctioni ↦ 2^i .
L'objectif de cette partie est d'étudier une structure de données permettant d'énumérer l'ensemble des fractions positives.
Nous proposons dans la suite de répondre à ces questions en construisant un arbre, dit de Calkin-Wilf, permettant de manipuler cette énumération.
Un arbre binaire homogène est un arbre binaire dont tous les nœuds ont 0 successeur ou 2 successeurs, appelés fils gauche et droit. La hauteur
L'arbre de Calkin-Wilf est un arbre binaire homogène infini dont les nœuds sont des fractions positives. La racine de l'arbre est la fraction
Ainsi, si
Q20. Dessiner l'arbre de Calkin-Wilf jusqu'à une profondeur de 3. Par convention, la racine de l'arbre est au niveau 0.
On propose le type record :
Q21. Proposer un type OCaml récursif permettant de décrire l'arbre de Calkin-Wilf.
Q22. Montrer par récurrence sur le niveau d'exploration de l'arbre que si
Q27. Donner les huit premiers termes de la suite
Q30. Déduire des questions précédentes que la suite
La suite
Q31. Soit
Pour pouvoir énoncer le i-ième terme dans cette énumération, on introduit alors une suite auxiliaire, aux nombreuses propriétés arithmétiques et liens avec d'autres objets mathématiques.
La suite diatomique de Stern
Q33. Écrire une fonction récursive OCaml de signature stern : int -> int permettant de calculer les termes de cette suite.
La suite diatomique de Stern permet d'exprimer le i-ième terme dans l'énumération des fractions positives qui est induite par le parcours en largeur de l'arbre de Calkin-Wilf décrit ci-dessus.
- premier cas : les nœuds de valeur
v_i etv_(i + 1) sont à même profondeurk , fils d'un même nœudN , - deuxième cas : le nœud de valeur
v_i est le dernier nœud à droite à la profondeurk , - troisième cas : les nœuds de valeur
v_i etv_(i + 1) sont à même profondeurk , mais ne sont pas fils d'un même nœud.
On pose pour toutx > 0, f(x) = 1/(1 + 2⌊x⌋ − x) .
Q35. Montrer que dans le premier cas,v_(i + 1) = f(v_i) .
Q36. Montrer, en utilisant la Q26, que dans le deuxième cas on a encorev_(i + 1) = f(v_i) .
On étudie enfin le dernier cas : les nœuds de valeurv_i etv_(i + 1) sont sur une même profondeurk , mais ne sont pas les fils d'un même nœud. On va donc passer par la recherche d'un ancêtre commun de ces deux nœuds. Dans la suite, on s'intéressera toujours au premier ancêtre commun, c'est-à-dire celui de profondeur maximale.
En partant de la racine r , il est possible d'atteindre n'importe quel nœudN = n/d de l'arbre par une suite de déplacements vers la gauche (G) ou vers la droite (D). Le chemin de r versN peut donc être codé par un mot sur l'alphabet {G,D}.
Q37. Écrire une fonction OCaml de signature chemin : fraction -> direction list qui calcule le chemin de la racine à un nœud quelconque de l'arbre. Cette fonction fera appel à une fonction auxiliaire récursive. Ainsi chemin n d calcule la liste des directions à prendre pour passer de r au nœud
FIN
Questions fréquentes
4 questionsSur quoi porte le sujet d'option informatique CCINP MP 2022 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quoi porte le sujet d'option informatique CCINP MP 2022 ?
Sur trois thèmes indépendants : les automates augmentés, les arbres et tas binomiaux programmés en Python, et l'arbre de Calkin-Wilf en OCaml pour énumérer les fractions positives.
Quelle est la moyenne de l'informatique MP au CCINP 2022 ?
La moyenne de l'épreuve est de 10,6 sur 20 avec un écart-type de 3,74.
Le sujet d'informatique option MP CCINP 2022 était-il difficile ?
Non : le jury le qualifie de facile et de longueur adaptée. La partie sur les automates a toutefois été mal comprise.
Quelles erreurs le jury a-t-il relevées en option info CCINP MP 2022 ?
Des confusions entre calcul et mot dans un automate, entre invariant et variant de boucle, des types OCaml d'arbres binaires mal écrits et des preuves par induction mal rédigées.
Pas de description pour le moment
