Mines Informatique 1 MPI 2023Sujet, corrigé et rapport du jury
- Structures de données et complexité
- Représentation binaire des entiers
- Arbres binaires (hauteur, parcours préfixe)
- Allocation dynamique et pointeurs en C
- Récursivité
- Programmation concurrente (verrous, sémaphores)
Téléchargements
Présentation du sujet
Difficulté moyenneConstruire une liste à accès direct : représentation binaire gauche, arbres binaires parfaits et listes gauchesAfficher ou masquer la section
Présentation du sujet
Difficulté moyenneLe sujet construit progressivement une structure de données appelée liste à accès direct, en trois sections indépendantes qui s'enchaînent : un système de numération appelé représentation binaire gauche, les arbres binaires parfaits, puis la structure concrète de liste gauche qui réutilise les deux premières sections. La dernière question aborde l'utilisation concurrente de cette structure avec des fils d'exécution.
- 1Section 1 : représentation binaire gauche des entiers naturelsÉtude d'un système de numération alternatif au binaire standard, avec démonstrations et une fonction C de conversion et d'incrémentation.
- 2Section 2 : arbres binaires parfaitsManipulation d'arbres binaires en C (hauteur, construction, test de perfection) puis vérification qu'ils permettent un accès direct en temps logarithmique.
- 3Section 3 : listes gauchesConstruction de la structure de liste gauche à partir des deux sections précédentes, avec ajout, suppression en tête et une question finale sur l'accès concurrent par plusieurs fils d'exécution.
Difficulté moyenne. Le rapport précise que le sujet est assez long et nécessite d'aller à l'essentiel sur certaines questions pour ne pas perdre de temps, tout en notant que les candidats abordent de façon équilibrée les questions de programmation et de démonstration.
Ce qu'a observé le jury
6 erreurs relevéesAffirmer au lieu de démontrer · Puissances de 2 mal codées en C · Confusion entre hauteur et taille de l'arbreAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesLe jury constate que les candidats les plus à l'aise répondent avec précision et produisent des solutions simples, alors que beaucoup d'autres écrivent des codes trop longs et compliqués ou ne prouvent pas ce qui est réellement demandé. Plusieurs questions ont souffert d'une lecture trop rapide de l'énoncé, notamment sur la définition de l'accès direct et sur la hauteur des arbres.
Les erreurs les plus sanctionnées
- 1Affirmer au lieu de démontrerQ3
Des copies contiennent beaucoup de texte sans rien prouver, ou invoquent une unicité de l'écriture binaire qui ne s'applique pas à la représentation gauche.
« Certaines copies essayent d'utiliser l'unicité de l'écriture en binaire, qui n'est pas applicable ici. »
- 2Puissances de 2 mal codées en CQ6
L'opérateur 2**i n'existe pas en C et 2^i correspond à un ou exclusif ; il fallait recoder une fonction puissance, ou utiliser un décalage booléen.
« 2**i n'existe pas en C. »
- 3Confusion entre hauteur et taille de l'arbreQ11
De nombreuses copies confondent la hauteur d'un arbre avec sa taille et oublient que l'arbre vide a une hauteur de -1.
« La hauteur de l'arbre n'est pas la taille. »
- 4Erreur de type dans l'allocation mémoireQ12
Le type à allouer est la structure du nœud et non le type pointeur, ce qui traduit une confusion entre type pointeur et type structure.
- 5Lecture insuffisante de l'énoncéQ14
Certaines copies supposent à tort que l'arbre pris en entrée est de hauteur n sans le vérifier, ou confondent l'implication démontrée à la question 13 avec une équivalence.
« Il faut bien lire le sujet ! »
- 6Complexité de l'accès direct mal compriseQ19
Le sujet définit l'accès direct comme un accès en temps logarithmique et non constant ; plusieurs candidats recodent aussi inutilement des fonctions déjà écrites.
« Il suffit de réutiliser les fonctions précédentes. »
Ce qui a été bien réussi
- La plupart des copies proposent du code lisible et indenté, avec des noms de variables et de fonctions compréhensibles.
- Les candidats ont abordé de façon équilibrée les questions de programmation en C et les questions de démonstration.
- Les démonstrations demandées étaient souvent bien présentées lorsqu'elles étaient faites.
Conseils du jury
- Privilégier des codes courts et simples plutôt que des programmes longs et truffés de tests, souvent source d'erreurs.
- Ne pas inclure les bibliothèques standards comme stdio.h, stdlib.h, assert.h ou stdbool.h, qui sont inutiles ici.
- Traiter le cas de base des fonctions récursives sur les arbres comme l'arbre vide, et non comme la feuille.
- Numéroter les questions et mettre en valeur le code ou les résultats principaux pour faciliter la correction.
- Barrer entièrement une réponse à reprendre plutôt que d'insérer des corrections à l'intérieur.
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
ÉCOLE DES PONTS PARISTECH, ISAE-SUPAERO, ENSTA PARIS, TÉLÉCOM PARIS, MINES PARIS, MINES SAINT-ÉTIENNE, MINES NANCY, IMT ATLANTIQUE, ENSAE PARIS, CHIMIE PARISTECH - PSL.
Concours Mines-Télécom
CONCOURS 2023
PREMIÈRE ÉPREUVE D'INFORMATIQUE
Durée de l'épreuve :
3 heures
INFORMATIQUE I - MPI
L'énoncé de cette épreuve comporte 9 pages de texte.
Cette épreuve concerne uniquement les candidats de la filière MPI.
Préliminaires
Présentation du sujet
Travail attendu
1. Représentation binaire gauche des entiers naturels
1.1. Mise en place
(i) pour tout indice
(ii) l'égalité suivante est satisfaite
(iv) s'il existe une position
De manière plus courte, nous parlons simplement de représentation gauche.
La figure 1 ci-dessous donne une représentation standard et une représentation gauche sur quatre chiffres des seize premiers entiers. Conformément à l'usage habituel, nous écrivons toute représentation, qu'elle soit standard ou gauche, sous la forme d'un mot
| Entier | Repr. standard | Repr. gauche |
| 0 | 0000 | 0000 |
| 1 | 0001 | 0001 |
| 2 | 0010 | 0002 |
| 3 | 0011 | 0010 |
| 4 | 0100 | 0011 |
| 5 | 0101 | 0012 |
| 6 | 0110 | 0020 |
| 7 | 0111 | 0100 |
| Entier | Repr. standard | Repr. gauche |
| 8 | 1000 | 0101 |
| 9 | 1001 | 0102 |
| 10 | 1010 | 0110 |
| 11 | 1011 | 0111 |
| 12 | 1100 | 0112 |
| 13 | 1101 | 0120 |
| 14 | 1110 | 0200 |
| 15 | 1111 | 1000 |
const int N = 8;
struct RepGauche {
int position;
bool chiffres[N];
};
typedef struct RepGauche rg;
rg entier_15 = { .position = -1,
.chiffres = { 0, 0, 0, 1, 0, 0, 0, 0 } };
rg entier_21 = { .position = 1,
.chiffres = { 0, 1, 0, 1, 0, 0, 0, 0 } };
6 - Écrire une fonction C int rg_to_int (rg g), qui renvoie l'entier dont
1.2. Incrémentation et décrémentation
Algorithme mystère :
Effet :
- Si aucun des chiffres
(g_n)_(0 ⩽ n < N) ne vaut 2 , changer le chiffreg_0 eng_0 + 1 . - Sinon, en notant
p la position du chiffre 2 , changer le chiffreg_p en 0 et le chiffreg_(p + 1) eng_(p + 1) + 1 .
Nous notonsm^′ l'entier dont la représentation gauche estg après exécution de l'algorithme.
7 - Vérifier que l'invariant de la question 5 n'est pas rompu par l'algorithme mystère (cf. figure 2). Avec les notations
Précondition : La variable
Effet : La valeur pointée par
Valeur de retour : Booléen true si l'incrémentation de
Précondition : Le pointeur
Effet : La valeur pointée par
Valeur de retour : Booléen true si la décrémentation de
Il est recommandé d'expliquer son intention avant de donner son code.
2. Arbres binaires parfaits
2.1. Opérations sur les arbres binaires
typedef struct Noeud *arb;
struct Noeud {
int valeur;
arb fils_g;
arb fils_d;
};

