Centrale Informatique MP 2005

Thème de l'épreuve Composantes connexes de polygones simples. Complexité de communication.
Principaux outils utilisés espaces affines, arbres binaires, représentation binaire, complexité

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 5 € ⬅ clique ici
👈 gratuite pour tous les corrigés 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


 

% e......___... ...30_Ëämo...z_ ä.ä...

mêw ooeäQ:OE - ÆOEÈOEO mÈQË©Q

Partie I - Polygones simples

Dans toute cette partie, le plan est muni d'un repère orthonormé fixé. On iden-
tifiera un vecteur et le couple de ses coordonnées dans ce repère.

Notes de programmation. On dispose des types point , vecteur , segment
et polygone . Un point (ou un vecteur) est défini par deux entiers, un seg--
ment est défini par deux points et un polygone est une liste de points.

Remarque : dans tout le problème un segment, resp. un polygone, est toujours
supposé formé de points distincts.

En Caml :

type point = { x:int ; y:int };;

type vecteur = { xv:int ;.yv:int };;

type segment { a:point ; b:point };;

type polygon == point list;;

On dispose par ailleurs de constructeurs de vecteurs et de segments à partir
des points les définissant ;

let CreerVecteur p q = { xv = q.x--p.x ; yv = q.y--p.y};;
let CreerSegment p q = { a = p ; b = q };;

Les fonctions dont on demandera le code devront avoir pour signatures :
determinant : vecteur --> vecteur --> int = 
produit_scalaire : vecteur --> vecteur --> int = 
direct : point --> point --> point --> int = 

meme_cote : segment --> point --> point --> int = 
appartient : segment --> point --> int = 

intersecte : segment --> segment -> int = 

simplifie : polygone --> polygone = 

en_dehors : polygone --> point = 

interieur : polygone --> point --> int = 

Pour simplifier la présentation Caml/ Pascal, la notation fonctionnelle
f (u,v) est utilisée dans l'énoncé à la place de f u v en Caml.

En Pascal :

type
point=record x,y:integer end;
vecteur=record xv,yv: integer end;

segment=record a,b:point end;

polygone="cellule;

cellule=record contenu:point; suivant:polygone end;
Les fonctions/procédures dont on demandera le code auront pour entêtes :
function determinant(u,v:vecteur):integer;
function produit_scalaire(u,vzvecteur):integer;
function direct(a,b,c:point):integer;
function meme_cote(I:segment;p,q:point):integer;
function appartient(I:segment; p:point):integer;
function intersecte(l,stegment):integer;
function simplifie (P:polygone):polygone;
procedure en_dehors(P:polygone; var res:point);
function interieur(P:polygone;ptzpoint):integer;

I.A - Intersection

Remarque : géométriquement, le segment [a, b] est l'ensemble des points de la

droite (a, b) situés entre a et b ; on rappelle que les segments considérés sont
non réduits à un point.

I.A.1) Écrire des fonctions determinant et produit_scalaire telles que
determinant ( u , v) retourne le déterminant de la matrice formée par les vec--

teurs u et v, et produit_scalaire ( u,v) retourne le produit scalaire des vec--
teurs u et v.

I...A2) Définition: étant donne'_)s t_rpis points a, b, c, le triangle (a, b, 
c) est

direct si une mesure_gie _l_} angle (ab, ac) est dans l'intervalle ]O, n[, 
indirect si une
mesure de l' angle (ab, ac) est dans l'intervalle ]--n, 0[ , aplati si les 
trois points a,

b et c sont alignés.

. . o . H __>
Montrer que le triangle (a, b, c) est d1rect s1 et seulement s1 det(ab, ac) > 0 
.

I.A.3) Écrire une fonction direct telle que direct(a,b,c) retourne 1 si
le triangle (a, b, c) est direct, --1 s'il est indirect et 0 s'il est ap1ati.

I.A.4) Écrire une fonction meme_cote telle que meme_cote(I , p , q) retourne
1 si les points p et q sont du même côté de la droite D portée par le segment I 
,
--1 s'ils ne sont pas du même côté, et 0 si p ou q est sur D.

Illustrer la démarche à l'aide de figures bien choisies.

I.A.5) Écrire, en la justifiant, une fonction appartient telle que appar--
tient(I,p) retourne 1 si le point p appartient au segment I et --1 sinon.

I.A.6) Écrire une fonction intersecte telle que intersecte ( I , J )
retourne 1 si les segments I et J ont une intersection non vide et --1 sinon.

Utiliser et justifier & l'aide de figures le fait que, sauf cas particuliers à 
expliciter;
I et J ont une intersection non vide lor3que les extrémités de 1 ne sont pas du

