CorrectionParties Epreuve Commune 2012(1)

9
CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012) Epreuve de Sciences et Techniques Informatiques (19/07/2012) Page 1 sur 9 Partie I (80 pts) Exercice 1 : (5 pts) Est-il possible d’inverser les valeurs de deux variables u et v sans faire appel à une troisième variable ? Si oui, expliquez comment faire. Réponse : OUI si numérique Si OUI, procédure d’inversion : u u + v //u contient u + v, v contient v v u v //u contient u + v, v contient u u u v //u contient v, v contient u Exercice 2 : (10 pts) L’opération de suppression dans un arbre binaire de recherche est-elle commutative dans le sens où la suppression de x puis de y dans un arbre binaire de recherche produit le même arbre que la suppression de y puis de x. Si oui alors justifiez brièvement votre réponse. Si non alors donnez un contre-exemple illustratif. Non l’opération de suppression dans un ABR n’est pas commutative. Voici un contre-exemple : 5 2 1 4 3 5 2 4 3 5 4 3 5 2 1 4 3 5 3 1 4 5 3 4 Supprimer 2 Supprimer 1 Supprimer 1 Supprimer 2

Transcript of CorrectionParties Epreuve Commune 2012(1)

Page 1: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 1 sur 9

Partie I (80 pts)

Exercice 1 : (5 pts)

Est-il possible d’inverser les valeurs de deux variables u et v sans faire appel à une troisième variable ? Si oui, expliquez

comment faire.

Réponse : OUI si numérique

Si OUI, procédure d’inversion :

u ← u + v //u contient u + v, v contient v

v ← u − v //u contient u + v, v contient u

u ← u − v //u contient v, v contient u

Exercice 2 : (10 pts)

L’opération de suppression dans un arbre binaire de recherche est-elle commutative dans le sens où la suppression de x puis

de y dans un arbre binaire de recherche produit le même arbre que la suppression de y puis de x. Si oui alors justifiez

brièvement votre réponse. Si non alors donnez un contre-exemple illustratif.

Non l’opération de suppression dans un ABR n’est pas commutative.

Voici un contre-exemple :

5

2

1 4

3

5

2

4

3

5

4

3

5

2

1 4

3

5

3

1 4

5

3

4

Supprimer 2 Supprimer 1

Supprimer 1 Supprimer 2

Page 2: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 2 sur 9

Exercice 3 : (35 pts)

La linéarisation d’un arbre binaire consiste à représenter l’arbre par une liste. Parmi les méthodes de linéarisation qui

existent nous présentons ici une méthode qui se base sur le principe suivant : il s’agit de ranger les informations attachées

aux nœuds dans l’ordre d’un parcours préfixé et d’associer, à chaque information, les indicateurs suivants :

- le sous-arbre gauche (SAG) prend la valeur vrai si et seulement si le SAG n’est pas vide,

- le sous-arbre droit (SAD) prend la valeur vrai si et seulement si le SAD n’est pas vide.

Ainsi nous pouvons définir une liste d’enregistrements, composés de trois champs:

- Un champ indicateur fils gauche de type booléen : FG (V / F)

- Un champ information : INFO

- Un champ indicateur fils droit de type booléen : FD (V / F)

Par exemple la linéarisation de l’arbre binaire suivant donne la liste ci-dessous :

1) Pour un nœud de rang k le rang de son fils gauche, s’il existe, est k+1. Par exemple le fils gauche du nœud contenant

l’info 11 ayant comme rang k = 5 est le nœud contenant l’info 18 ayant comme rang k+1 = 6. Expliquez brièvement

ce résultat.

Le parcours préfixé est un parcours Racine-FilsGauche-FilsDroit donc dans le tableau de linéarisation la position du

fils gauche est immédiatement après la position de son père. (10 pts)

2) Ecrire un algorithme qui permet de renvoyer le rang du fils droit d’un nœud de rang k. Voici l’entête de l’algorithme à

