Centrale Option Informatique MP 2001Sujet et corrigé
5,0(1 vote)
Téléchargements
- Rapport du jury : non disponible
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.
INFORMATIQUE
Les deux parties sont indépendantes et peuvent être traitées dans un ordre quel conque
Partiel - Algorithmes pour la sélection
Pour
x ∈ IR , on note
⌊x⌋ la partie entièrede
x , c'est-à-dire le plus grand entier inférieur ou égal à
x , et
⌈x⌉ le plus petit entier supérieur ou égal à
x .
On s'intéresse au problème suivant, appelé problème de la sélection : on a un ensemble E den entiers positifs distincts, un entier i inférieur ou égal à
n , et on recherche le i - ème élément de
E classé dans l'ordre croissant, c'est-à-dire l'élément
x de
E tel qu'il
y ait
i − 1 éléments de
E strictement inférieurs à
x et
n − i strictement supérieurs à
x .
Le médian d'un ensemble de n nombres est le⌈n/2⌉ - ème lorsqu'ils sont rangés en ordre croissant.
On insiste sur le fait que dans toute la partie I, on considère des tableaux ou listes d'entiers distincts deux à deux.
On s'intéresse au problème suivant, appelé problème de la sélection : on a un ensemble E de
Le médian d'un ensemble de n nombres est le
On insiste sur le fait que dans toute la partie I, on considère des tableaux ou listes d'entiers distincts deux à deux.
I.A - Recherche des deux plus grands éléments
Les éléments de
E sont donnés non classés dans un tableau
T .
I.A.1) Soitp ∈ IN^∗ . On organise un tournoi entre
n = 2^p entiers
e_1, …, e_n au sens suivant : on constitue un arbre binaire parfait de hauteur
p (i.e.: chaque noeud de profondeur < p possède exactement deux fils), dont les
2^p feuilles sont étiquetées par les
e_i . Ensuite, pour
h allant de
p − 1 à 0 , les étiquettes des noeuds de profondeur
h sont égales au maximum des étiquettes de leurs deux fils.
a) Donner le nombre de comparaisons nécessaires pour réaliser un tel tournoi.
b) Montrer qu'à l'aide de ce procédé, on peut trouver le maximum et le second plus grand élément dese_i en moins de
n + ln_2 n comparaisons.
En fait, on peut montrer (mais cen'est pas demandé) qu'un tel algorithme est optimal.
c) Exemple : appliquer la méthode précédente à l'entrée:
I.A.1) Soit
a) Donner le nombre de comparaisons nécessaires pour réaliser un tel tournoi.
b) Montrer qu'à l'aide de ce procédé, on peut trouver le maximum et le second plus grand élément des
En fait, on peut montrer (mais cen'est pas demandé) qu'un tel algorithme est optimal.
c) Exemple : appliquer la méthode précédente à l'entrée:
d) Comment généraliser cette méthode lorsque
n n'est pas de la forme
2^p ? Appliquer à l'entrée
I.A.2) On suppose qu'il existe un algorithme
𝒜 prenant en entrée n entiers, et retournant le plus grand de ces entiers. On suppose que cet algorithme exécute des comparaisons entre des éléments du tableau, et que le résultat retourné ne dépend que de l'ensemble des résultats des comparaisons effectuées. On suppose égal ement qu'il
Filière MP
existe une entrée
e = (e_1, …, e_n) telle que
𝒜 exécute strictement moins de
n − 1 comparaisons, lorsqu'il est exécuté sur l'entrée e.
a) Si S est un ensemble fini non vide de cardinalp ≥ 2 dont les éléments sont appelés sommets
S = {S_1, …, S_p} , on appelle arêtede
S toute paire de sommets, c'est-à-dire tout ensemble
{s_i, s_j} de deux sommets distincts. Par définition, un graphe (non orienté) est un couple (
S, A ) où
A est un ensemble d'arêtes de
S .
Un tel graphe est dit connexe lorsque pour toute paire de sommets{s_i, s_j} , il existe un entier
n ∈ 𝕀ℕ^∗ et une suite de sommets
c_0, …, c_n tels que
c_0 = s_i, c_n = s_j et
{c_k, c_(k + 1)} ∈ A pour tout
k ∈ [ [0, n − 1] ] .
Montrer que si (S, A ) est connexe, alors
|A| ≥ |S| − 1 (où
|X| désigne le cardinal de l'ensemble X ).
b) Construire une entréee^′ = (e_1^′, …, e_n^′) tellequel'algorithme
𝒜 ne retourne pas le plus grand élément de é. On pourra considérer le graphe (
[ [1, n] ], C ), où
C est l'ensemble des paires
{i, j} ∈ [ [1, n] ]^2 tels que dans l'exécution de
𝒜 sur e, e a a été comparé au moins une fois à
e_j .
c) Conclure.
a) Si S est un ensemble fini non vide de cardinal
Un tel graphe est dit connexe lorsque pour toute paire de sommets
Montrer que si (
b) Construire une entrée
c) Conclure.
I.B - Recherche systématique dans un tableau
Les éléments de
E sont à nouveau donnés non dassés dans un tableau
T .
I.B.1) On utilise l'algorithme suivant : en supposanti ≤ n/2 , on recherche le minimum du tableau, puis le deuxième plus petit élément, puis le troisième et ainsi de suite jusqu'au i-ème.
Calculer le nombre de comparaisons effectuées ; quel est son maximum lorsque i varie?
I.B.2) Indiquer un algorithmequi permettrait de résoudrele problème dela sélection pour un i quelconque enO(nlnn) comparaisons.
I.B.1) On utilise l'algorithme suivant : en supposant
Calculer le nombre de comparaisons effectuées ; quel est son maximum lorsque i varie?
I.B.2) Indiquer un algorithmequi permettrait de résoudrele problème dela sélection pour un i quelconque en
I.C - Tri rapide dans une liste chaînée
I.C.1) Écrire une fonction (ou une procédure) partition qui, étant donné une liste chaînée d'entiers liste, et un entier pivot (appartenant ou non à la liste) :
- constitue deux listes avant et apres constituées des éléments de liste et telles que :
∀(x, y) ∈ avantx apres,x ≤ pivot< y . - retourne les deux listes avant et apres, et le nombre d'éléments nb de la liste avant.
Les candidats rédigeant en Caml devront écrire une fonction de type:
partition : 'a liste 一>'a 一>'a list * 'a list * int = <fun>
partition : 'a liste 一>'a 一>'a list * 'a list * int = <fun>
Ceux rédigeant en Pascal utiliseront la déclaration de type
type
ptrliste=^element;
element=record
entier:integer;
suivant:ptrliste
end;
et ils écriront une procédure dédarée de la façon suivante:
procedure partition(liste:ptrliste; pivot:integer;
var avant,apres:ptrliste; var taille:integer);
I.C.2)
a) Écrire une fonction recherche récursive qui, pour un entier i et une liste d'entiers liste, retourne le i -ème élément de la liste
On utilisera la fonction/procédure partition précédente, en prenant comme pivot le premier élément de la liste. Les candidats ayant choisi Caml écriront une fonction de signature:
recherche : int一>'a list一>'a = <fun>
Ceux ayant choisi Pascal écriront une fonction déclarée:
fonction recherche (liste:ptrliste; i:integer) :integer;
b) J ustifier la terminaison et la correction de la fonction précédente.
c) Donner des indications sur son temps de calcul. On exhibera des «cas limites».
d) Si la distribution des entiers de E est uniforme dans un intervalle, comment choisir l'entier pivot pour réduire au mieux le temps de calcul ?
type
ptrliste=^element;
element=record
entier:integer;
suivant:ptrliste
end;
et ils écriront une procédure dédarée de la façon suivante:
procedure partition(liste:ptrliste; pivot:integer;
var avant,apres:ptrliste; var taille:integer);
I.C.2)
a) Écrire une fonction recherche récursive qui, pour un entier i et une liste d'entiers liste, retourne le i -ème élément de la liste
On utilisera la fonction/procédure partition précédente, en prenant comme pivot le premier élément de la liste. Les candidats ayant choisi Caml écriront une fonction de signature:
recherche : int一>'a list一>'a = <fun>
Ceux ayant choisi Pascal écriront une fonction déclarée:
fonction recherche (liste:ptrliste; i:integer) :integer;
b) J ustifier la terminaison et la correction de la fonction précédente.
c) Donner des indications sur son temps de calcul. On exhibera des «cas limites».
d) Si la distribution des entiers de E est uniforme dans un intervalle, comment choisir l'entier pivot pour réduire au mieux le temps de calcul ?
I.D - Recherche de l'élément médian
L' ensemble des éléments de
E est donné sous la forme d'un tableau
T d'entiers de Iongueur n indexé de 0 à
n − 1 . Dans cette partie du problème, on supposera pour simplifier que
n est une puissance de 2 . On pose
n = 2^p et
m = n/2 = 2^(p − 1) .
On suppose que les deux sous-tableauxT[0…m − 1] et
T[m…n − 1] sont triés par ordre croissant, donc que :
On suppose que les deux sous-tableaux
I.D.1)
a) En utilisant la fonction (supposée donnée) de fusion de deux tableaux triés, donner un algorithme déterminant le médianμ de
T .
b) Évaluer son temps de calcul (on prendra en compte seulement le nombre de comparaisons de deux éléments).
I.D.2) On veut améliorer la recherche précédente en effectuant une recherche dichotomique simultanée sur les deux moitiés du tableauT .
a) Expliquer (éventuellement à l'aide de schémas) une stratégie à adopter pour déterminer le médian deT .
b) Donner le code d'une telle fonction. On introduira une fonction récursive de la forme recherche_dicho (T, g1, d1, g2, t2 ).
a) En utilisant la fonction (supposée donnée) de fusion de deux tableaux triés, donner un algorithme déterminant le médian
b) Évaluer son temps de calcul (on prendra en compte seulement le nombre de comparaisons de deux éléments).
I.D.2) On veut améliorer la recherche précédente en effectuant une recherche dichotomique simultanée sur les deux moitiés du tableau
a) Expliquer (éventuellement à l'aide de schémas) une stratégie à adopter pour déterminer le médian de
b) Donner le code d'une telle fonction. On introduira une fonction récursive de la forme recherche_dicho (
On rappellequela taille du tableau initial est une puissancede 2.
c) Prouver la validité du programme précédent.
d) Donner un ordre de grandeur de son temps de calcul (on prendra en compte seulement le nombre de comparaisons de deux éléments).
c) Prouver la validité du programme précédent.
d) Donner un ordre de grandeur de son temps de calcul (on prendra en compte seulement le nombre de comparaisons de deux éléments).
I.E - Utilisation d'arbres binaires de recherche
Afin de pouvoir insérer puis rechercher rapidement n'importe quel élément del'ensemble E , on organise les données selon une structure d'arbres binaires de recherche. On utilisera les types suivants:
En Caml :
type arbre = vide | Noeud of Nd
and Nd = {valeur : int; mutable taille : int;
mutable gauche : arbre; mutable droit : arbre};;
En Pascal :
type
type
ptrNoeud=^Noeud;
Noeud = record
valeur, taille : integer;
gauche, droit : ptrNoeud;
end;
Chaque noeud N de la structure d'arbres binaires contient la valeur d'un entier de E , la taille (comptée en nombre de noeuds non vides) de l'arbre de racine N , et des pointeurs vers les deux fils.
I.E.1) Pour tester le fonctionnement du programme, on utilise des nombres entiers engendrés par un processus pseudo-aléatoire, qui sont rangés, l'un à la suite de l'autre, dans l'arbre binaire initial ement vide.
a) On considère la suite de nombres pseudo-aléatoires3; 4; 1; 2 . Donner un schéma de la structure de l'arbre binaire obtenu après insertion deces 4 éléments dans un arbreinitialement vide. Pour chaque noeud, on précisera la valeur de l'étiquette, et la taille.
b) Même question avec la séquence suivante:
I.E.1) Pour tester le fonctionnement du programme, on utilise des nombres entiers engendrés par un processus pseudo-aléatoire, qui sont rangés, l'un à la suite de l'autre, dans l'arbre binaire initial ement vide.
a) On considère la suite de nombres pseudo-aléatoires
b) Même question avec la séquence suivante:
I.E.2) Écrire une fonction (ou une procédure) insere, récursive, réalisant l'insertion d'un nouvel entier x dans l'arbre binaire a. Cette fonction/procédure devra retourner l'arbre dans lequel on a inséré l'entier x. Dans la mesure du possible, on modifiera les champs de l'arbre donné en paramètre, plutôt que d'en recréer un.
En Caml, la signature de insere sera:
insere : int -> arbre -> arbre = <fun>
En Pascal, la déclaration sera:
procedure insere (x:integer; var a : PtrNoeud)
I.E.3)
a) En supposant que l'arbre est bien équilibré (en un sens que l'on précisera), indiquer un ordre de grandeur du temps d'exécution de la fonction insere en fonction de la taille de l'arbre dans lequel on insère un nouvel élément.
b) Que se passe-t-il si l'arbre n'est pas équilibré ? Citer un cas où cela peut se produire.
I.E.4) Écrire une fonction recherche, récursive, déterminant lek -ème élément de l'ensemble des étiquettes d'un arbre binaire de recherche.
Si on appelle g la tailledu sous-arbregauche, on pourra considérer divers cas suivant la valeur deg par rapport à
k .
En Caml, on aura :
recherche : int→ arbre
→ int
= <fun>
Et en Pascal :
function recherche (k:integer; a:PtrNoeud):integer;
b) Que se passe-t-il si l'arbre n'est pas équilibré ? Citer un cas où cela peut se produire.
I.E.4) Écrire une fonction recherche, récursive, déterminant le
Si on appelle g la tailledu sous-arbregauche, on pourra considérer divers cas suivant la valeur de
En Caml, on aura :
recherche : int
Et en Pascal :
function recherche (k:integer; a:PtrNoeud):integer;
Partie II - Portes Iogiques universelles
Rappels - notations - définitions
-
ℬ désigne l'ensemble des booléens:ℬ = {0, 1} = { F aux, Vrai} avec l'analogie 0 = Faux et1 = Vrai . - Les fonctions logiques sont les applications de
ℬ^k dansℬ^n , aveck, n ∈ IN^∗ . - Les formules logiques sont construites à partir de variables, des connecteurs
∨ (ou) ,∧ (et),¬( non) &⊕ (ou exclusif), ainsi éventuellement que des constantes Vrai et Faux. - On rappellequ'à touteformule
φ construitesur les variables (v_1, …, v_n ), on associede façon naturel le unefonctionF_φ : ℬ^n → ℬ .
Réciproquement, sif est une application deℬ^k dansℬ , on sait qu'il existeune formuleφ construite avec les variables (v_1, …, v_k ) tellequef = F_φ . Il n'y a pas unicité deφ , mais on peut par exemple imposer àφ de n'utiliser que les connecteurs∧, ∨ et¬ . On dit quel'ensemble{∧, ∨ et¬ } est complet. - Présentons sommairement les circuits logiques : il s'agit d'assemblages orientés de portes logiques élémentaires disposant d'entrées et de sorties.
- Uneporte
(n, p) est constituéed'entrées(i_1, …, i_n) et desorties (o_1, …, o_p ); chaqueo_i prend une valeur fonction desi_j . Traditionnellement, les entrées sont repré sentées à gauche et les sorties à droite - On disposedes portes élémentaires suivantes : la porteNON est detype ( 1,1 ), avec
o_1 = ¬i_1 . Les portes OU, ET et XOR sont de type ( 2,1 ), aveco_1 = i_1 ∨ i_2 (resp.o_1 = i_1 ∧ i_2 eto_1 = i_1 ⊕ i_2 ).
.jpg)
Les portes élémentaires
- Chaque entrée de porte peut constituer une entrée du circuit global, ou bien être reliée à la sortie d'une autre porte, ou encore à une source, qui constitue une porte particulièresans entrée, avec une sortie constante égale à 0 ou 1 .
- Chaque sortie de porte peut constituer une sortie du circuit global, ou bien être reliéeà l'entréed'uneautreporte, ou encoreà un puits, qui est uneporteparticulière sans sortie, avec une entrée: en somme, il s'agit d'une sortie «dont on ne tiendra pas compte».
- L'assemblageest acycliqueau sens où en suivant I'orientation des portes, il n'existe pas de boucle dans le circuit.
- Les duplicateurs sont des portes particulières à une entrée
i_1 et deux sorties enO_1 etO_2 égales ài_1 . Ils sont représentés par un cerde plein. Les sources sont repré

