CCINP Option Informatique MP 2019Sujet
- Permutations et algorithmes de tri
- Complexité algorithmique
- Automates finis déterministes et langages rationnels
- Expressions rationnelles et automate de Glushkov
- Algorithmique du texte : facteurs, plus long préfixe et suffixe communs
- Programmation récursive en Python et en Caml
Téléchargements
- Corrigé : pas encore disponible
- Rapport du jury : non disponible
Présentation du sujet
Permutations, automates et détection de répétitions dans les motsAfficher ou masquer la section
Présentation du sujet
Ce sujet d'informatique CCINP MP explore trois notions distinctes : le nombre d'inversions d'une permutation via le tri à bulles, la théorie des automates finis et des langages rationnels appliquée à la racine carrée d'un langage, puis des algorithmes de détection de facteurs carrés dans un mot, du plus naïf jusqu'à l'algorithme de Main-Lorentz. Il alterne questions de programmation en Python et en Caml et questions de preuve mathématique.
- 1Partie I : Inversions de permutations (informatique pour tous)Relie le nombre d'inversions d'une permutation au tri à bulles, puis définit et manipule la table d'inversions d'une permutation en Python.
- 2Partie II : Théorie des automates et des langages rationnelsÉtudie la racine carrée d'un langage rationnel, construit des automates (dont l'automate de Glushkov) et démontre que la racine carrée d'un langage rationnel est elle-même rationnelle.
- 3Partie III : Algorithmique des mots sans facteur carréDéveloppe un algorithme naïf puis l'algorithme de Main-Lorentz, fondé sur les tables de plus long préfixe et suffixe communs, pour détecter les répétitions dans un mot en Caml.
L'épreuve en chiffres
Moyenne 11,01 / 20 · écart-type 3,31 · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 11,01/ 20
- Écart-type
- 3,31
- Coefficient
- 7
- Durée
- 4 h
Votre note sur 20 à ce sujet, en conditions de concours.
Source : document officiel du concours, épreuve du 2 mai 2019. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.
Ces sujets peuvent vous intéresser
Pas encore de corrigé pour ce sujet : voici des sujets proches corrigés.
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 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.
Les calculatrices sont interdites
Partie I - Inversions de permutations (Informatique pour tous)
Soit
I. 1 - Tri et inversions
On rappelle l'algorithme de tri à bulles :
Algorithme 1 - Tri à bulles
Entrées: Une liste d'entiers L
pour $i$ allant de (taille de $L$ )-1 à 1 (bornes incluses) faire
pour $j$ allant de (taille de L)-1 à (taille de L)-i (bornes incluses) faire
si $L[j]<L[j-1]$ alors
Echanger L[j] et L[j-1]
fin
fin
fin
Dans la suite, on admet que l'algorithme du tri à bulles est bien un algorithme de tri.
Q3. Montrer que si on effectue exactement un échange dans une liste lors du tri à bulles, la nouvelle liste a exactement une inversion en moins.
Q4. En déduire une fonction Python nombre_inversions(L) qui prend en argument une liste L correspondant à une permutation et renvoyant le nombre d'inversions de celle-ci. Cette fonction sera une légère modification du tri à bulles.
I. 2 - Table d'inversions d'une permutation
Pour tout
Q6. Montrer que pour toute permutation
Q7. Soit
Q8. Montrer que pour tout entier
Q9. Écrire une fonction Python permutation_vers_table(L) qui prend en argument une permutation représentée par la liste L et qui renvoie la table d'inversions correspondante.
Q10. Écrire une fonction Python table_vers_permutation(L) qui prend en argument une liste L qui correspond à une table d'inversions et qui renvoie la permutation qui lui est associée.
Partie II - Théorie des automates et des langages rationnels
II. 1 - Définitions
-
Q un ensemble d'états;
− Σ un alphabet; -
q_0 l'état initial ; -
F ⊆ Q un ensemble d'états finaux;
− δ : Q × Σ → Q une application de transition.
Définition 3 (Langage). Un langage surΣ est une partie deΣ^⋆ .
Définition 4 (Application de transition étendue aux mots). SoitA = (Q, Σ, q_0, F, δ) un automate déterministe. On définit de manière récursiveδ^⋆ : Q × Σ^⋆ → Q par :
- l'ensemble
∅ est un langage rationnel; - les langages
{a} oùa est une lettre, sont rationnels; - si
L etL^′ sont des langages rationnels,L.L^′, L ∩ L^′, L ∪ L^′ sont des langages rationnels; - si
L est un langage rationnel,L^⋆ est un langage rationnel.
Théorème 1. Soit
II. 2 - Racine carrée d'un langage
Exemples
Q12. Décrire
Construction d'automates