écrire : Algorithme rangFilsDroit (Tab[0..n], k) R

// avec n le nombre de nœuds dans l’arbre binaire et k l’indice dans Tab du nœud pour lequel on cherche le

// rang du fils droit R. Tab[i].FG et Tab[i].FD désigne un booléen indiquant l’existence de fils gauche et de fils

// droit respectivement

Remarque :

Page 3: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 3 sur 9

Afin d’écrire votre algorithme utilisez un pseudo langage algorithmique inspiré de la syntaxe des langages de programmation comme C

et Pascal :

- FOR (indice ← valeur_début ) TO valeur_fin DO (suite_actions) END FOR

- WHILE (condition) DO (actions) END WHILE

- IF (condition) THEN (suite_actions1) ELSE (suite_actions2) END IF

- Affectation : x ← y

- Opérateurs logiques : OR, AND, NOT

- Opérateurs arithmétiques et de comparaisons : +, -, *, /, >, <, >=, <=, <> (différent), = (test d’égalité), etc.

Algorithme rangFilsDroit (Tab[0..n], k) R (25 pts)

// avec n le nombre de nœuds dans l’arbre binaire et k l’indice dans Tab du nœud pour lequel on cherche le

//rang du fils droit R. Tab[i].FG et Tab[i].FD désigne un booléen indiquant l’existence de fils gauche et fils

// droit respectivement

Début

i k

IF (NOT T[i].FD)

THEN return 0

ELSE

IF T[i].FG

THEN j 2 // FG+FD

ELSE j 1 // FD

END IF

WHILE (j > 1) DO

i i+1

j j – 1

// le j qu’on a traité

IF (T[i].FG) THEN j j+1

END IF

IF (T[i].FD) THEN j j+1

END IF

END WHILE

return (i+1)

END IF

Fin

Remarque : Une solution récursive est possible aussi.

Page 4: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 4 sur 9

Exercice 4 : (10 pts)

Soit ABR100 un arbre binaire de recherche qui contient l’ensemble des entiers entre 1 et 100. Nous cherchons l’élément 36

dans ABR100. Quelle(s) est (sont) la (les) séquence(s) qui ne peut (peuvent) pas correspondre à une branche de recherche

des nœuds examinés pour trouver 36 ? Argumentez brièvement votre réponse.

Séquence 1 : 2, 25, 40, 39, 33, 34, 36

Séquence 2 : 92, 22, 91, 24, 89, 25, 36

Séquence 3 : 90, 30, 80, 40, 32, 24, 36

La séquence 3 ne pas correspondre à une branche de recherche des nœuds examiner pour trouver 36 car selon la suite de cette séquence

on constate que la sixième valeur 24 est localisée à droite de l’élément 30. Or, 24 < 30.

Exercice 5 : (10 pts)

Décrire l’idée principale d’un algorithme qui permet de calculer la différence entre le plus grand et le plus petit élément

d’un arbre binaire de recherche d’entiers (ne pas écrire l’algorithme).

Dans un ABR on a : (5 pts)

- Le plus petit élément se trouve dans le nœud le plus à gauche

- Le plus grand élément se trouve dans le nœud le plus à droite

Il suffit de parcourir à partir de la racine de l’ABR en suivant les liens à gauche et récupérer le plus petit élément puis parcourir à partir

de la racine de l’ABR en suivant les liens à droite et récupérer le plus grand élément (5 pts)

Exercice 6 : (10 pts)

On cherche à trier un tableau de n entiers dont seulement p éléments ne sont pas à leur place (si on retire ces p éléments,

les n- p restants sont bien dans l’ordre). Quelle est la complexité au pire des cas d’un tri par insertion sur un tel tableau ?

Justifiez votre réponse.

La complexité du tri insertion quand seulement p éléments ne sont pas à leurs places dans le pire des cas est en

O(pn). (5 pts)

Le tri insertion consiste à exécuter n-1 itérations où à chaque itération, on cherche à insérer le jème

