Polytechnique Option Informatique MP 2001Sujet et corrigé
- Structures de données arborescentes récursives
- Programmation récursive en Caml et Pascal
- Analyse de complexité (pire cas et moyenne)
- Combinatoire des arbres et des triangulations de polygones
- Génération et énumération d'ensembles finis
- Théorème des quatre couleurs
Téléchargements
- Rapport du jury : non disponible
Présentation du sujet
Arbres binaires, flots compatibles, triangulations de polygones et vérification expérimentale du théorème des quatre couleursAfficher ou masquer la section
Présentation du sujet
Le problème étudie des arbres binaires complets munis de flots d'entiers modulo 4, et leur lien avec la triangulation de polygones convexes et le théorème des quatre couleurs. La première partie définit la compatibilité d'un flot avec un arbre, programme une fonction de vérification et en étudie la complexité moyenne. La deuxième établit une bijection entre triangulations d'un polygone et arbres binaires.
- 1Partie I : vérification de la compatibilité des flotsProgrammer des fonctions comptant les feuilles d'un arbre et vérifiant la compatibilité d'un flot avec un arbre, dénombrer les flots compatibles et étudier la complexité moyenne de l'algorithme de vérification.
- 2Partie II : triangulation des polygonesDénombrer les cordes d'une triangulation d'un polygone convexe, programmer une fonction de vérification de triangulation, puis établir et programmer une correspondance entre triangulations d'un polygone et arbres binaires.
- 3Partie III : les quatre couleursConstruire des générations (bijections d'énumération) d'ensembles finis d'arbres et de flots, puis programmer une recherche d'un flot compatible avec deux arbres donnés pour vérifier expérimentalement le théorème des quatre couleurs.
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
- Une feuille est un arbre.
- Si
g etd sont deux arbres, le couple(g, d) est un arbre.

(* Caml *)
type arbre =
| Feuille
| Interne of arbre * arbre
{Pascal }
type
arbre = `cellule_arbre ;
cellule_arbre = record
gauche, droite : arbre
end ;
function noeud (gauche:arbre ; droite:arbre) : arbre ;
var r:arbre ;
begin
new(r) ;
r^.gauche := gauche ; r^.droite := droite ;
noeud := r
end ;
(* Caml *)
type flot = int vect
{Pascal }
const NMAX=... ;
type flot = array [1..NMAX] of integer ;
Partie I. Vérification de la compatibilité des flots.
(* Caml *)
compte_feuilles : arbre -> int function compte_feuilles (a:arbre) : integer
(* Caml *)
compatible :
arbre -> flot -> bool
{ Pascal }
function
compatible(a:arbre ; f:flot) : boolean
a) Montrer que
b) On suppose que
c) Soit
a) Calculer
b) Montrer qu'il existe un arbre
c) On admet que
Partie II. Triangulation des polygones.

.jpg)
(* Caml *)
{Pascal}
type
segment = record
debut,fin : integer
type segment == int * int
end ;
and segments == segment list
segments = ^cellule_segments ;
cellule_segments = record
tete : segment ;
suite : segments
end ;
En Pascal, on pourra utiliser le constructeur des cellules de liste cons :
function cons(tete:segment ; suite:segments) : segments ;
Ainsi, la triangulation donnée en exemple peut être codée par
complexité
(* Caml *) {Pascal }
triangulation :
int -> segments -> bool | triangulation(n:integer ; c:segments) : boolean

a) Utiliser cette représentation de l'exemple de triangulation pour lui associer un arbre à 7 feuilles et dont les nœuds internes et les feuilles correspondent aux segments de la triangulation.
b) Généraliser le procédé en décrivant comment on peut associer un arbre
c) Écrire une fonction triangle_arbre, qui prend en arguments un entier
(* Caml *) {Pascal }
triangle_arbre : function
int -> segments -> arbre | triangle_arbre(n:integer ; t:segments):arbre
(* Caml *) {Pascal }
arbre_triangle :
arbre -> segments | arbre_triangle (a:arbre) : segments
Partie III. Les quatre couleurs.
a) Donner une génération du produit cartésien
b) On suppose que
c) On suppose que
a) Exprimer
(* Caml *) {Pascal}
calcule_na : int -> unit | procedure calcule_na(n:integer)
(* Caml *) {Pascal}
int_arbre : int -> int -> arbre | function int_arbre (n,k:integer) : arbre
int_flot : int -> arbre -> int -> int -> flot
procedure int_flot (n:integer ; a:arbre ; v,k:integer ; var f:flot)
Question 12.
(* Caml *) {Pascal }
trouve_compatible :
int -> arbre -> arbre -> flot
procedure
trouve_compatible
(n:integer ; a,b:arbre ; var f:flot)
(* Caml *)
quatre_couleurs : int -> flot
{ Pascal }
procedure
quatre_couleurs (n:integer ; var f:flot)
Questions fréquentes
4 questionsSur quels chapitres porte ce sujet d'informatique option info X MP 2001 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte ce sujet d'informatique option info X MP 2001 ?
Il porte sur les structures arborescentes récursives, la programmation en Caml ou Pascal, l'analyse de complexité et la combinatoire des triangulations de polygones, en lien avec le théorème des quatre couleurs.
Les parties de ce sujet sont-elles indépendantes ?
Les parties s'enchaînent : la partie II utilise les arbres de la partie I pour représenter des triangulations, et la partie III combine les deux pour vérifier expérimentalement le théorème des quatre couleurs.
Ce sujet demande-t-il de programmer en Caml ou en Pascal ?
Oui, la plupart des questions demandent d'écrire des fonctions ou procédures dans l'un de ces deux langages, au choix du candidat.
Quel est le lien entre ce sujet et le théorème des quatre couleurs ?
La partie III admet que la coloration d'une carte se ramène à la recherche d'un flot compatible avec deux arbres binaires donnés, et propose de vérifier expérimentalement l'existence d'un tel flot par tirage aléatoire.
Pas de description pour le moment