Q14. On veut construire l'automate de Glushkov de
- Décrire
L^′ , le linéarisé deL . - Déterminer les préfixes de
L^′ de longueur 1 , les suffixes deL^′ de longueur 1 et les facteurs deL^′ de longueur 2. - En déduire l'automate de Glushkov
G deL .
Propriétés de la racine carrée d'un langage rationnel
Q16. Soit
Q17. En déduire que
Q18. Montrer que l'on a
Partie III - Algorithmique des mots sans facteur carré
III. 1 - Définitions
III. 2 - Fonctions utiles sur les listes
Q20. Écrire une fonction Caml de signature sous_liste : 'a list->int->int->'a list où sous_liste L k long renvoie une liste S qui est la sous-liste de L commençant à l'indice k et de longueur long. On suppose que l'indexation des listes commence à 0 .
On pourra dans la suite de l'énoncé utiliser les fonctions longueur et sous_liste.
III. 3 - Un algorithme naïf
-
aabfa - abfdanq
- ababa
-
avba .
Q23. Écrire une fonction Caml de signature estCarre : 'a list -> bool prenant en argument une liste
Q24. Déterminer la complexité en nombre de comparaisons de lettres de la fonction estCarre.
Q25. Écrire une fonction Caml de signature contientRepetitionAux : 'a list->int->bool prenant en argument une liste
Q26. Montrer que toute répétition d'un mot
Q27. En déduire une fonction Caml de signature contientRepetition : 'a list -> bool prenant en argument une liste
Q28. Quelle est la complexité en nombre de comparaisons de caractères de la fonction contientRepetition?
III. 4 - Algorithme de Main-Lorentz
- la première consiste à voir si étant donné deux mots
u etv , le motuv contient un carré non nul issu de la concaténation ; - la deuxième s'appuie sur le principe de "diviser pour régner".
À propos des carrés centrés
Q30. Soient
De la même manière, on peut montrer que
Ainsi, pour pouvoir déterminer s'il existe un carré centré sur
Calcul de table de préfixes
Q31. On pose
Q32. En déroulant l'algorithme 2 de la page suivante appliqué au mot
|
|
|
|
|
| 0 | - | 0 | 12 |
| 1 | 1 | 3 | 2 |
| 2 |
|
|
|
|
|
|
|
|
| 11 | 4 | 12 | 0 |
Par exemple, à l'initialisation,
Dans la suite, on suppose que l'algorithme tabpref(u,v) qui prend en argument deux chaînes de caractères
Q35. Quelle est la complexité de cet algorithme en nombre de comparaisons de caractères ?
Application des tables
Q37. Déterminer la complexité de cet algorithme en nombre de comparaisons de caractères.
Algorithme 2 - Calcul de la table $\operatorname{pref}_{u}$
Entrées : une chaîne de caractères $u$
Sorties : un tableau $\operatorname{pref}_{u}$
$i \leftarrow 0$, pref $\leftarrow$ tableau de taille $|u|$ initialisé à 0 , pref $[i] \leftarrow|u|, g \leftarrow 0$
pour $i$ allant de 1 à $|u|-1$ faire
si $i<g$ et $\operatorname{pref}[i-f]<g-i$ alors
$\operatorname{pref}[i] \leftarrow \operatorname{pref}[i-f]$
fin
sinon si $i<g$ et $\operatorname{pref}[i-f]>g-i$ alors
$\operatorname{pref}[i] \leftarrow g-i$
fin
sinon
$(f, g) \leftarrow(i, \max (g, i))$
tant que $g<|u|$ et $u[g]==u[g-f]$ faire
$g \leftarrow g+1$
fin
$\operatorname{pref}[i] \leftarrow g-f$
fin
fin
FIN
Questions fréquentes
4 questionsSur quels chapitres porte le sujet d'informatique CCINP MP 2019 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte le sujet d'informatique CCINP MP 2019 ?
Il porte sur les permutations et le tri à bulles, la théorie des automates finis et des langages rationnels, puis l'algorithmique du texte pour détecter les répétitions dans un mot.
Quelles parties du sujet d'informatique CCINP MP 2019 sont indépendantes ?
Le sujet est composé de trois parties indépendantes : inversions de permutations, automates et langages rationnels, puis algorithmique des mots sans facteur carré.
Ce sujet mélange-t-il Python et Caml ?
Oui, les parties I et II demandent des fonctions en Python tandis que la partie III demande des fonctions en Caml.
Quels résultats de cours faut-il connaître pour traiter ce sujet ?
Il faut maîtriser les permutations, les preuves par récurrence, la définition d'un automate déterministe et des langages rationnels, ainsi que le calcul de complexité algorithmique.
Pas de description pour le moment