élément (j=2 à

n) dans le sous tableau déjà trié T[1..j-1]. Si le jème

élément n’est pas à sa place alors pour l’insérer il faut décaler

au plus (j-1) éléments, c'est-à-dire, l’insérer dans la première case du tableau. L’insertion d’un élément mal placé

qui se trouve à la jème

position du tableau est en O(j), or j<n et le nombre des éléments mal placés est p alors

l’insertion des p éléments mal placés est en O(np) Si le jième

éléments est un élément à sa place, donc pour

l’insérer il faut faire au plus p décalages parce que parmi les (j-1) éléments dans le sous-tableau trié T[1..j-1], il y

a au plus p éléments qui ne sont pas à leurs places, donc le coût d’insertion d’un élément parmi les (n-p) qui sont

bien dans l’ordre est en O(p), d’où le coût d’insertion des (n-p) éléments qui ne sont dans l’ordre est en O((n-p)p)

D’où la complexité est en O(np). (5 pts)

Page 5: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 5 sur 9

Partie II (60 pts)

Exercice 1 : (20 pts)

Le Local IR dont dépend votre entreprise vient de vous attribuer l'adresse IP 214.123.155.0. Vous devez créer 10 sous-réseaux distincts

pour les 10 succursales de l'entreprise, à partir de cette adresse IP.

1) Quel est la classe de ce réseau ? (4 pts)

classe C

2) Quel masque de sous-réseau doit-on utiliser ? (5 pts)

Pour créer 10 sous réseaux on a besoin de 4 bits donc le masque est 255.255.255.240

3) Combien d'adresses IP (machines ou routeurs) pourra recevoir chaque sous-réseau ? (5 pts)

La partie host ID est sur 4 bits donc chaque sous réseau pourra recevoir (2**4) - 2 = 14 adresses. Le – 2 pour ne pas considérer

les adresses de réseau et de diffusion.

4) Quelle est l'adresse réseau et de broadcast du 2eme sous-réseau utilisable ? (2 x 3 pts)

214.123.155.16 adresse du 2ième

sous réseau

214.123.155.31 adresse de broadcast

Exercice 2 : (10 pts)

Une machine TCP envoie des données avec une taille de fenêtre de congestion maximale (216 octets) sur un canal de 45 Mb/s et un

délai aller-retour de 50 ms.

1) Quel est le débit maximum qu’on puisse atteindre ? (3 pts)

TCP peut transmettre le contenu d’une fenêtre par RTT, donc le débit maximum atteignable est de D = 216 octets / 50 ms = n

2) Quelle est l’utilisation du canal ? (4 pts)

L’utilisation maximum est donc limitée à U = n Mb/s / 45 Mb/S = … = … %

3) Quelle est la taille de fenêtre nécessaire pour exploiter le lien à 100%? (3 pts)

W=RTT*C = (50 x 0.001 x 45 x 10**6 ) /8 octets

Exercice 3 : (30 pts)

Dans cet exercice nous cherchons à spécifier un protocole de niveau transport que nous appellerons LTP « Light Transport Protocol ».

Le tableau suivant décrit les différentes primitives de services fournies et les TPDU envoyées et conséquentes à ces primitives.

Primitive de service TPDU envoyée (abréviation) Signification

Listen Aucune Se bloquer en attente d’une demande de connexion

(attente passive)

Connect CONNECTION REQUEST (CR) Demande d’ouverture d’une connexion (active)

Send DATA (DT) Envoi de données

Receive Aucune Réception de données

Disconnect DISCONNECT REQUEST(DR) Demande de déconnection d’un coté

L’établissement d’une connexion se réalise à travers l’échange de deux TPDU (2 way handshake). A cet effet un CR est envoyé à la

suite d’une demande d’ouverture (active) d’une connexion et en réponse :

- si le récepteur est en attente d’une demande de connexion (il a déjà effectué Listen), l’entité LTP réceptrice accepte la

