WikiPrépaLivrets

CCINP Option Informatique MP 2020Sujet et rapport du jury

1,0(1 vote)
  • Logique propositionnelle et connecteurs logiques
  • Démonstration par induction structurelle
  • Programmation Python : listes, tests, fonctions
  • Mots, ordre lexicographique et relations d'équivalence
  • Graphes orientés et circuits eulériens
  • Programmation fonctionnelle en OCaml (sans boucles ni références)

Téléchargements

  • Corrigé : pas encore disponible

Présentation du sujet

Accessible
Connecteur de Sheffer et complétude logique, problème de Freudenthal en Python, mots de Lyndon et mots de de Bruijn en OCaml
Afficher ou masquer la section

Le sujet d'informatique CCINP MP, session 2020, se compose de trois parties indépendantes. La première étudie le connecteur logique de Sheffer et la complétude des systèmes de connecteurs. La deuxième, en Python, implémente une solution au problème de déduction de Freudenthal. La troisième, en OCaml sans traits impératifs, étudie les mots de Lyndon et les mots de de Bruijn ainsi que les algorithmes et graphes permettant de les construire.

  1. 1Partie I : logique et calcul des propositionsÉtude du connecteur de Sheffer, de sa table de vérité, de son expression en fonction d'autres connecteurs, puis démonstration par induction structurelle que ce connecteur seul forme un système complet.
  2. 2Partie II : le problème de FreudenthalÉcriture de fonctions Python successives permettant de reconstituer, comme dans le dialogue entre Pierre et Sophie, les deux entiers cachés à partir de leur somme et de leur produit.
  3. 3Partie III : mots de Lyndon et de de BruijnÉtude de l'ordre lexicographique, des colliers et des mots de Lyndon, puis de leur lien avec les mots de de Bruijn à travers des graphes orientés, des circuits eulériens et plusieurs algorithmes de construction en OCaml.

Accessible. Le rapport qualifie le sujet de relativement facile et progressif, chaque candidat ayant un minimum de prérequis ayant pu s'exprimer, avec une longueur adaptée puisque beaucoup de candidats sont allés jusqu'aux questions 39-42.

L'épreuve en chiffres

Moyenne 10,53 / 20 · écart-type 3,64 · où vous situez-vous ?
Afficher ou masquer la section
Moyenne
10,53/ 20
Écart-type
3,64
Coefficient
7
Durée
4 h
moyenne 10,5305101520
Deux tiers des copies environ (moyenne ± écart-type)

Votre note sur 20 à ce sujet, en conditions de concours.

Source : document officiel du concours, épreuve du 6 juillet 2020. 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ées
Mauvaise formule de base pour l'implication · Induction structurelle absente pour prouver la complétude · Conditions de validité des couples non vérifiées
Afficher ou masquer la section

Le sujet, composé de trois parties indépendantes de logique, de programmation Python et d'algorithmique en OCaml, est jugé relativement facile et progressif, avec une longueur adaptée. Il a permis de bien classer les candidats et de bien discriminer ceux ayant un niveau faible. Le niveau de programmation est globalement jugé correct. Les erreurs proviennent régulièrement d'une lecture trop rapide de l'énoncé, du non-respect des consignes (justification manquante, langage de programmation imposé non respecté) et de points de cours mal sus.

