Vous êtes sur la page 1sur 4

Université de Ghardaia 2020-2021

Département des Mathématiques et d’Informatique 31/01/2022


2ème Année Informatique (Semestre 3) Durée : 01H 30mn
Examen Final – corrigé type
Algorithmique et Structures de Données 3
 Les documents et téléphones portables sont interdits.

Exercice 1 : (3,50 points)


Supposons que nous implémentons une table de symboles (avec int keys et double values) en utilisant
un arbre binaire de recherche (Binary Search tree) avec le type de données suivant :

public class BinarySearchTree {


private Node root; // root of BST
private int n; // number of nodes in BST

private static class Node {


private Node left; // left subtree
private Node right; // right subtree
private int key; // symbol table key (clé)
private double value; // symbol table value (valeur)
}
...
}

En utilisant un modèle de coût mémoire 64-bits :


1. Calculer le nombre d’octets utilisé par un objet « Node », sachant qu’un objet interne requiert
un extra entête de 8 octets pour faire référence à l’instance qui le contient. (1.50 pts)
2. Calculer le nombre d’octets utilisé par un objet « BinarySearchTree» en fonction du nombre de
pairs clé-valeur. Comptez toute la mémoire référencée, y compris les clés et les valeurs. Utilisez
la notation tilde pour simplifier votre réponse (2.00 pts)

Solution
1. Le nombre d'octets d'un objet «Node» (1.50 points)
L'objet «Node» utilise 48 octets tel que illustré dans la figure suivante :

Node
16 Entête objet
8 Réf : left
8 Réf : right
4 Key
8 Value
4 Padding
48 octets

2. Un objet «BinarySearchTree» utilise 40 octets. Dans le cas où l'objet comporte pairs clé-valeur,
l'espace mémoire utilisé sera 32 + 48 n octets ~48n. (2.00 points)

BinarySearchTree
16 Entête objet
8 Réf : root
4 n

Page 1/4
4 Padding
32 octets

Exercice 2 : (08,50 points)


Soit deux listes chaînées ( L1 et L2) de nombres réels, les valeurs de chacune de ces listes sont
supposées triées par ordre croissant.

Écrire un algorithme (itératif) qui fusionne ces deux listes en une troisième liste (L3). Cette
troisième liste devra contenir exactement les valeurs des listes d’origine, et ces valeurs devront elles
aussi être triées par ordre croissant.

N.B. :

 La liste L3 doit utiliser les maillons des listes L1 et L2 (Elle ne doit pas créer de nouveaux maillons
pour les valeurs de L1 et L2) et
 Votre approche doit faire un seul parcours des deux listes L1 et L2.

Par exemple, la fusion de

L1 1.0 1.4 2.1 5.2 7.2 8.1 9.9

L2 2.0 2.2 2.5 2.9 3.9 4.8 5.2 6.0 7.7

Donnera

L3
1.0 1.4 2.0 2.1 2.2 2.5 2.9 3.9 4.8 5.2 5.2 6.0 7.2 7.7 8.1 9.9

Solution
Procedure Fusion (L1, L2 : pointeur, Variable L3 : Pointeur) 1 pt
Variable tail : pointeur
Procédure Insert_tail(Variable Tail : pointeur, p:pointeur) 1.25 pts
Début
Aff-Adr(tail, p)
Tail ← p
Fin

Début /* début fusion */


Allouer (L3)
Tail ← L3
Tantque (L1 <> nil et L2 <> nil) Faire 2.5 pts
Début
Si valeur(L1) <= valeur(L2) Alors
Début
Insert_tail(Tail, L1)
L1 ← Suivant(L1)
Fin
Sinon

Page 2/4
Début
Insert_tail(Tail, L2)
L2 ← Suivant(L2)
Fin
Fin
Si (L1 <> nil) Alors 1.25 pt
Insert_tail(Tail, L1)
Si (L2 <> nil) Alors 1.25 pt
Insert_tail(Tail, L2)
Tail ← L3
L3 ← Suivant(L3) 1.25 pt
Libérer(Tail)
Fin /* fin fusion */

Exercice 3 : (8.00 points)

1. Écrire un algorithme récursif . est un tableau de nombres réels


de taille , est la valeur recherchée, et sont des index sur le tableau . Dans l'appel initial
à votre algorithme, et .
2. Construire une relation de récurrence pour le temps d'exécution de votre algorithme récursif
.
3. Calculer la complexité de dans le cas où , en utilisant la
notation grand- .

Solution

1. un algorithme récursif

Fonction BinarySearch (A : Tableau[] de réel, v : réel, inf, sup : entier) : entier


Variable m : entier
Début
Si inf > sup Alors
BinarySearch ← -1 1.25 pts
Sinon
Début
m ← (inf + sup) div 2
Si A[m] = v Alors 1.25 pts
BinarySearch ← m
Sinon
Si (A[m] < v) Alors 1.25 pts
BinarySearch ← BinarySearch(A, v, m+1, sup)
Sinon
BinarySearch ← BinarySearch(A, v, inf, m-1) 1.25 pts
Fin
Fin

2. Construire une relation de récurrence pour le temps d'exécution de votre algorithme récursif
.

Page 3/4
1.5 pts

3. Calculer la complexité de dans le cas où , en utilisant la


notation grand- . 1.5 pts

.
.
.

Donc

Bon courage

Page 4/4

Vous aimerez peut-être aussi