connexion et renvoie une TPDU CONNECTION ACCEPTED (CA),

Page 6: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 6 sur 9

- sinon l’entité LTP réceptrice refuse la connexion et renvoie une TPDU DR,

Une fois la connexion est établie, les deux côtés peuvent émettre et recevoir des données.

La fermeture de connexion est symétrique, il faut que des deux côtés soit invoquée la primitive Disconnect. Tant que d’un côté on n’a

pas invoqué cette primitive il est possible d’envoyer des données. Si la primitive Disconnect a été invoquée, tant que la TPDU DR n’a

pas été encore reçue il est possible de recevoir des données. Une connexion en cours d’établissement ne peut pas être fermée. Une

collision de fermeture est possible, celle-ci correspond au cas où les deux côtés ont décidé de fermer la connexion avant d’avoir reçu

une DR, la connexion est alors fermée.

L’automate régissant le protocole LTP prévoit les états suivants :

- IDLE : la connexion est libre, aucune action n’a été entreprise pour entamer son établissement,

- PASSIVE ESTABLISHMENT PENDING : ouverture passive, la primitive Listen a été invoquée (localement),

- ACTIVE ESTABLISHMENT PENDING : ouverture active, la primitive Connect a été invoquée (localement),

- ESTABLISHED : la connexion est établie, il est possible d’échanger des données dans les deux sens,

- PASSIVE DISCONNECT PENDING : réception d’un DR, l’entité distante cherche à fermer la connexion mais l’entité locale a

toujours la possibilité d’émettre des données (DT),

- ACTIVE DISCONNECT PENDING : la primitive Disconnect a été invoquée (localement).

Dans la suite de l’exercice nous allons poursuivre l’élaboration de l’automate en cherchant à déterminer les limites du protocole LTP.

1) Dans cette question nous nous intéressons à la phase d’ouverture d’une connexion.

a. Représentez sur la figure ci-dessous les transitions nécessaires permettant d’aboutir à une ouverture de

connexion. (3 pts)

(voir figure)

b. Représentez sur la figure ci-dessous les transitions conséquentes à un refus (échec) de connexion. (3 pts)

(voir figure)

c. Que se passe-t-il si l’entité LTP appelée ne fonctionne pas ? Que faut-il prévoir de plus côté appelant ? (3

pts)

L’appelant reste bloqué indéfiniment en attente d’une réponse. Prévoir un time out

d. Décrivez le problème qui se pose lorsqu’une CR délayée (doublon) arrive. Est-ce qu’il suffit de prévoir un

protocole « 3 way handshake » pour résoudre le problème ? Justifier votre réponse. (3 pts)

Etablissement de la connexion d’un seul côté (côté appelé) sans que l’appelant ne le demande

Non, car le 3ième

message peut lui aussi être un doublon

2) Dans cette question nous nous intéressons à la phase de transfert de données. Aucun des deux côtés n’invoque la primitive

Disconnect.

a. Représentez sur la figure ci-dessous les transitions nécessaires permettant de réaliser les échanges de

données. (3 pts)

(voir figure)

b. Que faut-il prévoir de plus pour remédier au problème de perte d’un DT ? Décrivez tous les éléments de

procédures qu’il faut prévoir dans cette solution. (3 pts)

Numérotation des segments + ACK + Time out

Page 7: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 7 sur 9

IDLE

ESTABLISHED

PASSIVE

ESTABLISHMENT

PENDING

ACTIVE

ESTABLISHMENT

PENDING

PASSIVE

DISCONNECT

PENDING

ACTIVE

DISCONNECT

PENDING

c. Quelles sont les autres critiques que vous pouvez encore porter à ce protocole ? Pour répondre à cette

question, pensez aux différents éléments de protocoles (mécanismes) que nous pourrions rajouter. (3 pts)

Les doublons

Le séquencement

Gestion de plusieurs connexions et multiplexage

Contrôle de flux

Inactivité

