Centrale Option Informatique MP 2009Sujet, corrigé et rapport du jury
Pas encore noté
Téléchargements
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
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.
Calculatrices autorisées
Note : les parties I, II.A, II.B et II.C sont indépendantes.
Partie I - La chasse aux fantômes
Les candidats devront indiquer clairement en tête de copie le langage de programmation choisi (Pascal ou Caml). Les fonctions et procédures demandées seront rédigées dans ce langage.
Un groupe de
n chasseurs de fantômes combat un groupe de
n fantômes. Chaque chasseur est armé d'un canon à ions, capable d'éradiquer un fantôme d'un coup de rayon. Un rayon se propage en ligne droite et termine sa course en touchant le fantôme. Les chasseurs sont confrontés à deux problèmes : il est nécessaire d'éliminer tous les fantômes en même temps, sinon ils se multiplient pour revenir au nombre initial de
n fantômes; il est très dangereux que deux rayons se croisent, cela ne doit donc pas se produire. Le combat se déroule dans une grotte cylindrique creuse, dont la base est un disque. Les déplacements (chasseurs et fantômes) ne sont possibles que sur un rebord confondu avec la circonférence, mais les tirs se font entre deux points de la circonférence, selon des cordes du cercle.
I.A - Les2n protagonistes sont représentés par des points distincts
P_1, P_2, …, P_(2n) répartis dans l'ordre des indices croissants sur la circonférence d'un cercle parcouru dans le sens trigonométrique;
n sont des chasseurs,
n des fantômes, mais, dans cette section I.A, on cherche les liens possibles entre les
P_i sans s'occuper de qui est chasseur et qui est fantôme. Les points doivent être reliés deux à deux par une corde du cercle selon une stratégie gagnante pour les chasseurs. Pour cela, il faut donc respecter les deux conditions :
i) chaque point est une extrémité d'une et une seule corde,
ii) les différentes cordes ne doivent pas se couper.
I.A - Les
i) chaque point est une extrémité d'une et une seule corde,
ii) les différentes cordes ne doivent pas se couper.
Dans toute la suite on fixe un entier
n > 0 et on appelle stratégie de taille
n un vecteur (
c[1], c[2], …, c[2n] ), tel que pour tout entier
i vérifiant
1 ⩽ i ⩽ 2n on ait:
Cette notation exprime bien le lien entre les points
P_i et
P_j lorsque
j = c[i] .
En Pascal, on représente le vecteur par un tableau avec un type Vecteur défini par:
ConstNmax = … ; {de taille suffisante pour tout le problème}
Type Vecteur = array [1..Nmax] of integer;
En Caml, on représente le vecteur avec le type «vecteur» de Caml. On peut utiliser la fonction make_vect. Les éléments des vecteurs en Caml sont numérotés de 0 àN − 1 . On prendra des vecteurs de taille
2n + 1 , dont le premier élément ne sera pas utilisé, pour que les points soient bien aux indices 1 à
2n dans le vecteur Caml.
On considère des stratégies où les points d'une paire sont reliés par des segments de droites situés dans un même plan. Une stratégie est dite «admissible» si les segments ainsi formés ne se coupent pas. On admet que cette propriété ne dépend pas de la position des points sur la circonférence mais seulement de la stratégie.
Const
Type Vecteur = array [1..Nmax] of integer;
En Caml, on représente le vecteur avec le type «vecteur» de Caml. On peut utiliser la fonction make_vect. Les éléments des vecteurs en Caml sont numérotés de 0 à
On considère des stratégies où les points d'une paire sont reliés par des segments de droites situés dans un même plan. Une stratégie est dite «admissible» si les segments ainsi formés ne se coupent pas. On admet que cette propriété ne dépend pas de la position des points sur la circonférence mais seulement de la stratégie.
Par exemple, pour les stratégies de taille
4, c_1 et
c_2 ci-contre:
La figure de gauche correspond à
c_1 qui est donc admissible, et celle de droite à
c_2 qui, elle, ne l'est pas.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|
|
2 | 1 | 6 | 5 | 4 | 3 | 8 | 7 |
|
|
2 | 1 | 7 | 5 | 4 | 8 | 3 | 6 |