.jpg)
2.2. Arbres parfaits
13 - Démontrer que tout arbre binaire parfait de hauteur
14 - Écrire une fonction C bool est_parfait(arb a, int n) dont la spécification suit : Précondition : Le pointeur
Valeur de retour : Booléen true si l'arbre pointé est parfait de hauteur
15 - Calculer la complexité en temps dans le pire des cas de l'exécution de est_parfait(a, n) en fonction de l'entier
2.3. Opérations sur les arbres parfaits
Précondition : Le pointeur a désigne la racine d'un arbre binaire parfait de hauteur
L'entier
Valeur de retour : Pointeur vers le
Il est rappelé que la racine d'un arbre est à profondeur 0 . Nous donnons la formule de sommation, valable pour tout réel
3. Listes gauches
struct ListeGauche {
int hauteur_e;
arb extra;
int nb_arbres;
arb *arbres;
};
typedef struct ListeGauche lg;
3.1. Opérations simples sur les listes gauches
21 - Écrire une fonction C int
22 - Écrire une fonction C arb
23 - Calculer la complexité en temps dans le pire des cas de lg_trouve 1 en fonction de la capacité maximale
24 - Écrire une fonction C int
3.2. Ajout et suppression en tête de liste gauche
26 - Déterminer la complexité en temps dans le pire des cas de la fonction lg_empile.
27 - Donner le principe d'une fonction C bool lg_depile(int *w, lg l) réalisant le retrait de l'élément de tête de la liste gauche
28 - Donner la complexité en temps dans le pire des cas de la fonction lg_depile.
29 - Discuter la possibilité d'obtenir une complexité plus faible à la question 28, quitte à modifier légèrement la définition du type lg .
3.3. Utilisation concurrente des listes gauches