3) Dans cette question nous nous intéressons à la phase de fermeture d’une connexion. On suppose qu’aucune DR délayée

(doublon) ne risque de se manifester.

a. Représentez sur la figure ci-dessous les différentes transitions possibles lors d’une fermeture de connexion

(prévoyez les différents cas possibles). (3 pts)

(voir figure)

b. Que se passe-t-il si une DR envoyée est perdue ? Comment pouvez remédier à ce problème ? Prévoyez

aussi le cas où l’entité LTP distante n’est plus fonctionnelle (3 pts)

La connexion restera établie indéfiniment (Time out + retransmission du DR) un certain nombre de fois

c. Est-ce qu’avec la solution préconisée en 3.b, vous garantissez qu’une entité LTP, d’un côté d’une

connexion, puisse déterminer si de l’autre côté de la connexion, la primitive Disconnect a été bien invoquée

ou non (avant toute fermeture de la connexion) ? Justifiez votre réponse. (3 pts)

Non il n’existe pas de solutions à ce problème

Page 8: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 8 sur 9

Partie III

Exercice 1 : Programme client :

Valeur Consulter (Clé c) {

val = ConsulterLocalement (c) ; 3 points

if (val != null) return val ; 2 points m.fonction = consulter ;

m.clé = c ;

m.port = portclient ;

EnvoyerMsg (portserveur, m) ;

m = RecevoirMsg (portclient) ;

ModifierLocalement (c, m.valeur) ; Emplacement : 2 points

Paramètres + ordre : 2 points

Paramètres : 1 point return m.valeur ;

}

void Modifier (Clé c, Valeur v) {

ModifierLocalement (c, v) ; Emplacement : 2 points

Paramètres + ordre : 2 points

Paramètres : 1 point m.fonction = modifier ;

m.clé = c ;

m.valeur = v ;

EnvoyerMsg (portserveur, m) ;

}

void cohérence () {

while (1) { Boucle infinie : 4 points

m = RecevoirMsg (portcohérence) ; 4 points

ModifierLocalement (m.clé, null) ; Emplacement : 2 points

Paramètres + ordre : 2 points

Paramètres : 1 point

} }

Programme serveur :

while (1) {

m = RecevoirMsg (portserveur) ;

switch (m.fonction) {

case consulter :

m1.valeur = ConsulterLocalement (m.clé) ;

EnvoyerMsg (m.port, m1) ;

Add (listeclient[m.clé], m.port) ; Emplacement : 2 points

Paramètres + ordre : 2 points

Paramètres : 1 point break ;

case modifier :

ModifierLocalement (m.clé, m.valeur) ;

foreach port in listeclient Boucle : 2 points

EnvoyerMsg (port, m) ; Emplacement : 1 point

Paramètres : 1 point

Page 9: CorrectionParties Epreuve Commune 2012(1)

CONCOURS DE RECRUTEMENT DES TECHNOLOGUES (Session 2012)

Epreuve de Sciences et Techniques Informatiques (19/07/2012)

Page 9 sur 9

listeclient[m.clé] = null ; 2 points

1 point existe mais écrite de manière différente break ;

}

}

Exercice 2 : Question 1 :

Client A fait appel au serveur B - Zéro point

Client A fait appel au SERVEUR_NAME - 3 points

Client A fait appel à un intermédiaire 3 points + justification 2 points (Le client ne connais pas le SERVEUR_NAME)

Question 2 :

1. Appel au SERVEUR_NAME 2 points 2. SERVEUR_NAME fournit l’@ de B 2 points 3. Client A fait appel à B 2 points 4. Détails (talon, intermédiaire, local, distant) 1 point

Question 3 :

1. Diffusion vers les sites S1, S2, et S3 3 points 2. Un site fournit l’@ de B 2 points 3. Client A fait appel à B 2 points 4. Détails (talon, intermédiaire, local, distant) 1 point

Question 4 :

Garder localement l’@ du serveur 5 points