Corrigé X-ENS 2025 Informatique A MP — Partie III (Q12 à Q16) : Algorithme glouton fondé sur l'entropie, et sa non-optimalité
Sujet officiel du concours X-ENS, session 2025, épreuve Informatique A MP. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Pour éviter d'énumérer tous les arbres, on choisit localement, dans l'état courant, le caractère qui minimise l'entropie moyenne. L'entropie d'une distribution est
et l'entropie moyenne d'un caractère dans l'état est . La fonction log : float -> float est le logarithme népérien.
Q12. Pour , valeurs minimale et maximale de sur , et distributions qui les atteignent.
Q13. Écrire score_caractere : etat -> caractere -> float, qui renvoie .
Q14. Écrire glouton : etat -> arbre, qui construit un arbre de décision en plaçant à la racine le caractère d'entropie moyenne minimale, puis récursivement de même dans les sous-arbres.
On prend ensuite deux caractères, , trois espèces
et l'état initial : , , .
Q15. Dessiner les arbres de décision pour et ; quel est l'arbre optimal ?
Q16. Calculer et et conclure, en admettant que .
Corrigé
Q12. Il faut ( est vide). Notons le support de , non vide.
Minimum : , atteint exactement par les diracs. Pour , , avec égalité si et seulement si . Donc , et si et seulement si pour tout ; la masse valant , c'est que est un singleton, c'est-à-dire que . Réciproquement .
Maximum : , atteint exactement par la distribution uniforme. On utilise pour , avec égalité si et seulement si (concavité de ) :
où l'on a utilisé . Il y a égalité si et seulement si pour tout et , c'est-à-dire si est la distribution uniforme , pour laquelle . (C'est l'inégalité de Jensen pour la fonction concave , appliquée aux valeurs .) Pour , minimum et maximum valent . Interprétation : l'entropie mesure l'incertitude, nulle quand l'espèce est connue, maximale quand toutes les espèces sont également probables.
Q13. Les poids d'une mesure étant non nuls, l'entropie se calcule directement sur la liste. Dans , un terme avec est nul (et n'y est pas défini) : on ne somme que sur les valeurs de probabilité non nulle, sans quoi reponse lèverait son exception.
let entropie (mu : 'x mesure) : float =
List.fold_left (fun acc (_, p) -> acc -. p *. log p) 0. mu
let score_caractere (sigma : etat) (i : caractere) : float =
List.fold_left
(fun acc v ->
let p = proba_etat sigma i v in
if p = 0. then acc else acc +. p *. entropie (reponse sigma i v))
0. (List.init num.(i) (fun v -> v))
Ce que le correcteur attend : l'exclusion explicite des valeurs de probabilité nulle. Coût : pour chacune des valeurs, proba_etat et reponse coûtent (Q6, Q7) et entropie : en tout. Exécuté : sur l'exemple de la partie I, et ; sur l'exemple ci-dessous, les valeurs de Q16.
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é.