même côté de J et que conjointement les extrémités de J ne sont pas du même
côté de I .

LB - Intérieur / Extérieur

Dans_cette partie, n est un entier strictement supérieur à 2 , P : p1p2... pn 
est
un polygone ; les points pl,..., pn sont les sommets du polygone ; les segments

[p1, p2], [pn_ 1, pn], [pn, pl] en sont les arêtes. Par convention on pose po : 
pn
et pi+ ,... : pi pour tout entier naturel le .

Géométriquemeht, un polygone est, par définition, l'ensemble des points de ses
arêtes ; ainsi on dit qu'un point a est sur le polygone P s'il appartient à 
l'une de

ses arêtes. On dit qu'un segment S coupe le polygone P si ce segment à une
intersection non vide avec l'une des arêtes de P.

De plus, dans ce problème, le polygone P sera toujours supposé simple, ce qui
signifie que deux arêtes quelconques non consécutives sont toujours disjointes
et que deux arêtes consécutives ont un seul point commun.

Résultat admis l. Un polygone simple P sépare le plan en deux composan-
tes connexes, ce qui signifie que le complémentaire de P dans le plan com-
porte deux composantes connexes: l'intérieur de P est par définition la
composante connexe bornée et l'autre, non bornée, est l'extérieur de P.

Résultat admis 2. Soient P un polygone simple, a et b deux points du plan

qui ne sont pas sur P. Si le segment [a, b] ne coupe pas P alors a et b sont
dans la même composante connexe.

Résultat admis 3.Soient P un polygone simple, a et b deux points du plan
qui ne sont pas sur P. Si le segment [a, b] coupe P en un seul point qui n'est

pas un sommet de P, alors a et b ne sont pas dans la même composante
connexe.

I.B.l) Écrire une fonction simplifie telle que simplifie ( P) supprime du
polygone P les points p,- tels que pi_1, pi, pi+1 sont alignés. Évaluer sa com-
plexité. '
Dans la suite, le polygone P sera supposé sous sa forme simplifiée, i.e. il 
n'existe
pas de sommet Pi tel que pi_1, pi, pi+1 sont alignés.

I.B.2) Caml : écrire une fonction en_dehors telle que en_dehors P
retourne un point appartenant àla composante extérieure de P . Le temps d'exé-
cution (dans le pire des cas) doit être linéaire en le nombre de points de P.

Pascal: écrire une procédure en_dehors telle que en_dehors(P,pt) place
dans la variable pt un point appartenant à la composante extérieure de P. Le

temps d'exécution (dans le pire des cas) doit être linéaire en le nombre de 
points
de P.

I.B.3) Soit 3 un point à l'extérieur de P. En supposant que le segment [q, 8]
ne contient aucun des sommets de P , dire dans quelle composante connexe se
situe q , en fonction du nombre d'intersections de [q, 8] avec P.

I.B.4) En déduire une fonction interieur telle que interieur ( P , q) ren-
voie 1 si q est dans la composante intérieure de P, --1 si q est dans la compo--
sante extérieure, et 0 si q est sur P. Le nombre d'opérations (dans le pire des
cas) de la fonction doit être linéaire en le nombre de sommets de P.

On fera ici l'hypothèse que le point s à l'extérieur de P est tel qu'aucun 
sommet
de P n'est sur le segment [q, 3].

I.B.5) Adapter cette fonction pour traiter tous les cas d'intersections possi-
bles et donner alors le nombre d'opérations (dans le pire des cas).
Indication : on déplacera habilement le point extérieur 3 .

I.B.6) Soient deux points a et b qui ne sont pas sur P et tels que [a, b] coupe
P en un seul point qui est l'un de ses sommets pi . Caractériser, par une condi-
tion portant sur p,-_1 , p,- +1 et [a, b] , l'appartenance des points a et b à 
la même
composante connexe. Justifier à l'aide de figures bien choisies.

I.B.7 ) Soient deux points a et b qui ne sont pas sur P et tels que l'intersec-
tion de [a, b] et de P est une arête [p,-, pi +1] de P. Caractériser, par une 
condi-
tion portant sur p,-_1 , p,- +2 et [a, b] , l'appartenance des points a et b à 
la même
composante connexe. Justifier & l'aide de figures bien choisies.

I.B.8) Réécrire la fonction interieur de la question I.B.5 avec un nombre
d'opérations (dans le pire des cas) linéaire par rapport à n .

Partie II - Complexité de communication

