Post on 29-Dec-2015
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
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 :
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.
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)
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),
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
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
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
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