Les erreurs les plus sanctionnées

  1. 1
    Mauvaise formule de base pour l'implicationQ5

    Une formule de base incorrecte pour l'implication conduit à une expression fausse du connecteur de Sheffer.

    « Mauvaise formule de base pour l'implication »
  2. 2
    Induction structurelle absente pour prouver la complétudeQ8

    Cette question, qui ne demandait que de rédiger la preuve par induction à partir d'éléments déjà établis dans les questions précédentes, est globalement mal traitée, avec seulement 1 % à 2 % de bonnes réponses.

    « Pas d'induction structurelle. »
  3. 3
    Conditions de validité des couples non vérifiéesPartie II

    En partie II, certaines conditions attendues sur les entiers manipulés, comme x inférieur à y ou la contrainte sur leur somme, ne sont pas toujours vérifiées par les candidats dans leurs fonctions Python.

    « certaines conditions n'ont pas été vérifiées »
  4. 4
    Acrobaties inutiles avec des compteurs et des boucles imbriquéesPartie II

    De nombreux candidats se lancent dans des constructions compliquées à base de compteurs et de boucles imbriquées plutôt que d'utiliser une boucle simple, et se perdent alors dans les indices.

    « et se perdent dans les indices »
  5. 5
    Comparaison de tailles au lieu de l'ordre lexicographiqueQ18

    Pour la fonction d'ordre entre deux mots, des candidats comparent la longueur des mots au lieu d'utiliser l'ordre alphabétique attendu.

    « Comparaison des tailles au lieu de l'ordre alphabétique. »
  6. 6
    Confusion entre sommets et arcs dans le circuit eulérienQ36

    Une incompréhension de la définition du circuit eulérien conduit certains candidats à croire qu'il ne doit passer que par tous les sommets, alors qu'il doit passer par tous les arcs du graphe.

    « Incompréhension du circuit eulérien qui ne passait que par « tous les sommets » et non « par tous les arcs ». »

Ce qui a été bien réussi

  • La partie I est globalement bien traitée ; cette partie facile n'a pas posé de problème, sauf pour les deux dernières questions.
  • La partie II est jugée assez facile pour les candidats maîtrisant un minimum le Python, avec plusieurs solutions différentes, toutes justes, proposées à la question 17.
  • Peu d'erreurs de syntaxe Python sont relevées en partie II.
  • Le sujet de la partie III a été bien compris dans l'ensemble et les questions 18 à 30 sont, dans l'ensemble, bien traitées.

Conseils du jury

  • Lire l'énoncé attentivement pour éviter les inattentions et les erreurs de lecture rapide.
  • Respecter scrupuleusement les consignes : fournir une justification lorsqu'elle est demandée, utiliser le langage de programmation imposé (Python ou OCaml selon la partie).
  • Connaître précisément les points de cours mobilisés, en particulier les démonstrations par induction.
  • En OCaml, respecter l'interdiction des traits impératifs (boucles, références) lorsque le sujet l'impose explicitement.
  • Préférer une boucle simple à des constructions à base de compteurs imbriqués pour limiter les erreurs 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

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

ÉPREUVE MUTUALISÉE AVEC E3A-POLYTECH ÉPREUVE SPÉCIFIQUE - FILIÈRE MP

INFORMATIQUE

Jeudi 7 mai : 8 h-12 h

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

Le sujet est composé de trois parties, toutes indépendantes.

Partie I - Logique et calcul des propositions

Dans la suite, les variables propositionnelles seront notées x_1, x_2…. Les connecteurs propositionnels ∧ (conjonction), ∨ (disjonction), ⇒ (implication) et ⇔ (équivalence) seront classiquement utilisés. De même, la négation d'une variable propositionnelle x_i (respectivement d'une formule F ) sera notée ¬x_i( resp. ¬F).

I. 1 - Définitions

Définition 1 (Minterme, maxterme).
Soit (x_1⋯x_n) un ensemble de n variables propositionnelles.
  • On appelle minterme toute formule de la forme y_1 ∧ y_2 ∧ ⋯y_n où pour tout i ∈ {1, ⋯, n}y_i est un élément de {x_i, ¬x_i}.
  • On appelle maxterme toute formule de la forme y_1 ∨ y_2 ∨ ⋯y_n où pour tout i ∈ {1, ⋯, n}y_i est un élément de {x_i, ¬x_i}.
Les mintermes (respectivement maxtermes) y_1 ∧ y_2 ∧ ⋯y_n et y_1^′ ∧ y_2^′ ∧ ⋯y_n^′( resp y_1 ∨ y_2 ∨ ⋯y_n et y_1^′ ∨ y_2^′ ∨ ⋯y_n^′ ) sont considérés identiques si les ensembles {y_i, 1 ≤ i ≤ n} et {y_i^′, 1 ≤ i ≤ n} le sont.
Q1. Donner l'ensemble des mintermes et des maxtermes sur l'ensemble ( x_1, x_2 ).
Définition 2 (Formes normales conjonctives et disjonctives).
Soit F une formule propositionnelle qui s'écrit à l'aide de n variables propositionnelles (x_1⋯x_n).
  • On appelle forme normale conjonctive de F toute conjonction de maxtermes logiquement équivalente à F.
  • On appelle forme normale disjonctive de F toute disjonction de mintermes logiquement équivalente à F.
