Polytechnique Option Informatique MP 2010Sujet, corrigé et rapport du jury
- Arbres et structures récursives
- Programmation dynamique
- Complexité algorithmique
- Représentation binaire des entiers
Téléchargements
Présentation du sujet
DifficilePlus proche ancêtre commun (PPAC) dans un arbre : algorithmes et complexitéAfficher ou masquer la section
Présentation du sujet
DifficileLe problème étudie plusieurs méthodes pour calculer le plus proche ancêtre commun de deux nœuds dans un arbre, avec un pré-traitement autorisé sur l'arbre. Les parties progressent d'une solution simple vers des méthodes plus efficaces, en passant par le lien avec la recherche du minimum dans un segment de tableau et par le cas particulier des arbres binaires complets.
- 1Partie IMéthode simple de calcul du PPAC, avec pré-traitement et réponse tous deux en O(n).
- 2Partie IIRéduction du PPAC à la recherche du plus petit élément d'un segment de tableau, résolue par programmation dynamique en pré-traitement O(n log n) et réponse O(log n).
- 3Partie IIIDeux questions sur la représentation binaire des entiers, en préparation de la partie IV.
- 4Partie IVCas particulier du PPAC dans un arbre binaire complet, avec pré-traitement en O(n) et réponse en O(1).
- 5Partie VRéduction du problème du minimum de segment au PPAC, montrant l'équivalence des deux problèmes.
Difficile. Plusieurs questions ont des moyennes très basses avec de forts pourcentages de zéro, par exemple la question 18 notée 0,5/20 avec 96% de zéro.
L'épreuve en chiffres
Moyenne 9,37 / 20 · écart-type 4,24 · 762 copies · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 9,37/ 20
- Écart-type
- 4,24
- Copies
- 762
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éesHypothèse abusive sur la numérotation des nœuds · Absence de test sur l'exemple fourni · Question 9 très mal réussieAfficher ou masquer la section
Ce qu'a observé le jury
5 erreurs relevéesLe rapport détaille question par question les moyennes et les pourcentages de zéro. Beaucoup de questions ont été mal traitées, en particulier en fin de sujet, et le jury note que la plupart des fonctions demandées pouvaient s'écrire en moins de dix lignes.
Les erreurs les plus sanctionnées
- 1Hypothèse abusive sur la numérotation des nœudsQ1, Q3
Certains candidats ont supposé que la numérotation des nœuds croît dans la liste des fils, ce qui n'était pas impliqué par l'hypothèse de l'énoncé.
« Cer tains candidats ont abusivement supposé que la numérotation des n oeuds allait en croissant »
- 2Absence de test sur l'exemple fourniQ2
Beaucoup de candidats n'ont pas testé leur solution sur l'exemple donné au début du sujet, ce qui a laissé passer des erreurs d'inattention.
- 3Question 9 très mal réussieQ9
La plupart des candidats ont oublié le cas d'égalité i = j ou ont tenté de n'utiliser qu'un seul élément de la matrice M alors qu'il en fallait deux.
- 4Représentation binaire mal maîtriséeQ11, Q12
Le jury note que les candidats ne semblent pas à l'aise avec la représentation binaire des entiers et les opérations de décalage associées, ce qui pèse sur la partie III.
« Les candidats ne semblent pas très à l'aise avec la représent ation binaire des entiers et les opérations de décalage associées »
- 5Complexité amortie quasiment jamais traitéeQ18
La dernière question portait sur une complexité amortie et a obtenu une moyenne de 0,5 sur 20 avec 96% de copies à zéro.
Ce qui a été bien réussi
- La question 4 a été correctement traitée par une très grande majorité de candidats.
- La majorité des candidats a bien visualisé ce qu'est un parcours eulérien à la question 6.
- Presque tous les candidats ont identifié le pire cas et sa complexité quadratique à la question 16.
Conseils du jury
- Traiter le problème en entier est nécessaire pour obtenir la note maximale.
- Une réponse longue doit être expliquée en détail, car un programme très long contient souvent un grand nombre d'erreurs.
- Tester sa solution sur l'exemple fourni par l'énoncé avant de la considérer comme acquise.
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
COMPOSITION D'INFORMATIQUE
Le langage de programmation choisi par le candidat doit être spécifié en tête de la copie.
Plus proche ancêtre commun

