X Informatique MP/PC 2011

Thème de l'épreuve Sur les permutations
Principaux outils utilisés boucle for, boucle while, récursivité
Mots clefs permutations, pgcd, ppcm

Corrigé

 :
👈 gratuite pour tous les corrigés si tu crées un compte
👈 l'accès aux indications de tous les corrigés ne coûte que 1 € ⬅ clique ici
👈 gratuite pour tous les corrigés si tu crées un compte
- - - - - - -
👈 gratuite pour ce corrigé si tu crées un compte
- - - - - -

Énoncé complet

(télécharger le PDF)
        

Rapport du jury

(télécharger le PDF)
                                               

Énoncé obtenu par reconnaissance optique des caractères


ECOLE POLYTECHNIQUE ­ ECOLE NORMALE SUPERIEURE DE CACHAN
ECOLE SUPERIEURE DE PHYSIQUE ET DE CHIMIE INDUSTRIELLES

CONCOURS D'ADMISSION 2011

FILIERE

MP HORS SPECIALITE INFO
FILIERE PC

COMPOSITION D'INFORMATIQUE ­ B ­ (XEC)
(Duree : 2 heures)
L'utilisation des calculatrices n'est pas autorisee pour cette epreuve.
Le langage de programmation choisi par le candidat doit etre specifie en tete 
de la copie.

Sur les permutations

La notion mathematique de permutation formalise la notion intuitive de 
rearrangement d'objets discernables. La permutation est une des notions 
fondamentales de la combinatoire, l'etude
des denombrements et des probabilites discretes. Elle sert par exemple a 
etudier sudoku, Rubik's
cube, etc. Plus generalement, on retrouve la notion de permutation au coeur de 
certaines theories
des mathematiques, comme celle des groupes, des determinants, de la symetrie, 
etc.
Une permutation est une bijection d'un ensemble E dans lui-meme. On ordonne un 
ensemble
E fini de taille n en numerotant ses elements a partir de 1 : x1 , x2 , . . . 
xn . En pratique, puisque
seuls les rearrangements des elements de E nous interessent, on considere 
l'ensemble En des
indices qui sont les entiers de 1 a n, bornes comprises. On represente alors 
simplement une
application f sur En par un tableau t de taille n dont les elements sont des 
indices. Autrement
dit, f (k) est t[k], ou t[k] designe le contenu de la case d'indice k du 
tableau t, et t[k] est lui
meme un indice. On notera que f est une permutation, si et seulement si les 
contenus des cases
de t sont exactement les entiers de En .
Dans tout le probleme, les tableaux sont indices a partir de 1. L'acces a la 
ieme case d'un
tableau t de taille n est note t[i] dans l'enonce, pour i entier compris entre 
1 et n au sens
large. Quel que soit le langage utilise, on suppose que les tableaux peuvent 
etre passes comme
arguments des fonctions et renvoyes comme resultat. En outre, il existe une 
primitive allouer(n)
pour creer un tableau de taille n (le contenu des cases du nouveau tableau ont 
des valeurs
inconnues), et une primitive taille(t) qui renvoie la taille du tableau t. 
Enfin, les booleens vrai
et faux sont utilises dans certaines questions de ce probleme. Bien evidemment, 
le candidat reste
libre d'utiliser les notations propres au langage dans lequel il compose.

1

Partie I. Ordre d'une permutation

Question 1 Ecrire une fonction estPermutation(t) qui prend une application 
(representee par
un tableau d'entiers t) en argument et verifie que t represente bien une 
permutation. Autrement
dit, la fonction renvoie vrai si t represente une permutation et faux sinon.
On suppose desormais, sans avoir a le verifier, que les tableaux d'entiers (de 
taille n) donnes
en arguments aux fonctions a ecrire representent bien des permutations (sur En 
). Dans cet
esprit, on confond par la suite les permutations et les tableaux d'entiers qui 
les representent en
machine. Plus generalement, si l'enonce contraint les arguments des fonctions a 
ecrire, le code
de ces fonction sera ecrit en supposant que ces contraintes sont satisfaites.
Question 2 Ecrire une fonction composer(t,u) qui prend deux permutations sur En 
en arguments et renvoie la composee t  u de t et de u. On rappelle que la 
composee f  g de deux
applications est definie comme associant f (g(x)) a x.
Question 3 Ecrire une fonction inverser(t) qui prend une permutation t en 
argument et renvoie
la permutation inverse t-1 . On rappelle que l'application inverse f -1 d'une 
bijection est definie
comme associant x a f (x).
La notation tk designe t composee k fois, -- la definition est correcte en 
raison de l'associativite de la composition. On definit l'ordre d'une 
permutation t comme le plus petit entier k
non nul tel que tk est l'identite.
Question 4 Donner un exemple de permutation d'ordre 1 et un exemple de 
permutation
d'ordre n.
Question 5 En utilisant la fonction composer, ecrire une fonction ordre(t) qui 
renvoie l'ordre
de la permutation t.