I.A.1) Dans le cas
I.A.2) Préciser le nombre de stratégies de taille 3 qui sont admissibles. Les représenter sur une figure.
I.A.3) Déterminer le nombre de stratégies de taille
I.B - Soit
I.B.1) Donner une condition nécessaire et suffisante, portant uniquement sur ces entiers, pour que les segments
I.B.2) Écrire une fonction «croise» prenant les quatre entiers pour paramètres et renvoyant un booléen dont le résultat est true si et seulement si les segments
I.B.3) En utilisant la fonction croise, écrire une fonction «estAdmissible» qui prend en paramètre le vecteur (et en Pascal, le nombre
I.B.4) Donner, en la justifiant, la complexité de cette méthode, en terme de temps de calcul (on se contentera d'une évaluation du type
I.C - On souhaite tester la stratégie de façon plus efficace. Pour cela on utilise une fonction «evalue» qui prend deux entiers
-
(i ⩽ k ⩽ j) ⇒ (i ⩽ c[k] ⩽ j) - les segments ayant leurs extrémités dans l'arc (fermé)
[P_i P_j] ne se croisent pas. I.C.1) Donner la valeur de evalue(i, j) dans les trois cas particuliersa, b etc suivants :
а)j < i ;
b)j ⩾ i etc[i] < i ;
c)j ⩾ i etc[i] > j .
I.C.2) Pouri < c[i] < j , montrer que evalue(i, j) se déduit de evalue(i +1 ,c[i] − 1) et de evalue (c[i] + 1, j ).
I.C.3) Écrire une fonction testStrategie qui prend en paramètre un vecteur (et en Pascal le nombren de chasseurs) et renvoie un booléen dont la valeur est true si la stratégie est admissible. Cette fonction devra être de complexitéO(n) .
I.C.4) Démontrer avec soin que la fonction testStrategie est bien de complexitéO(n) .
I.D - La méthode précédente teste si une stratégie est admissible. On souhaite maintenant, le statut (chasseur ou fantôme) des points étant donné, déterminer directement une stratégie admissible, de façon également efficace.
I.D.1) Montrer que siP_i est un chasseur (1 ⩽ i ⩽ 2n ), alors il existej ≠ i , avec1 ⩽ j ⩽ 2n tel queP_j est un fantôme et tel que le nombre de chasseurs soit égal au nombre de fantômes de chaque côté de l'axeP_i P_j .
I.D.2) En déduire un algorithme simple pour construire une stratégie admissible.
I.D.3) On se propose d'évaluer la complexité de cette méthode.
a) Déterminer la complexité dans le pire des cas.
b) Évaluer, sans démonstration, la complexité moyenne.
I.D.4) Un vecteurp contient la nature des pointsP_i : p[i] = 1 pour un chasseur,p[i] = − 1 pour un fantôme(1 ⩽ i ⩽ 2n) . On a donc∑_(i = 1)^(2n)p[i] = 0 puisqu'il y a autant de fantômes que de chasseurs. Écrire une fonction cibles, qui prend en paramètre le vecteurp (et en Pascal, le nombren de chasseurs) et qui renvoie la liste des indices(i, j) des couples (P_i, P_j ) (oùP_i est un chasseur etP_j un fantôme), composant une stratégie admissible du problème.
Partie II - Automates finis
On rappelle que les sections II.A, II.B, II.C sont indépendantes et peuvent être traitées dans un ordre quelconque.
Définitions et notations
Un automate (sous entendu fini) déterministe est un quintuplet
𝒜 = (Q, A, i, δ, F) avec:
-
Q l'ensemble fini non vide des états; - A l'alphabet c'est-à-dire l'ensemble fini non vide des lettres;
-
i ∈ Q l'état initial; -
δ : Q × A → Q la fonction de transition (éventuellement partielle); -
F ⊆ Q l'ensemble des états terminaux.
Lorsque
δ est défini sur l'ensemble
Q × A tout entier, on parle d'automate fini complet. Que l'automate soit complet, ou non, on peut choisir de représenter les transitions non par une fonction de transition
δ , mais par un ensemble de transitions
T ⊆ Q × A × Q (le graphe de
δ ), avec la condition de déterminisme :
(D)si(q, α, q_1), (q, α, q_2) ∈ T , alors
q_1 = q_2 .
(D)
Un automate (fini) non déterministe est un quintuplet
𝒜 = (Q, A, I, δ, F) avec cette fois
I ⊆ Q l'ensemble des états initiaux et
δ : Q × A → 𝒫(Q) la fonction de transition : si
p ∈ Q et
α ∈ A, δ(p, α) désigne l'ensemble (éventuellement vide) des
q ∈ Q tels qu'il existe une transition étiquetée par
α de
p vers
q . Si on choisit de représenter les transitions par un ensemble inclus dans
Q × A × Q , la condition
(D) n'a plus à être vérifiée.
Pour présenter un automate, les candidats pourront, bien entendu, les représenter par un schéma. Ils veilleront alors à bien identifier l'état initial (ou les états initiaux) et les états terminaux par une notation adaptée.
Pour présenter un automate, les candidats pourront, bien entendu, les représenter par un schéma. Ils veilleront alors à bien identifier l'état initial (ou les états initiaux) et les états terminaux par une notation adaptée.
On note
A^∗ l'ensemble des mots écrits dans l'alphabet
A (y compris le mot vide). Un langage sur l'alphabet
A est un sous-ensemble de
A^∗ . On note en particulier
L(𝒜) le langage de
𝒜 , c'est-à-dire l'ensemble des mots acceptés par
𝒜 (permettant de passer d'un état initial à un état terminal).
Étant donné un motu ∈ A^∗ , on note
|u| la longueur de
u , c'est-à-dire le nombre de ses lettres.
Étant donné un mot
II.A - Mots répétés
II.A.1) Soit
A un alphabet. On s'intéresse au langage
L ⊆ A^∗ constitué des mots
u qui ne sont de la forme
w^2 (c'est-à-dire
ww ) pour aucun
w ∈ A^∗ :
a) On suppose que
A est réduit à une lettre.
Montrer alors que
L est reconnaissable par automate fini et donner un automate reconnaissant effectivement
L , ainsi qu'une expression rationnelle décrivant
L .
b) On suppose maintenant queA n'est pas réduit à une lettre. Montrer que
L n'est pas reconnaissable.
c) Soitp un entier strictement plus grand que 2 . Reprendre les deux questions précédentes en remplaçant
L par
L_p défini par:
b) On suppose maintenant que
c) Soit
II.B - Logique de Presburger
Soit
n un entier strictement positif et
B = {0, 1} . On prend comme alphabet l'ensemble
B^n . Un mot
représente le
n -uplet d'entiers naturels (
x_1, ⋯, x_n ) tel que
a) Donner une représentation des
n -uplets suivants :
(4);
(2,3,0);
(2, 3, 5) .
(4);
(2,3,0);
On appelle relation dans
ℕ^n tout sous-ensemble de
ℕ^n .
On dit qu'une relationR ⊆ ℕ^n est rationnelle, lorsqu'il existe un automate fini
𝒜 qui reconnaît exactement l'ensemble des mots de (
B^n )* représentant les
n -uplets de
R .
On dit qu'une relation
Pour les deux questions b) et c) suivantes, on demande de donner, pour chacune des relations Eg, Inf et Add, un automate fini la reconnaissant effectivement.
b) Montrer que les relations :
b) Montrer que les relations :
sont rationnelles.
c) Montrer que la relation :
c) Montrer que la relation :
est rationnelle.
d) On suppose la relationR ∈ ℕ^n rationnelle et on définit les relations
Q ⊆ ℕ^(n − 1) et
S ⊆ ℕ^(n − 1) par :
(x_1, …, x_(n − 1)) ∈ Q si, et seulement si, il existe
x ∈ ℕ tel que
(x_1, …, x_(n − 1), x) ∈ R .
(x_1, …, x_(n − 1)) ∈ S si, et seulement si, pour tout
x ∈ ℕ, (x_1, …, x_(n − 1), x) ∈ R .
Montrer que les relationsQ et
S sont rationnelles.
d) On suppose la relation
Montrer que les relations
II.C - Automate minimal
Soit
A = {a, b} . Pour chaque entier
N ∈ ℕ , on définit les langages
G_N et
D_N de la manière suivante :
-
G_N = {uav|u ∈ A^N, v ∈ A^∗} . -
D_N = {uav|u ∈ A^∗, v ∈ A^N} .
II.C.1) Donner un automate déterministe complet, àN + 3 états reconnaissantG_N .
II.C.2) Donner un automate non-déterministe, àN + 2 états reconnaissantD_N .
II.C.3) Démontrer qu'il n'existe pas d'automate déterministe complet reconnaissantG_N et possédant strictement moins deN + 3 états.
On pourra raisonner par l'absurde et prouver que les états atteints en lisant
a^k depuis l'état initial sont distincts, pour certaines valeurs
k .
II.C.4) Déterminiser l'automate proposé dans la question C.2), lorsque
N = 1 .
II.C.5) Démontrer qu'il n'existe pas d'automate déterministe complet reconnaissantD_N et possédant strictement moins de
2^(N + 1) états.
II.C.6) Démontrer qu'il n'existe pas d'automate fini (non-déterministe) reconnaissantD_N et possédant strictement moins de
N + 2 états. Même question pour le langage
G_N .
II.C.5) Démontrer qu'il n'existe pas d'automate déterministe complet reconnaissant
II.C.6) Démontrer qu'il n'existe pas d'automate fini (non-déterministe) reconnaissant
Pas de description pour le moment