A. Rappels de programmation en C
L'instruction pthread_create(pthread_t *th_id, NULL, &ma_fonction, void *args) crée un nouveau fil d'exécution qui appelle la fonction ma_fonction sur le ou les arguments désignés par args et qui s'exécute simultanément avec le fil d'exécution appelant.
L'instruction pthread_mutex_lock(&v) verrouille le verrou v.
L'instruction pthread_mutex_unlock(&v) déverrouille le verrou v.
Le type sem_t désigne des sémaphores.
L'instruction sem_init(&s, 0, v) initialise le sémaphore s à la valeur
L'instruction sem_wait(&s) décrémente le compteur du sémaphore s : si le compteur est toujours positif, l'appel se termine; sinon le fil d'exécution appelant est bloqué.
Questions fréquentes
4 questionsSur quels chapitres porte le sujet informatique 1 MPI Mines-Télécom 2023 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte le sujet informatique 1 MPI Mines-Télécom 2023 ?
Le sujet porte sur la représentation binaire gauche des entiers, les arbres binaires parfaits, puis la construction d'une structure de liste à accès direct appelée liste gauche, avec une dernière question sur l'accès concurrent par plusieurs fils d'exécution.
Quelles questions ont posé le plus de difficultés aux candidats sur ce sujet ?
Le rapport pointe notamment les démonstrations des questions 3 et 4, le calcul des puissances de 2 en C à la question 6, la confusion entre hauteur et taille d'un arbre à la question 11, et la définition de la complexité de l'accès direct à la question 19.
Faut-il bien coder en C pour réussir ce sujet ?
Oui, la plupart des questions demandent d'écrire des fonctions en langage C en respectant le prototype fourni, même si certaines réponses en pseudo-code sont acceptées.
Ce sujet est-il long à traiter en trois heures ?
Le rapport indique que le sujet est assez long et qu'il faut aller à l'essentiel sur certaines questions pour ne pas perdre trop de temps.
Pas de description pour le moment