Partie II. Manipuler les permutations

La periode d'un indice i pour la permutation t est definie comme le plus petit 
entier k non nul
tel que tk (i) = i.
Question 6 Ecrire une fonction periode(t,i) qui prend en arguments une 
permutation t et un
indice i et qui renvoie la periode de i pour t.
L'orbite de i pour la permutation t est l'ensemble des indices j tels qu'il 
existe k avec
tk (i) = j.
Question 7 Ecrire une fonction estDansOrbite(t,i,j) qui prend en arguments une 
permutation t
et deux indices, et qui renvoie vrai si j est dans l'orbite de i et faux sinon.

2

Une transposition est une permutation qui echange deux elements distincts et 
laisse les autres
inchanges.
Question 8 Ecrire une fonction estTransposition(t) qui prend une permutation t 
en argument
et renvoie vrai si t est une transposition et faux sinon.
Un cycle (simple) est une permutation dont exactement une des orbites est de 
taille strictement superieure a un. Toutes les autres orbites, s'il y en a, 
sont reduites a des singletons.
Question 9 Ecrire une fonction estCycle(t) qui prend une permutation t en 
argument et renvoie
vrai si t est un cycle et faux sinon.

Partie III. Operations efficaces sur les permutations

On commence par ecrire une fonction qui calcule les periodes de tous les 
elements de En et
qui soit la plus efficace possible.
Question 10 Ecrire une fonction periodes(t) qui renvoie le tableau p des 
periodes. C'est-a-dire
que p[i] est la periode de l'indice i pour la permutation t. On impose un cout 
lineaire, c'est-a-dire
que la fonction periodes effectue au plus C · n operations avec C constant et n 
taille de t.
On envisage ensuite le calcul efficace de l'iteree tk . On remarque en effet 
que tk (i) est egal a
ou r est le reste de la division euclidienne de k par la periode de i.

tr (i),

Question 11 Ecrire une fonction itererEfficace(t,k) (k  0) qui calcule l'iteree 
tk en utilisant
le tableau des periodes. On rappelle que t0 est l'identite. Si besoin est, les 
candidats pourront
utliser la primitive reste(a,b) qui renvoie le reste de la division euclidienne 
de a par b (a  0,
b > 0).
La fonction ordre de la question 5 n'est pas tres efficace. En effet, elle 
procede a de l'ordre de
o compositions depermutations, ou o est l'ordre de la permutation passee en 
argument. Or, o
est de l'ordre de n n dans le cas le pire. On peut ameliorer considerablement 
le calcul de l'ordre
en constatant que l'ordre d'une permutation est le plus petit commun multiple 
des periodes des
elements.
Question 12 Donner un exemple de permutation dont l'ordre excede strictement la 
taille.
Question 13 Ecrire une fonction pgcd(a,b) qui prend en arguments deux entiers 
strictement
positifs a et b, et renvoie le plus grand diviseur commun de a et b. On impose 
un calcul efficace
selon l'algorithme d'Euclide qui repose sur l'identite pgcd(a,b) = pgcd(b,r), 
avec r reste de la
division euclidienne de a par b.
Question 14 Ecrire une fonction ppcm(a,b) qui prend en arguments deux entiers 
strictement positifs a et b, et renvoie le plus petit commun multiple de a et 
b. On utilisera l'identite
ppcm(a,b) = (a × b)/pgdc(a,b).

3

Question 15 Ecrire une fonction ordreEfficace(t) qui calcule l'ordre de la 
permutation t selon
la methode efficace. On cherchera a minimer le nombre d'appels a ppcm effectues.

4