Mines Informatique 1 MPI 2024Sujet et rapport du jury
- Structures de graphes (listes d'adjacence, allocation dynamique en C)
- Parcours de graphes en largeur (BFS)
- Algorithmes sur les flots et chemins augmentants
- Démonstrations par récurrence et par l'absurde
- Complexité algorithmique
Téléchargements
- Corrigé : pas encore disponible
Présentation du sujet
DifficileExtraction d'un sous-graphe le plus dense d'un graphe non orientéAfficher ou masquer la section
Présentation du sujet
DifficileLa première épreuve d'informatique MPI des Mines 2024 (3 heures) est un problème unique de 33 questions consacré à l'extraction d'un sous-graphe le plus dense d'un graphe non orienté quelconque. Il combine démonstrations mathématiques et programmation en langage C, en trois sections : minimisation de bordure par chemins augmentants, réduction au problème de densité, puis algorithme d'approximation plus rapide.
- 1Section 1 : entourage de plus petite bordureRésolution d'un problème de minimisation de bordure dans un multigraphe orienté à l'aide d'une technique de chemins augmentants, avec des questions de programmation en C (Q1 à Q19 environ).
- 2Section 2 : algorithme de GoldbergÉtude d'une technique de réduction du problème de construction d'un sous-graphe le plus dense au problème de la première section, avec oracle et recherche dichotomique.
- 3Section 3 : algorithme de CharikarÉtude d'un algorithme d'approximation plus rapide, avec analyse d'un facteur d'approximation et implémentation optimale (questions les plus rarement traitées).
Difficile. Le jury qualifie le sujet d'assez long et note que les questions des sections 2 et 3 ont été rarement traitées, notamment par manque de temps pour les dernières questions.
L'épreuve en chiffres
Moyenne 11,02 / 20 · écart-type 4,35 · 839 présents · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 11,02/ 20
- Écart-type
- 4,35
- Présents
- 839
- Coefficient
- 3
- Durée
- 3 h
Votre note sur 20 à ce sujet, en conditions de concours.
Source : document officiel du concours, épreuve du 15 mai 2024. 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éesUtilisation de constructions hors langage C · Parcours en largeur mal implémenté · Transformation de chemin non compriseAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesLe sujet comporte 33 questions mêlant démonstrations et programmation en C. La plupart des candidats ont abordé de façon équilibrée les deux types de questions, mais le jury rappelle que les programmes attendus sont le plus souvent courts et que des codes longs et complexes contiennent presque toujours des erreurs. Une attention particulière a été portée à la validité stricte du code C, cette épreuve pratique n'admettant aucune indulgence pour du code non valide.
Les erreurs les plus sanctionnées
- 1Utilisation de constructions hors langage Cépreuve entière
Le jury n'a eu aucune indulgence pour du code non valide en C, comme l'usage de parenthèses à la place de crochets pour un tableau, de l'opérateur « <- » à la place de l'affectation, ou de constructions d'autres langages.
« aucune indulgence si le code n'était pas du code C valide »
- 2Parcours en largeur mal implémentéQ7
Certains candidats écrivent un parcours en profondeur (DFS) au lieu d'un parcours en largeur (BFS), ou des parcours avec boucles infinies ou fuites mémoire.
« l'écriture d'un parcours en DFS plutôt qu'en BFS »
- 3Transformation de chemin non compriseQ9
Il fallait saisir que la suppression d'un arc crée par définition un arc inverse, ce qui permet de transformer deux chemins ; c'est l'une des questions les plus mal traitées du sujet.
« l'une des questions les plus mal traitées du sujet »
- 4Allocation statique au lieu d'allocation dynamiqueQ17, Q18
Le graphe est souvent alloué statiquement en variable locale au lieu d'être alloué dynamiquement, et l'initialisation du tableau de voisins pose de nombreux problèmes.
« Question finalement peu traitée »
- 5Itération sur les indices au lieu du parcours de la liste chaînéeQ19
L'erreur la plus fréquente consiste à itérer sur les indices d'un tableau de voisins au lieu d'utiliser le champ suivant de la structure de liste chaînée.
« montrant ainsi une incompréhension totale de la structure de liste chaînée »
- 6Division entière au lieu de division flottanteQ21
La difficulté est de forcer une division en nombres flottants en C ; mettre le résultat dans une variable de type float après une division entière ne fonctionne pas.
« Mettre le résultat après la division dans une variable de type float ou double ne fonctionne pas »
Ce qui a été bien réussi
- La question 4 sur l'incrémentation est très bien traitée dans l'ensemble.
- La question 5 est très bien traitée.
- La question 6 est très majoritairement bien traitée.
- Les questions 13 à 15 sont globalement bien traitées.
Conseils du jury
- Privilégier la correction et la simplicité des codes plutôt que des programmes longs et complexes.
- Ne pas imbriquer des fonctions les unes dans les autres en C.
- Allouer dans le tas avec malloc une structure qu'une fonction doit retourner par référence, et non dans une variable locale.
- Numéroter les questions de façon claire ; la numérotation des sections n'est pas nécessaire.
- Utiliser des noms de variables intelligibles et structurer les codes longs avec des fonctions auxiliaires commentées.
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
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 2024
PREMIÈRE ÉPREUVE D'INFORMATIQUE
Durée de l'épreuve :
3 heures
Cette épreuve concerne uniquement las candidats de la filière MPI.
L'énoncé de cette épreuve comporte 9 pages de texte.
Abstract
Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.
Préliminaires
Présentation du sujet
Travail attendu
1 Entourage de plus petite bordure
1.1 Réseaux
-
W est un ensemble fini, appelé ensemble de sommets, -
F est un sous-ensemble de couples deW × W , appelé ensemble d'arcs, -
μ est une applicationF → ℕ^∗ , l'entier naturelμ(e) étant appelé la multiplicité de l'arce , -
s est un sommet particulier deW , appelé la source, -
t est un sommet particulier deW , appelé le puits.
/* Debut du fichier network.h */
#ifndef NETWORK_H
#define NETWORK_H
const unsigned int NMAX = 102;
struct network_s {
unsigned int n;
unsigned mu [NMAX] [NMAX];
};
typedef struct network_s network;
void nw_init(unsigned int n);
void nw_add(int u, int v);
void nw_remove(int u, int v);
void nw_disconnect(void);
void _arr_init(int *T);
bool _bfs_tree(void);
void _residue(void);
#endif
/* Fin du fichier network.h */
Le second fichier contient initialement les définitions suivantes et sera complété par les fonctions de la section 1 .
/* Debut du fichier network.c */
network H;
int A[NMAX];
/* Fin du fichier network.c */
2 - Expliquer comment faire interagir les fichiers network.h et network.c.
3 - Écrire une fonction C void nw_init(unsigned int n) ainsi spécifiée :
Précondition : L'entier naturel
Effet : La précondition est vérifiée par une assertion.
Postcondition : La variable globale
4 - Écrire une fonction C void nw_add (int u, int v) qui ajoute une occurence de l'arc (
5 - Écrire une fonction
6 - Écrire une fonction C void _arr_init(int *T) ainsi spécifiée:
Précondition : Le pointeur
Postcondition: Toutes les cases du tableau désigné par le pointeur
Nous utilisons le terme chemin pour signifier systématiquement un chemin simple dans le graphe orienté (
7 - Écrire une fonction C bool _bfs_tree(void) ainsi spécifiée :
Précondition : La variable globale
Effet : La fonction calcule une arborescence
Postcondition : On a
Valeur de retour : Booléen true si le puits
1.2 Déconnexion de la source et du puits
Précondition : La variable globale
Postcondition : La variable
Effet : Tant qu'il existe un chemin de source
Postcondition : Si la fonction se termine, il n'existe pas de chemin de la source vers le puits dans le réseau
1.3 Optimalité
2 Algorithme de Goldberg
2.1 Densité d'un graphe
struct link_s {
int node;
struct link_s *prev;
struct link_s *next;
};
typedef struct link_s link;
struct graph_s {
unsigned int n;
link **neighbours;
};
typedef struct graph_s graph;
18 - Écrire une fonction C void gr_add (graph
21 - Écrire une fonction C double density (graph *G) dont la valeur de retour est la densité
2.2 Oracle pour le problème de décision
Étant donnés un graphe non orienté
(a) L'ensemble
- pour tout sommet
v ∈ V , un arc(s, v) , de multiplicitémn^2 . - pour toute arête
{u, v} ∈ E , unarc(u, v) et unarc(v, u) , de multiplicitén^2 . - pour tout sommet
u ∈ V , un arc(u, t) , de multiplicitémn^2 − n^2 deg_G(u) + 2r .
2.3 Recherche dichotomique
29 - Écrire une fonction C efficace void binary_search (graph *G) qui, pour tout graphe
30 - Nous supposons avoir écrit l'ensemble des fonctions de la section 2 dans un fichier densest_subgraph.c. Expliquer comment faire interagir le fichier densest_subgraph.c avec les fichiers network.h et network.c de la section 1.
3 Algorithme de Charikar
Algorithme 1 : Recherche gloutonne d'une densité élevée
Entrées : Graphe $G=(V, E)$.
Sorties : Sous-graphe induit à grande densité
$\Gamma \leftarrow G$; /* Plus dense graphe rencontré */
$G_{n} \leftarrow G$ où $n=|V|$
pour $i$ de $n$ à 2 (cas inclus) faire
si $\delta\left(G_{i}\right)>\delta(\Gamma)$ alors
$\Gamma \leftarrow G_{i}$
Identifier le sommet $v_{i}$ qui minimise le degré $\operatorname{deg}_{G_{i}}$.
Former le graphe $G_{i-1}$ en supprimant de $G_{i}$ le sommet $v_{i}$ et les
arêtes incidentes à $v_{i}$.
retourner $\Gamma$
3.1 Analyse d'un facteur d'approximation
3.2 Implémentation optimale
Une réponse décrite en pseudo-code ou en langage naturel est admise mais doit être suffisamment précise pour s'assurer que la complexité est belle et bien linéaire.
Fin de l'épreuve
- Les sujets sont la propriété du GIP CCMP. Ils sont publiés sous les termes de la licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 3.0 France.Tout autre usage est soumis à une autorisation préalable du Concours commun Mines Ponts.
Questions fréquentes
4 questionsSur quoi porte le sujet d'informatique 1 MPI des Mines 2024 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quoi porte le sujet d'informatique 1 MPI des Mines 2024 ?
Sur l'extraction d'un sous-graphe le plus dense d'un graphe non orienté, avec un algorithme de chemins augmentants, l'algorithme de Goldberg puis celui de Charikar.
Le sujet d'informatique 1 MPI Mines 2024 est-il long ?
Oui, le jury le qualifie d'assez long avec 33 questions ; les questions des dernières sections ont été rarement traitées, souvent par manque de temps.
Quelles erreurs le jury a-t-il le plus relevées en informatique 1 MPI Mines 2024 ?
L'usage de constructions non valides en C, un parcours en profondeur écrit à la place d'un parcours en largeur, une allocation statique au lieu de dynamique, et une itération sur les indices au lieu du parcours de la liste chaînée.
Ce sujet d'informatique MPI Mines 2024 demande-t-il de coder en C ?
Oui, les réponses de programmation doivent être écrites en langage C, avec une tolérance uniquement pour un point-virgule ou une accolade manquante, mais aucune indulgence pour du code non valide.
Pas de description pour le moment