Définition 3 (Système complet).
Un ensemble de connecteurs logiques C est un système complet si toute formule propositionnelle est équivalente à une formule n'utilisant que les connecteurs de C.
Par définition, C = {¬, ∨, ∧, ⇒, ⇔ } est un système complet.

I. 2 - Le connecteur de Sheffer

On définit le connecteur de Sheffer, ou d'incompatibilité, par x_1⋄x_2 = ¬x_1 ∨ ¬x_2.
Q2. Construire la table de vérité du connecteur de Sheffer.
Q3. Exprimer ce connecteur en fonction de ¬ et ∧.
Q4. Vérifier que ¬x_1 = x_1⋄x_1.
Q5. En déduire une expression des connecteurs ∧, ∨ et ⇒ en fonction du connecteur de Sheffer. Justifier en utilisant des équivalences avec les formules propositionnelles classiques.
Q6. Donner une forme normale conjonctive de la formule x_1⋄x_2.
Q7. Donner de même une forme normale disjonctive de la formule x_1⋄x_2.
Q8. Démontrer par induction sur les formules propositionnelles que l'ensemble de connecteurs C = {⋄} est un système complet.
Q9. Application : soit F la formule propositionnelle x_1 ∨ (¬x_2 ∧ x_3). Donner une forme logiquement équivalente de F utilisant uniquement le connecteur de Sheffer.

Partie II - Le problème de Freudenthal (Informatique pour tous)

L'objectif de cette partie est de proposer une implémentation en langage Python d'une solution au problème de Freudenthal.
Hans Freudenthal (1905-1990), mathématicien allemand naturalisé néerlandais, spécialiste de topologie algébrique, est connu pour ses contributions à l'enseignement des mathématiques. En 1969, il soumet à une revue mathématique le problème suivant:
Un professeur dit à ses deux étudiants Sophie et Pierre : "J'ai choisi deux entiers x et y, tels que 1 < x < y et x + y ≤ n. J'ai confié à Pierre la valeur Π du produit de x et y. J'ai confié à Sophie la valeur Σ de la somme de x et y. Pierre, Sophie, je vous demande de trouver x et y."
Pierre et Sophie engagent alors le dialogue suivant :
  • Pierre: "Je ne connais pas les nombres x et y."
  • Sophie : "Avant même que tu me le dises, je savais déjà que tu ne connaissais pas x et y."
  • Pierre : "Ah! eh bien maintenant je connais x et y."
  • Sophie : "Très bien, mais moi aussi alors maintenant je connais x et y."
Dans la suite, on note N_n = {(x, y) ∈ ℕ^2, 1 < x < y et x + y ≤ n}.
Si la discussion entre Sophie et Pierre semble stérile, une quantité importante d'informations est cependant échangée qui amène au bout du dialogue à la solution.
Q10. À quelle condition sur x et y Pierre aurait-il pu dire dès le début : "Je connais x et y "?
Puisque Pierre ne peut répondre tout de suite, cela signifie que le produit Π peut s'écrire pour plusieurs couples d'entiers (x, y) ∈ N_n.
Q11. Écrire une fonction CoupleProd(n) qui renvoie la liste des entiers P pour lesquels il existe au moins deux couples (x, y) ∈ N_n tels que xy = P. Par exemple, CoupleProd (9)=[12] puisque 12 = 3 × 4 = 2 × 6 et qu'aucune autre valeur ne satisfait la propriété.
Sophie savait déjà que Pierre ne connaissait pas la réponse. C'est donc que, pour tout (x, y) ∈ N_n qui satisfait x + y = Σ, le produit xy est dans la liste précédente.
Q12. Soit un entier S ≤ n. Écrire une fonction Prod(S, n) qui renvoie, pour l'ensemble des (x, y) ∈ N_n tels que x + y = S, la liste des entiers P = xy. Par exemple, Prod(8, 9) retourne [12, 15] puisque 8 = 6 + 2 = 3 + 5.
Q13. Pour S ≤ n, en déduire une fonction Candidat_S(n) qui renvoie la liste des entiers S tels que la liste Prod(S, n) est incluse dans la liste CoupleProd(n).
Pierre peut maintenant déduire la valeur de Σ du fait qu'elle appartient à la liste retournée par la fonction Candidat_S(n). Plus précisément, le produit Π n'apparaît dans la liste Prod(S, n) que pour une seule valeur de S de la liste Candidat_S(n). Pour déterminer cet unique S, on recherche tout d'abord les produits P pour lesquels :
  • il existe deux sommes S_1 et S_2 dans la liste Candidat_S(n) telles que S_1 < S_2;
  • P apparaît dans les listes Prod(S_1, n) et Prod(S_2, n).