Un duplicateur, une source de 1, et un puits. sentées par un carré et les puits par des cercles.
- Un circuit C avec n entrées
(i_1, …, i_n) et k sorties (o_1, …, o_k ) calcule de façon naturell e une fonctionF_C : ℬ^n → ℬ^k . Dans l'exemple qui suit,C_0 calcule la fonction(i_1, i_2) ↦ (¬i_1, i_1 ∧ i_2, (i_1 ∧ i_2) ∨ 0)
.jpg)
- Deux circuits seront dits équivalents lorsqu'ils cal culent la même fonction.
- Un ensemble E deportes sera dit universel Iorsquetout circuit est équivalent à un autre circuit constitué de portes de E, de duplicateurs, desources et de puits. Lorsque
E est réduit à un singleton{P} , on dit queP est une porteuniverselle - Enfin, uneporte
P detype (n, p ) sera diteréversiblelorsqu'il existeuneporteQ de type (p, n ) telle quel'assemblage constitué dela porteP suivie de la porteQ calculela fonction identitédeℬ^n . Par exemple, la porteNON est réversible (prendreQ = P ).
II.A - Donner deux formules logiques calculant les valeurs respectives deo_1, o_2 en fonction dei_1, i_2 eti_3 pour le circuitC_1 suivant:
.jpg)
II.B - Ensembles de portes universelles
II.B.1) Construire un circuit logique
C_2 permettant de calculer la fonction
On utilisera uniquement des duplicateurs, sources, portes NON, OU et ET.
II.B.2)
a) Montrer que l'ensemble de portes {NON, ET} est universel.
b) Exemple : construire un circuit équivalent àC_2 à l'aide des seules portes NON et ET , et de duplicateurs et sources.
II.B.3)
a) Montrer que l'ensemble de portes {XOR, OU } est universel.
b) Exemple: construire un circuit équivalent àC_0 à l'aide des seules portes XOR et OU , et de duplicateurs et sources.
II.B.4)
a) Montrer que la porteG_0 suivante est universelle:
b) Construire à partir deG_0 (et de duplicateurs, sources et puits) un circuit
C_3 calculant la fonction de
ℬ^3 dans
ℬ^2 :
II.B.2)
a) Montrer que l'ensemble de portes {NON, ET} est universel.
b) Exemple : construire un circuit équivalent à
II.B.3)
a) Montrer que l'ensemble de portes {XOR, OU } est universel.
b) Exemple: construire un circuit équivalent à
II.B.4)
a) Montrer que la porte
b) Construire à partir de