Lorsque E est un ensemble fini, lEI désigne son cardinal. Lorsque x est un réel,
Fx] (resp. Lx]) désigne sa partie entière supérieure (resp. inférieure), 
c'est-à-
dire l'unique entier vérifiant x 5 Fx] < x + 1 (resp. x -- 1 < Lx] 5 x ). Soit une application f : X >< Y --> Z . Pour y E Y fixé, f y désigne 
l'application par--

tielle fy { X_>Z
xr---->f(x,y)

et pour x E X fiXé, f x l'application partielle fx { Y _' Z

y+-->f(x,y)

II.A - Communication à sens unique

Dans cette partie on modélise le scénario suivant. Soient X , Y et Z trois 
ensem-
bles finis arbitraires et f : X x Y --> Z une fonction donnée. Deux personnes, 
Alice
et Bob, veulent calculer f (x, y) pour des valeurs x E X et y E Y . La 
difficulté est
que seule Alice connaît x et seul Bob connaît y. L'objectif est de déterminer
l'information minimale qu'Alice doit envoyer à Bob pour que ce dernier puisse
calculer f(x, y).

Un protocole à sens unique 95 calculant f est un couple de fonctions (go, g,) ,
avec go : X-->{O,1}* et g1 : {0,1}* x Y ---> Z , tel que EUR1(go(x)»y) : f(x, 
y) , pour tout
x E X et y & Y , {0,1}* désignant l'ensemble des mots sur l'alphabet {0,1}.

Autrement dit, g0(x) est l'information qu'Alice envoie à Bob, et gl(m, y) est la
valeur calculée par Bob ayant reçu le message m d'Alice.

Le coût sur l'entrée (x, y) d'un protocole à sens unique @ est la taille en 
bits de
g0(x) , c'est--à-dire la longueur de ce mot. Le coût d'un protocole à sens 
unique est
le maximum de ses coûts sur toutes les entrées possibles. La complexité de com-

. . \ . , 1 . . ,\
munzcatzon a sens unzque de f, notee D (f) , est le m1n1mum des couts des pro-
tocoles à sens unique calculant f.

Note sur la rédaction. Dans cette partie, la description d'un protocole se fera
par la donnée explicite des fonctions go et g1 correspondantes.

II.A.1) Exemples - Propriétés simples
a) Calculer D'(f ) lorsque f est une fonction constante.

b) Trouver, pour f donnée, un protocole dont le coût est [log2lel. Que peut- on
en déduire sur D (f)?

c) Soient X_ -- {1,.. n,} p un entier tel que 15 p sn--1, et f une fonction de
période p par rapport à la première variable, i. e. f (x + p, y)= f (x y) pour 
tout
(x,y) EX x Y tel que x +p s n. Montrer que D (f) 5 Flogpl .

d) X et Y sont ici l'ensemble des parties de {1,.. .,n}, et, pour x, yC{1,... 
.,n},

f(x, y) est le plus grand élément de x U y. Montrer que D (f) < {log2nl. Compa- rer àla majoration de la question II. A. 1-- b. e) Montrer que pour chaque yEY fixé, Dl(f)zllog2llm(fy)ll, avec Im(fy) l'ensemble des valeurs prises par f y . f) Calculer D1(f ) , f désignant la fonction de la question II.A.l-d. II.A.2) Calcul exact de Dl(f) On suppose que X : {1,...,p} et Y : {1,...,q}, pour deux entiers p et q stricte- ment positifs. La matrice de communication de f : X >< Y --a Z est un tableau à p lignes et q colonnes, noté M f , dont les lignes sont indexées par X et les colonnes par Y, et définie par (M f) _ f--(x, y), pour x EX et y E Y. Soit t le nombre de lignes distinctes de M f Orly va montrer l'égalité D (f)_ -- {log2tl. a) Donner un protocole calculant f dont le coût est {log2tl . b) Montrer que le protocole précédent est optimal, i.e. tout protocole calculant f a un coût supérieur ou égal à { log2tl . c) Application :Alice et Bob détiennent chacun un mot de taille n sur l'alphabet {0,1}. Quelle information minimale Alice doit--elle fournir à Bob pour que celui- ci puisse décider de façon certaine si les deux mots sont égaux ? On commencera par modéliser précisément cette situation en terme de protocole de communication à sens unique. Donner un protocole à sens unique dont le coût atteint cette borne. Lorsque X et Y sont quelconques, l'égalité D'(f) : [log2tl est maintenue en pre- nant pour t le nombre d'applications partielles ( fx)x & X distinctes. En effet, cha- que fonction f x correspond à une ligne de la matrice dans le cas précédent. II.B - Communication avec aller-retour Nous considérons maintenant des communications générales où les deux parti- cipants peuvent'interagir plusieurs fois entre eux. De plus, ils veulent mainte- nant calculer tous les deux la valeur de la fonction. Soient X , Y et Z trois ensembles finis arbitraires et f : X x Y --> Z une fonction donnée. Étant donnés
x E X , détenu par Alice et y & Y , détenu par Bob, le but est de calculer f 
(x, y) en
s'échangeant le minimum de bits. Un protocole (calculant f) est maintenant
divisé en étapes. À chaque étape, le protocole désigne une personne, indifférem-
ment Alice ou Bob. La personne désignée envoie alors un bit à l'autre personne.
Ce bit ne dépend que des bits échangés précédemment et de l'entrée détenue par
la personne désignée. Lorsque le protocole termine, alors les deux participants
sont en mesure de calculer f (x y) d' après les bits échangés et la valeur de x 
(res-
pectivement y).