le plus proche ancêtre commun des nœuds 5 et 8 est le nœud 4 , et celui des nœuds 3 et 7 est la racine 0 . De manière générale, on se donne un arbre quelconque, sur lequel on s'autorise un prétraitement, puis on souhaite calculer le plus efficacement possible le plus proche ancêtre commun pour des couples de nœuds dans cet arbre.
- si
i est un ancêtre dej , alorsPPAC(i, j) = i ; - symétriquement, si
j est un ancêtre dei , alorsPPAC(i, j) = j; - sinon,
PPAC(i, j) est l'unique nœuda possédant au moins deux fils distinctsf_1 etf_2 tels quei appartient au sous-arbref_1 etj au sous-arbref_2 .
(* Caml *)
type arbre =
| Noeud of
int * arbre list;;
{ Pascal }
type arbre = `noeud;
liste_arbre = `element;
noeud = record n :integer; l :liste_arbre; end;
element = record a :arbre; r :liste_arbre; end;
I. Une solution simple
(* Caml *) remplir_taille : unit -> unit
{ Pascal } procedure remplir_taille;
(* Caml *) appartient : int -> int -> bool
{ Pascal } function appartient(i : integer ; j : integer) : boolean;
(* Caml *) ppac1 : int -> int -> int
{ Pascal } function ppac1 (i : integer ; j : integer) : integer;
II. Une solution plus efficace
- ajouter le nœud
i à la fin de la séquence résultat; - pour chaque fils
j dei ,
(a) effectuer un tour Eulérien à partir dej ,
(b) ajouter le nœudi à la fin de la séquence résultat.
(* Caml *) remplir_euler : unit -> unit
{ Pascal } procedure remplir_euler;
Par la suite, on suppose avoir appelé cette procédure.
(* Caml *)
{ Pascal } function
(* Caml *) remplir_M : unit -> unit
{ Pascal } procedure remplir_M;
(* Caml *) minimum : int -> int -> int
{ Pascal } function minimum(i : integer ; j : integer) : integer;
(* Caml *) ppac2 : int -> int -> int
{ Pascal } function ppac2(i : integer ; j : integer) : integer;
III. Opérations sur les bits des entiers primitifs
ET
| 0 | 1 | |
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | |
| 0 | 0 | 1 |
| 1 | 1 | 1 |
| 0 | 1 | |
| 0 | 0 | 1 |
| 1 | 1 | 0 |
(* Caml *) bit_fort : int -> int
{ Pascal } function bit_fort(n : integer) : integer;
IV. Cas particulier d'un arbre binaire complet


(* Caml *) remplir_B : unit -> unit
{ Pascal } procedure remplir_B;
(* Caml *) ppac3 : int -> int -> int
{ Pascal } function ppac3(i : integer ; j : integer) : integer;
V. Application
- si
i = j , l'arbre est réduit à la feuilleT[i] ; - sinon, sa racine est le plus petit élément de
T[i..j] ; soitT[m] cet élément, aveci ≤ m ≤ j (s'il y a plusieurs valeurs possibles dem , on choisit arbitrairement). On distingue alors trois cas :
(a) sim = i , on construit un unique sous-arbre à partir deT[m + 1..j] ,
(b) sim = j , on construit un unique sous-arbre à partir deT[i..m − 1] ,
(c) sinon, on construit deux sous-arbres, respectivement à partir deT[i..m − 1] et deT[m + 1..j] .
L'arbre A est alors défini en partant du segment completT[0..n − 1] . On note que les nœuds de A ont directement pour valeurs les éléments de T, i.e. on ne se soucie pas ici de numéroter les nœuds de A de 0 àn − 1 afin de vérifier la propriété ( P ).

avec une «branche droite» formée de
.jpg)
dont la nouvelle branche droite est donc
(* Caml *) construire_A : int array -> arbre
{ Pascal } function construire_A(t : array[0..n-1] of integer) : arbre;
Note : En 1984, Harel et Tarjan ont montré qu'il existe un pré-traitement de complexité linéaire sur un arbre qui permet d'obtenir ensuite le plus proche ancêtre commun en temps constant. On a donc le même résultat pour le problème du minimum du segment.
Questions fréquentes
4 questionsSur quels chapitres porte l'épreuve d'informatique MP option info de l'X 2010 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte l'épreuve d'informatique MP option info de l'X 2010 ?
Le sujet porte sur les arbres, le calcul du plus proche ancêtre commun, la programmation dynamique et la représentation binaire des entiers.
Quelles erreurs le jury a-t-il le plus relevées ?
Une hypothèse abusive sur la numérotation des nœuds, l'absence de test sur l'exemple fourni, et une faiblesse générale sur la représentation binaire et les décalages.
Quelle est la moyenne à cette épreuve d'informatique de l'X en 2010 ?
La moyenne est de 9,37 sur 20 avec un écart-type de 4,24, pour 762 copies.
Ce sujet d'informatique X MP 2010 est-il difficile ?
Plusieurs questions ont des moyennes très basses et des taux de zéro élevés, notamment la dernière question sur la complexité amortie, ce qui indique un sujet exigeant.
Pas de description pour le moment