Q14. Écrire une fonction Double_P(n) qui renvoie la liste des produits P satisfaisant ces deux conditions.
Il reste à construire une fonction Reste_S(n) permettant de ne retenir que les sommes S de la liste Candidat_S(n) pour lesquelles il existe un unique élément en commun entre les listes Prod(S,n) et Double_P(n).
Q15. Écrire une fonction Reste_S(n) qui renvoie la liste de ces sommes.
Pour que Pierre conclue, il faut que la liste Reste_S(n) soit réduite à un singleton. Pour que Sophie conclue également, il lui suffit de rechercher les éléments de la liste Prod(S, n) qui ne sont pas dans Double_P(n).
Q16. Pour S ≤ n, écrire une fonction Reste_ P(S, n) qui renvoie la liste de ces produits.
Les deux étudiants connaissent maintenant Σ et Π.
Q17. Pour S ≤ n, écrire une fonction Solution( P, S, n ) qui retourne le couple ( x, y ) recherché.

Partie III - Mots de Lyndon et de de Bruijn

Cette partie comporte des questions nécessitant un code Caml. Pour ces questions, les réponses ne feront pas appel aux fonctionnalités impératives de langage (en particulier pas de boucles, pas de références).
On considère ici un alphabet totalement ordonné de k symboles, noté Σ.

III. 1 - Mots de Lyndon

III.1.1 - Définitions

Définition 4 (Mot).
Un mot est une suite finie de longueur n de symboles m = m_0⋯m_(n − 1) où pour tout i, m_i ∈ Σ et n ≥ 1 est la longueur de m. On notera n = |m|.
On note Σ^n l'ensemble des mots de longueur n construits sur Σ et Σ^∗ l'ensemble des mots de longueur quelconque construits sur Σ. On note enfin ε le mot vide.
Le type Caml choisi pour représenter un mot est une chaîne de caractères (string). Les éléments de Σ sont représentés par le type char.
Dans toute la suite, les seules fonctions/méthodes Caml sur les chaînes de caractères qui peuvent être utilisées sont:
  • S.[i] (valeur du i^e caractère)
  • l'opérateur de concaténation ^
  • la fonction String.length : string -> int String. length s retourne la longueur de s.
  • la fonction String.sub : string -> int -> int -> string.
String.sub s start l retourne une chaîne de longueur l contenant la sous-chaîne de s qui commence en start.
Définition 5 (Préfixe, suffixe).
Soient m = m_0⋯m_(|m| − 1) et p = p_0⋯p_(|p| − 1) deux mots de Σ^∗ :
  • mp = m_0⋯m_(|m| − 1)p_0⋯p_(|p| − 1) ∈ Σ^(|m| + |p|) est le concaténé de m et p.
  • m est un préfixe de p si |m| < |p| et m_i = p_i pour 0 ≤ i ≤ |m| − 1.
  • m est un suffixe de p si |m| < |p| et m_i = p_(|p| − |m| + i) pour 0 ≤ i ≤ |m| − 1.