Plus formellement : un protocole 95 de domaine X x Y et à valeurs dans 2 est
un arbre binaire étiqueté comme suit. Chaque noeud interne est étiqueté soit
« Alice » soit « Bob », chaque feuille est étiquetée par un élément 2 EUR Z , 
et enfin
les arêtes par des sous-ensembles de X ou de Y avec la contrainte suivante. Si
un noeud interne est étiqueté « Alice » (respectivement « Bob ») alors ses 
arêtes
gauche et droite sont respectivement étiquetées par des sous-ensembles dis-
joints E g et Ed de X (respectivement de Y).

La valeur du protocole 95 sur l'entrée (x, y) , avec x E X et y E Y , est 
l'étiquette
de la feuille atteinte en partant de la racine et en parcourant l'arbre suivant 
le
chemin décrit ci-après. A chaque noeud interne étiqueté « Alice » (respective-
ment « Bob ») le parcours suit le fils gauche si x E E g (respectivement y E E 
g ) et

le fils droit dans l'autre cas, i.e. x E E d (respectivement y EUR Ed ). Pour 
indiquer
le sens du parcours, Alice (respectivement Bob) envoie à Bob (respectivement
Alice) le bit 0 pour le fils gauche et 1 pour le fils droit. Le protocole sera 
toujours
supposé bien défini de sorte qu'à chaque noeud, x ou y selon le cas, appartient
àla réunion Eg U Ed .

Le coût sur l'entrée (x, y) d'un protocole ? est la longueur totale du chemin 
sur
l'entrée (x, y) , soit donc la profondeur de la feuille atteinte.

Le coût d'un protocole est le maximum de ses coûts sur toutes les entrées possi-
bles, soit encore la hauteur de l'arbre @ .

Un protocole calcule f si sa valeur est f (x, y) sur chaque entrée (x, y) .

La complexité de communication de f , notée D(f ) , est le minimum des coûts des
protocoles calculant f.

Note sur la rédaction. Dans cette partie, les protocoles seront souvent décrits
sous forme compacte où chaque série de bits émis consécutivement par le même
participant est concentré sur la même ligne.

Exemple. Soient X : {0,1}3, Y = {l, 2, 3} et Z = {0,1}. Posons
f ((x1, x2, x3), y) = x y . Suivent un protocole pour f ainsi que sa forme 
compacte.

1.Siy
2.Sib

1 Bob envoie àAlice le bit b = 0 sinon le bit b = 1 .
0 alors Alice renvoie x1 à Bob

et le protocole termine et renvoie f (x, y) = x1 .
3. Si y = 2 Bob envoie àAlice le bit c = O , sinon le bit c = 1.
4. Alice envoie le bit x2 +0 à Bob.
5. Le protocole termine et renvoie f (x, y) = x2 % .

Figure 2 : Forme compacte du protocole pour f .

ll.B.1) Quelques exemples
a) Voici la forme compacte d'un protocole où X : Y : Z = {O, 1, 2, 3}.

1.Alice calcule a = 0 si xEUR{0,1}, et a = 1 sinon.
Alice envoie a à Bob.

2. Si a = 0 et yEUR{2, 3} Bob renvoie b = 1.
Si a = 0 et yEUR{0,1} Bob renvoie b = 0.
Si a = 1 et yE{O,1} Bob renvoie b = 1.

Sia : 1 et yE{2, 3} Bob renvoie b = O.

8. Si b = 1 le protocole termine et renvoie f(x, y) : 1----a.
Sinon Alice renvoie c = x -- 2a .

4. Bob renvoie d = 1 si c J + 1 s D(f) s D'