Corrigé Mines-Ponts 2025 Informatique option MP — Partie 3 (Q14 à Q21) : Arbres discriminants et criblage
Sujet officiel du concours Mines-Ponts, session 2025, épreuve Informatique option MP. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Un arbre discriminant est un arbre de décision binaire dont les nœuds internes portent des discriminants et les feuilles des états deux à deux distincts :
type disctree = Node of disctree * disc * disctree
| Leaf of state
L'arbre du sujet (cercles : nœuds internes ; rectangles : feuilles) :
Cribler à travers : partir de la racine ; en un nœud interne d'étiquette , descendre à gauche si , à droite sinon ; la feuille atteinte porte le criblat .
Exemple du sujet, pour : et . Un arbre est accessible si pour toute étiquette de feuille ; il est démêlant s'il a au moins un nœud interne et si sa racine porte .
Q14. Écrire states_of_disctree (t:disctree) : state list, liste des étiquettes des feuilles dans un ordre quelconque, en temps linéaire en le nombre de feuilles (à justifier).
Q15. Donner dans l'exemple.
Q16. Écrire sift (t:disctree) (u:word) : state, qui renvoie .
Q17. Complexité dans le pire des cas de sift t u, en fonction de , du nombre de nœuds, de la hauteur , de , du coût de Oracle.mem w et du coût de Oracle.equiv a.
Q18. Montrer, en exhibant un discriminant, que deux mots de criblats distincts sont séparables.
Q19. Montrer que deux mots inséparables ont le même criblat.
Q20. Montrer que le nombre de feuilles d'un arbre accessible est majoré par une constante ne dépendant que de .
Q21. Montrer que si ont le même criblat dans un arbre démêlant, alors .
Corrigé
Q14. On accumule les étiquettes dans un accumulateur, sans jamais concaténer de listes :
let states_of_disctree (t:disctree) : state list =
(* ajoute t acc : les étiquettes des feuilles de t, placées devant acc *)
let rec ajoute t acc =
match t with
| Leaf q -> q :: acc
| Node (g, _, d) -> ajoute g (ajoute d acc)
in
ajoute t []
Correction, par induction structurelle : pour une feuille, on ajoute son étiquette devant acc ; pour un nœud, on place d'abord les feuilles de d devant acc, puis celles de g devant le tout. Complexité : un arbre discriminant est un arbre binaire strict (chaque nœud interne a exactement deux fils), donc s'il a feuilles il a nœuds internes. En effet, par induction, une feuille a feuille et nœud interne, et si et ont et feuilles, Node (g, v, d) a feuilles et nœuds internes. La fonction ajoute est appelée une fois par nœud, soit appels, et chaque appel coûte hors appels récursifs (un filtrage, au plus un ::). Le coût total est , linéaire en le nombre de feuilles. Ce que le correcteur attend : pas de (states_of_disctree g) @ (states_of_disctree d), dont le coût est quadratique sur un peigne (le jury relève de nombreuses « preuves » de linéarité fausses). (Exécutée sur : [[A;A]; [A]; []; [B]], c'est-à-dire .)
Q15. Avec : à la racine , , on descend à droite ; en , , à droite ; en , , à droite. Le chemin est , donc
(Aucun mot commençant par n'est dans : tous ces mots ont pour criblat .)
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.