c) Montrer que la porte
II.C - Portes réversibles
II.C.1) Montrer quesi une porte logique (
n, p ) est réversible, alors
n ≤ p .
II.C.2) Quelles sont les portes(1, 1) réversibles?
II.C.3) Donner deux exemples simples mais non triviaux (i.e. dont les fonctions associées ne sont pas l'identité) de portes ( 2,2 ) réversibles.
II.C.4) Combien existe-t-il de portes(2, 2) réversibles? Et de portes (
n, p ) réversibles? (il s'agit bien sûr de portes non équivalentes...).
II.C.2) Quelles sont les portes
II.C.3) Donner deux exemples simples mais non triviaux (i.e. dont les fonctions associées ne sont pas l'identité) de portes ( 2,2 ) réversibles.
II.C.4) Combien existe-t-il de portes
II.D - Portes réversibles universelles
II.D.1) On se propose de montrer qu'il n'existe pas de porte (2, 2) réversible et universelle.
Soit G une porte réversible ( 2,2 ).
On note g la fonction deℬ^2 dans
ℬ^2 calculée par G .
a) Montrer queg est affine au sens suivant :
Soit G une porte réversible ( 2,2 ).
On note g la fonction de
a) Montrer que
où + désigne la somme dans
ℬ^2 (assimilé au groupe additif
V = (ℤ/2ℤ)^2 et 0 désigne
(0, 0) ). On pourra commencer par le cas où
i = i^′ , puis le cas où
i ou
i^′ vaut 0 .
On rappelle quesix ∈ V , on a
x + x = 0 , et quesi
x, y, z sont les trois éléments non nuls de V , alors
x = y + z .
b) Montrer que tout circuit (n, p ) construit à partir de G , de duplicateurs, sources et puits calcule une fonction affine de
ℬ^n dans
ℬ^p (pour la définition d'une fonction affine se reporter au II.D.1.a) en remplaçant
ℬ^2 par
ℬ^n ).
c) Conclure.
II.D.2) La porte de Toffoli est la porte logique(3, 3) suivante:
a) Montrer que la porte de Toffoli est réversible et universelle.
b) Vérifier que la fonction calculée par T n'est pas affine.
On rappelle quesi
b) Montrer que tout circuit (
c) Conclure.
II.D.2) La porte de Toffoli est la porte logique
a) Montrer que la porte de Toffoli est réversible et universelle.
b) Vérifier que la fonction calculée par T n'est pas affine.

Porte de Toffoli
Pas de description pour le moment
