X ENS Option Informatique MP 2019Sujet, corrigé et rapport du jury
Autour des sous-mots et des sur-mots
- Programmation dynamique
- Analyse de complexité
- Preuves par récurrence et invariants
- Langages rationnels et expressions régulières
- Programmation en OCaml
Téléchargements
Présentation du sujet
DifficileSous-mots et sur-mots : algorithmique des sous-suites et des expressions rationnellesAfficher ou masquer la section
Présentation du sujet
DifficileL'épreuve explore des algorithmes sur la notion de sous-mot (sous-suite extraite) d'un mot fini. Une première partie porte sur le dénombrement des sous-mots et le calcul du plus petit sur-mot commun à deux mots, avec passage d'algorithmes exponentiels à des algorithmes polynomiaux par programmation dynamique. Une seconde partie étend le problème aux langages rationnels décrits par des expressions régulières, via un calcul de résidus.
- 1Préliminaires : décider si un mot est sous-mot d'un autreDémonstration d'une propriété récursive et programme polynomial de test de sous-mot.
- 2I. Compter et construireDénombrement du nombre de plongements, du cardinal des sous-mots et calcul du plus petit sur-mot commun, par programmation dynamique.
- 3II. Sous-mots et expressions rationnellesTest d'appartenance d'un mot aux sous-mots du langage d'une expression rationnelle, par calcul de résidus puis par matrice des facteurs couverts.
Difficile. La moyenne s'établit à 9,55/20 sur 1112 copies et le rapport note que très peu de candidats sont parvenus à la dernière question, aucun n'ayant traité correctement l'intégralité du sujet.
L'épreuve en chiffres
Moyenne 9,55 / 20 · écart-type 3,3 · 1 112 copies · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 9,55/ 20
- Écart-type
- 3,3
- Copies
- 1 112
Votre note sur 20 à ce sujet, en conditions de concours.
Source : rapport du jury. 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
5 erreurs relevéesPreuves de récurrence peu rigoureuses · Erreurs de bord classiques dans les programmes · Complexités affirmées sans justificationAfficher ou masquer la section
Ce qu'a observé le jury
5 erreurs relevéesL'épreuve, centrée sur l'algorithmique des sous-mots puis leur lien avec les expressions rationnelles, a été peu traitée au-delà de la question 11. Les preuves de récurrence manquent souvent de rigueur et de nombreux programmes comportent des erreurs de bord classiques.
Les erreurs les plus sanctionnées
- 1Preuves de récurrence peu rigoureusesQ3
Beaucoup de copies se contentent de paraphraser un algorithme en français au lieu de formuler une hypothèse de récurrence ou un invariant de boucle précis.
- 2Erreurs de bord classiques dans les programmes
Une majorité de programmes présente des problèmes de bord : tableaux trop petits d'une unité, accès hors bornes ou boucles s'arrêtant un cran trop tôt.
« d'un tableau de taille n ensuite parcouru avec un indice allant de 0 »
- 3Complexités affirmées sans justification
L'énoncé demandait de justifier les complexités en temps des algorithmes, mais beaucoup de candidats se contentent d'affirmer un résultat sans le démontrer.
- 4Cas du langage vide oubliéQ10, Q11, Q12
Dans la partie sur les expressions rationnelles, le cas particulier d'un sous-langage vide est très souvent ignoré, ce qui met en défaut plusieurs égalités demandées.
- 5Sujet peu terminéQ14, Q15, Q16
Très peu de candidats sont parvenus jusqu'à la dernière question et personne n'a traité l'ensemble du sujet correctement.
« aucun n'a su traiter toutes les questions correctement »
Ce qui a été bien réussi
- La question 1b (programme de test de sous-mot) a été plutôt bien traitée, avec peu de candidats proposant un code exponentiel.
- Les questions 2 et 6, portant sur des propriétés de dénombrement, ont été plutôt bien traitées.
Conseils du jury
- Rédiger des preuves rigoureuses avec une hypothèse de récurrence ou un invariant de boucle clairement identifié.
- Toujours justifier les complexités annoncées plutôt que de les affirmer.
- Découper un programme long en fonctions nommées explicitement plutôt qu'en aux, aux2, aux3.
- Soigner l'indentation du code et l'usage de couleurs, appréciés des correcteurs.
- Vérifier systématiquement les cas limites : mot vide, tableaux de taille nulle, bornes d'indices.
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
CONCOURS D’ADMISSION 2019
VENDREDI 19 AVRIL 2019-14h00-18h00 FILIERE MP (Spécialité Informatique) Epreuve
n^∘4
L'utilisation des calculatrices n'est pas autorisée pour cette épreuve.
Le langage de programmation sera obligatoirement OCaml.
Autour des sous-mots et des sur-mots
Préliminaires
I. Compter et construire
b. Que vaut
c. Montrez que
let nb_plongements (v:string) (u:string) =
let rec aux i j =
if i = 0 then 1
else if j = 0 then 0
else if v.[i-1] = u.[j-1] then (aux (i - 1) (j - 1)) + (aux i (j - 1))
else aux i (j - 1)
in
aux (String.length v) (String.length u)
a. Prouvez sa terminaison.
b. Justifiez sa correction, c.-à-d., expliquez pourquoi elle renvoie bien la valeur (\begin{array}{l}{u}\\{v}\end{array}).
b. Montrez que l'on ne peut pas majorer
c. Montrez qu'il existe une constante
Indication : on pourra utiliser la programmation dynamique.
On cherche maintenant à dénombrer les sous-mots d'un mot
b. En se basant sur vos équations, programmez une fonction OCaml nb_sousmots : string -> int qui, pour un mot
b. Généralisez la propriété précédente en donnant des équations qui permettent de caractériser pcsmc
c. Programmez une fonction OCaml calculant pcsmc
II. Sous-mots et expressions rationnelles
type ratexp =
| Epsilon
| Empty
| Letter of char
| Sum of ratexp * ratexp
| Product of ratexp * ratexp
| Star of ratexp
let e_exmp1 = Product (Letter 'a', Star (Sum (Letter 'b', Letter 'c')))
let e_exmp2 = Star (Star (Sum (Empty, Epsilon)))
let rec taille_ratexp (e : ratexp) =
match e with
| Empty -> 1 | Epsilon -> 1 | Letter _ -> 1
| Sum (e1,e2) -> 1 + taille_ratexp(e1) + taille_ratexp(e2)
| Product (e1,e2) -> 1 + taille_ratexp(e1) + taille_ratexp(e2)
| Star (e1) -> 1 + taille_ratexp(e1)
let e1 = Product (Star (Product (Sum (Letter 'a', Empty), Letter 'c')),
Product (Letter 'b',
Product (Empty,
Star (Product (Letter 'c', Letter 'c')))))
let e2 = Product (Star(Product(Letter 'b', Letter 'a')),
Product (Sum (Epsilon, Letter 'a'), Star(Letter 'c')))
(1)
(2)
(3)
(4)
b. Donnez (et justifiez) un majorant, en fonction de
Indication : on pourra utiliser la fonction char_residu_ratexp.
b. Votre programme s'exécute-t-il en temps polynomial en
Pour ce code, il est suggéré de construire la matrice associée à une expression complexe
Questions fréquentes
4 questionsSur quels chapitres porte l'épreuve Informatique A X-ENS MP option info 2019 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte l'épreuve Informatique A X-ENS MP option info 2019 ?
Le sujet porte sur les algorithmes de dénombrement de sous-mots, la programmation dynamique et le lien entre sous-mots et langages rationnels.
Quelle est la moyenne à l'épreuve Informatique A X-ENS MP 2019 ?
La moyenne est de 9,55/20 sur 1112 copies, avec un écart-type de 3,3.
Quelles erreurs le jury a-t-il le plus relevées sur ce sujet ?
Des preuves de récurrence trop informelles, des complexités affirmées sans justification et des erreurs de bord classiques dans les programmes.
Le sujet Informatique A X-ENS MP 2019 est-il faisable en entier ?
Non, le rapport indique que très peu de candidats sont parvenus à la dernière question et qu'aucun n'a traité l'ensemble du sujet correctement.
Pas de description pour le moment