On définit alors la relation < par :
m < p ⇔ (m est un préfixe de p) ou
(Il existe k ∈ [ [0, |m| − 1] ] tel que pour tout i ∈ [ [0, k − 1] ], m_i = p_i et m_k < p_k ).
Q18. On donne le type
type comparaison = Inferieur | Egal | Superieur ;;
Écrire une fonction recursive ordre : string -> string -> comparaison telle que ordre m p est l'ordre relatif des mots m et p.
Définition 6 (Ordre lexicographique).
La relation définie par: m ≤ p si et seulement si m = p ou m < p est appelée ordre lexicographique sur Σ^∗.
Définition 7 (Conjugué).
Soit m ∈ Σ^n. Un conjugué de m est un mot de la forme m_i⋯m_(n − 1)m_0⋯m_(i − 1), pour i ∈ [ [0, n − 1] ]. Par convention, le conjugué de m pour i = 0 est le mot m lui-même.
Q19. Écrire une fonction Caml conjugue : string -> int -> string telle que conjugue m i retourne le conjugué de m débutant par le i^e caractère de m, 0 ≤ i ≤ |m| − 1.
La notion de conjugaison induit une relation C définie sur Σ^∗ par mCp si et seulement si p est un conjugué de m.
Q20. Montrer que C est une relation d'équivalence.
Définition 8 (Collier).
Un collier est le plus petit mot dans l'ordre lexicographique d'une classe de mots équivalents par la relation C.
Un collier d'ordre n est dit périodique s'il peut s'écrire m^l, où m ∈ Σ^r, r ≥ 2 et l > 1. Il est dit apériodique sinon, autrement dit si deux conjugaisons non triviales des membres de sa classe d'équivalence ne sont jamais égales.
Définition 9 (Mot de Lyndon).
Un mot m ∈ Σ^∗ est un mot de Lyndon si c'est un collier apériodique.
Q21. On suppose 0 < 1. Pour les mots suivants, indiquer si ce sont ou non des mots de Lyndon. Dans le cas négatif, justifier votre réponse :
(i). 0010011.
(ii). 010011.
(iii). 001001.
Q22. Écrire une fonction Caml Lyndon : string -> bool telle que Lyndon m renvoie true si m est un mot de Lyndon. Cette fonction fera appel à une fonction récursive.

III.1.2 - Génération de mots de Lyndon

Soit m ∈ Σ^∗ un mot de Lyndon. Pour générer à partir de m un mot de Lyndon q de longueur au plus n ≥ |m| sur Σ, on utilise l'algorithme 1 .
Algorithme 1 : Algorithme de génération d'un mot de Lyndon
Données : $\mathbf{m} \in \Sigma^{*}$ un mot de Lyndon, $n \geq|m|$
Résultat : $\mathbf{q}$ le mot de Lyndon généré à partir de $\mathbf{m}$.
*** Etape 1 ***
Concaténer le mot $\mathbf{m}$ à lui même jusqu'à obtenir un mot $\mathbf{q}$ de longueur $n$. La dernière occurrence de
    m pourra être tronquée pour arriver à un mot de longueur exactement $n$.
*** Etape 2 ***
tant $\mathbf{q u e}$ le dernier symbole de $\mathbf{q}$ est le plus grand symbole de $\Sigma$ faire
    Ôter ce symbole de $\mathbf{q}$.
*** Etape 3 ***
Remplacer le dernier symbole de $\mathbf{q}$ par le symbole qui suit dans $\Sigma$.
retourner q.
Q23. Donner l'indice dans m de la i^e lettre de q en fonction de i et |m|.
Q24. Pour Σ = {0, 1}, on donne le mot de Lyndon m = 00111 et n = 9. Donner le mot de Lyndon généré par l'algorithme, en déroulant les différentes étapes produites par l'algorithme permettant d'aboutir au mot de Lyndon.
L'algorithme 1 peut être utilisé pour générer tous les mots de Lyndon de longueur au plus n. Pour ce faire, on part du plus petit symbole de Σ et on itère les trois étapes (1-2-3) de l'algorithme jusqu'à arriver au mot vide.
Q25. Partant de m = 0 et toujours pour Σ = {0, 1}, construire par l'algorithme tous les mots de Lyndon de longueur au plus 4.
Q26. Donner la complexité de l'algorithme 1 au pire des cas en nombre d'ajouts ou de suppressions de caractères.

III.1.3 - Factorisation de mots de Lyndon

Définition 10 (Factorisation de Lyndon).
Soit m ∈ Σ^∗. Une factorisation de m est une suite m_1, …m_l de mots de Lyndon telle que m = m_1⋯m_l avec m_1 ≥ m_2⋯ ≥ m_l.
On admet le résultat suivant :
Théorème 1 (Factorisation d'un mot).
Tout mot m ∈ Σ^∗ admet une unique factorisation de Lyndon.
L'algorithme 2 propose une méthode de factorisation d'un mot m (on ne demande pas de le justifier). Le principe est d'itérer sur la chaîne des symboles de m pour trouver le plus grand mot de Lyndon possible. Lorsqu'un tel mot est trouvé, il est ajouté à la liste L des facteurs de m et la recherche est poursuivie sur la sous-chaîne restante.
Q27. En utilisant l'algorithme 2, écrire une fonction factorisation m qui réalise la factorisation d'un mot m donné. Cette fonction fera appel à une ou des fonction(s) récursive(s).
Algorithme 2 : Algorithme de factorisation d'un mot de Lyndon
Données : $\mathbf{m} \in \Sigma^{*}$ un mot de Lyndon.
Résultat : la liste $\mathcal{L}$ des mots de Lyndon décroissants de la factorisation de $\mathbf{m}$.
$\mathcal{L} \leftarrow[]$
$j \leftarrow 1$
$k \leftarrow 0$
tant que $j \leq|\mathbf{m}|$ faire
    si $j=|\mathbf{m}|$ ou $m_{k}>m_{j}$ alors
        $\mathbf{p}=m_{0} \cdots m_{j-k-1}$
        Ajouter $\mathbf{p}$ à $\mathcal{L}$
        Supprimer $\mathbf{p}$ de $\mathbf{m}$
        $k \leftarrow 0$
        $j \leftarrow 1$
    sinon
        si $m_{k}=m_{j}$ alors
            $k \leftarrow k+1$
            $j \leftarrow j+1$
        sinon
            $k \leftarrow 0$
            $j \leftarrow j+1$
retourner $\mathcal{L}$.

III. 2 - Mots de de Bruijn

III.2.1 - Définition

Définition 11 (Mot de de Bruijn).
Un mot de de Bruijn d'ordre n sur Σ est un collier qui contient tous les mots de Σ^n une et une seule fois.
Par exemple, pour Σ = {a, b, c} et n = 2, m = abacbbcca est un mot de de Bruijn puisqu'il contient une unique fois chaque mot de longueur 2 sur Σ, le mot 'aa' étant obtenu par circularité de m.
Q28. Donner la longueur d'un mot de de Bruijn en fonction de n et du nombre k de symboles de Σ.

III.2.2 - Graphe de de Bruijn

Définition 12 (Graphe de de Bruijn).
Le graphe de de Bruijn d'ordre n sur Σ est le graphe orienté B(k, n) = (V, E) où :
  • V = Σ^n est l'ensemble des sommets du graphe;
  • E = {(am, mb), a, b ∈ Σ, m ∈ Σ^(n − 1)} est l'ensemble des arcs orientés du graphe.
On value les arcs E par le dernier symbole du noeud terminal de chaque arc : ainsi (am, mb ) ∈ E est étiqueté par b.
Dans ce graphe, certains arcs ont pour sommet initial et terminal un même sommet de V. Ces arcs sont appelés des boucles (figure 1).
Q29. Donner l'ensemble des mots de longueur 3 sur Σ = {0, 1}. En déduire de graphe de de Bruijn B(2, 3) associé.
Q30. Montrer que le degré entrant et le degré sortant de chaque sommet est égal à k.
Q31. En déduire le nombre d'arcs orientés |E| en fonction de k et n.
Figure 1 - Exemple de graphe avec boucle sur le sommet A.
Définition 13 (Successeur, prédécesseur).
Soit G = (V, E) un graphe orienté. v ∈ V est un successeur (respectivement prédécesseur) de u ∈ V si (u, v) ∈ E( resp. (v, u) ∈ E).
Q32. Soient B(k, n) = (V, E) et m ∈ V. Montrer que tous les prédécesseurs de m ont le même ensemble de successeurs.
Q33. Soit p = (p_0⋯p_(n − 1)) ∈ V. Donner l'ensemble des sommets m tels que (p, m) ∈ E.
On suppose disposer de B(k, n) et on souhaite construire B(k, n + 1) à partir de ce graphe.
Q34. Proposer une méthode pour construire les sommets de B(k, n + 1) à partir des arcs de B(k, n). Donner le sommet créé dans B(2, 4) à partir de l'arc (001, 010) de B(2, 3).
On dit que deux arcs e_1, e_2 ∈ E sont adjacents dans B(k, n) si ces deux arcs s'écrivent e_1 = (m, p) et e_2 = (p, q) pour m, p, q ∈ V.
Q35. Proposer de même une construction des arcs de B(k, n + 1) en fonction des arcs adjacents de B(k, n). Donner l'arc de B(2, 4) créé par les arcs adjacents de B(2, 3)(001, 011) et (011, 110).

III.2.3 - Construction des mots de de Bruijn

On propose ici trois algorithmes de construction de mots de de Bruijn.

III.2.3.1 - Construction à l'aide de B(k, n)

Les mots de de Bruijn d'ordre n sur Σ peuvent être construits en parcourant B(k, n).
Définition 14 (Circuit eulérien).
Soit G un graphe orienté. Un circuit eulérien est un chemin dont l'origine et l'extrémité coïncident et passant une fois et une seule par chaque arête de G.
Q36. Construire B(2, 2) et trouver dans ce graphe un circuit eulérien. Vérifier que la concaténation des étiquettes lues au fil de ce circuit donne un représentant d'un mot de de Bruijn et donner son ordre sur {0, 1}.
On admet les résultats suivants :
(i). un graphe G = (V, E) possède un circuit eulérien si et seulement si il est connexe et si, pour tout v ∈ V, le degré entrant de v et le degré sortant de v sont égaux.
(ii). un circuit eulérien dans le graphe B(k, n) correspond à un mot de de Bruijn.
Q37. En déduire qu'il existe au moins un mot de de Bruijn pour tout alphabet Σ et tout n.
Ainsi, la concaténation des étiquettes lues au fil d'un circuit eulérien de B(k, n) donne un représentant d'un mot de de Bruijn d'ordre n + 1 sur k symboles.

III.2.3.2 - Construction à l'aide de l'algorithme Prefer One

Pour construire les mots de de Bruijn d'ordre n sur Σ = {0, 1}, on peut également utiliser l'algorithme 3, dit algorithme Prefer One.
Algorithme 3 : Algorithme Prefer One
Données : $n, \Sigma$
Résultat : $\mathbf{m}$ mot de de Bruijn de longueur $n$ sur $\Sigma$.
$\mathbf{m} \leftarrow$ suite de $n$ zeros
$\mathrm{STOP} \leftarrow$ false
tant que $S T O P=$ false faire
    Etape 1
    Ajouter un 1 à la fin de $\mathbf{m}$.
    si les $n$ derniers symboles de $\mathbf{m}$ n'ont pas été rencontrés auparavant alors
        Répeter Etape 1
    sinon
        Retirer le 1 ajouté à la fin de $\mathbf{m}$.
        Passer à Etape 2
    Etape 2
    Ajouter un 0 à la fin de $\mathbf{m}$.
    si les $n$ derniers symboles de $\mathbf{m} n$ 'ont pas été rencontrés auparavant alors
        Aller à l'Etape 1
    sinon
        $\mathrm{STOP} \leftarrow$ true
retourner m.
Dans cet algorithme, "les n derniers symboles de m n'ont pas été rencontrés auparavant" signifie que le mot composé des n derniers symboles de m n'est pas un sous-mot de m, situé entre le premier et le (|m| − 1)^e symbole de m.
Q38. Appliquer l'algorithme au cas n = 3 et Σ = {0, 1}. Écrire les valeurs successives de m au cours de l'exécution.

III.2.3.3 - Construction à l'aide de la relation aux mots de Lyndon

La troisième construction utilise les notions de collier et de mots de Lyndon.
Q39. Donner, pour k = 2 et n = 4, les classes d'équivalence de tous les mots binaires de longueur 4 pour la relation C. En déduire les colliers correspondants.
Q40. En déduire les mots de Lyndon de longueur 4 pour Σ = {0, 1}.
Plus généralement, les mots de de Bruijn et de Lyndon sont étroitement liés. On peut montrer que si l'on concatène, dans l'ordre lexicographique, les mots de Lyndon sur k symboles dont la longueur divise un
entier n, alors on obtient le mot de de Bruijn le plus petit, pour l'ordre lexicographique, de tous les mots de de Bruijn de longueur n sur k symboles.
Q41. Déduire de la question précédente le plus petit mot de de Bruijn pour n = 4 et Σ = {0, 1}.

III.2.4 - Application

La soirée a été longue, vous rentrez chez vous mais, au pied de votre immeuble, vous vous trouvez confronté à un sérieux problème : vous avez complètement oublié le code d'entrée à n chiffres de la porte. On suppose que le digicode de l'appartement est composé de 1 ≤ k ≤ 10 chiffres 0, 1, …k − 1, qui constituent l'alphabet Σ.
Le digicode fonctionne de la façon suivante : vous tapez successivement sur les chiffres afin de composer un mot. À chaque nouveau symbole entré à partir du n-ième, le digicode teste le mot constitué par les n derniers chiffres pour voir s'il correspond au code secret.
Ainsi, par exemple pour n = 4, si vous tapez la séquence 021201, le digicode teste successivement 0212, 2120 et 1201.
Étant pressé de regagner votre lit, vous cherchez à taper un minimum de touches pour ouvrir la porte. On note n~ la longueur de la plus petite séquence de frappe de touches qui vous permet de rentrer dans l'immeuble.
Q42. Donner un encadrement de n~ :
  • pour la borne supérieure, on considèrera que l'on met bout à bout tous les mots possibles de n chiffres construits sur Σ;
  • pour la borne inférieure, on cherchera un mot sans redondance, c'est-à-dire qui contient une et une seule fois chaque mot de n chiffres.
Q43. Expliquer en une phrase en quoi les mots de de Bruijn peuvent vous aider. En vous inspirant de l'algorithme 3, donner une séquence la plus courte de chiffres à taper pour ouvrir à coup sûr la porte de votre immeuble, lorsque n = 2 et k = 4.
Q44. Comparer alors le nombre maximum de frappes de touches du digicode à effectuer en utilisant les mots de de Bruijn, avec celui calculé par la méthode brute. Calculer ces nombres pour :
  • k = 4 et n = 2.
  • k = 10 et n = 4.
Que conclure quant à l'efficacité de votre stratégie?

FIN

Questions fréquentes

4 questions
Sur quels chapitres porte l'épreuve d'informatique CCINP MP 2020 ?
Afficher ou masquer la section

Sur quels chapitres porte l'épreuve d'informatique CCINP MP 2020 ?

Le sujet porte sur la logique propositionnelle et la complétude des connecteurs, sur la programmation Python à travers le problème de Freudenthal, et sur les mots de Lyndon et de de Bruijn en OCaml, avec des graphes orientés et des circuits eulériens.

Quelle est la moyenne à l'épreuve d'informatique CCINP MP 2020 ?

La moyenne de l'épreuve est de 10,53/20, avec un écart-type de 3,64.

Quelles erreurs le jury a-t-il le plus relevées à cette épreuve d'informatique CCINP MP 2020 ?

Le jury relève des lectures trop rapides de l'énoncé, un non-respect des consignes (justifications manquantes, langage imposé non respecté), une induction structurelle absente et des confusions dans la définition du circuit eulérien.

Cette épreuve d'informatique CCINP MP 2020 est-elle difficile ?

Le rapport la juge relativement facile et progressive, avec une longueur adaptée, mais elle permet malgré tout de bien discriminer les candidats ayant un niveau faible en informatique.

Pas de description pour le moment