1 / 4
Algorithmes et Structure de données Gilles Falquet
Questions d’examen
Arbres
Ecrire une procédure qui calcule la somme des valeurs contenues dans les noeuds d’un arbre
ternaire (au plus trois descendants pour chaque noeud).
On suppose que le type Arbre possède les méthodes suivantes :
a.estVide() : retourne vrai si a est un arbre vide et faux sinon
a.enfant(i) : retourne l’arbre qui est le i-ème enfant de a (i compris entre 1 et 3)
a.valeur() : retourne la valeur de la racine de a
Indications : écrivez la procédure en vous basant sur la procédure de parcours en profondeur.
Arbres
Ecrivez une procédure qui affiche toutes les valeurs qui se trouvent sur des noeuds feuilles d’un
arbre.
Rappel: un noeud feuille d’un arbre est un noeud qui n’a pas de descendants.
On suppose que le type Arbre possède les méthodes suivantes :
a.estVide() : retourne vrai si a est un arbre vide et faux sinon
a.enfant(i) : retourne l’arbre qui est le i-ème enfant de a
a.valeur() : retourne la valeur de la racine de a, de type Val
a.nbDesc() : retourne le nombre de descendants du noeud a.
On suppose de plus qu’on a une méthode affiche() qui permet d’afficher une valeur de type Val.
Indications : écrivez la procédure en vous basant sur la procédure de parcours en profondeur.
Hachage
Pour stocker un ensemble de nombres entiers on choisit comme structures de données une table
de hachage ouvert de 100 éléments avec comme fonction de hachage h(x) = x modulo 100
On considère deux situations
a) on stocke 1000 nombres tirés au hasard
- quelle sera la taille moyenne des sous-listes ?
2 / 4
- quelle sera la complexité en temps pour tester si un nombre appartient à l’ensemble (ordre de
grandeur du nombre d’opérations nécessaires) ?
b) on stocke l’ensemble composé des 1000 nombres {101, 201, 301, …, 99901, 100001}
- quelle sera la taille de la plus grande sous-liste ?
- quelle sera la complexité en temps pour tester si un nombre de la forme xxx01 (100k+1) ap-
partient à l’ensemble (nombre d’opérations nécessaires) ?
Hachage et arbres binaires
Dans une application on doit gérer un ensemble d’objets (par exemple des chaînes de caractè-
res). On décide d’étudier deux solutions pour implémenter cet ensemble
Solution 1 : un arbre binaire de recherche
Solution 2 : le hachage ouvert avec une table de taille 1000
1) Quelle sera la solution qui permettra de tester le plus rapidement si un objet appartient à l’en-
semble ?
a) Dans le cas où l’ensemble est de taille 500
b) Dans le cas où l’ensemble est de taille 14000
c) Dans le cas où l’ensemble est de taille 100000
2) Pouvez-vous trouver un critère général pour décider de quelle solution utiliser en fonction de
la taille N de l’ensemble à représenter ?
Nombres réels
On considère que l’algorithme ci-dessous travaille sur des nombres réels correspondant au
standard IEEE-754 (erreur relative de l’ordre de 10–7).
Que vaudra w à la fin de l’exécution de cet algorithme ?
w 1000000.0; p 0.001;
pour i = 1 à 1000000 {
w w + p;
}
Justifiez brièvement votre réponse.
Nombres réels
Soit l’algorithme suivant :
fonction f ( réel x, entier n) {
réel r 0;
pour ( i de 1 à n) r r + x;
3 / 4
retourner r;
}
1) Que calcule cet algorithme (en théorie) ?
2) Si l’on traduit l’algorithme dans un langage réel (par exemple en C ou en Java) et qu’on l’exé-
cute sur une machine où la représentation des réels se fait selon le standard IEEE 754 en simple
précision, on obtient les résultats suivants :
a) Expliquez pourquoi il y a une différence entre f(x, n) et le résultat théorique (1.0).
b) Expliquez pourquoi les deux derniers résultats (0.25 et 0.03125) sont aussi éloignés de la va-
leur théorique.
Nombres entiers
On considère que les nombres entiers utilisent 8 bits, en complément à 2 (ils vont donc de –128
à +127) et avec une arithmétique modulaire.
Que vaudra alors la variable r à la fin de l’exécution de l’algorithme suivant
r 0
pour i = 1 à 8 {
r r + 32
}
Ecriture d’algorithme
On a un tableau t qui contient des nombres entiers positifs, nuls ou négatifs, placés dans un ordre
quelconque. Ecrivez un algorithme qui déplace les éléments du tableau de telle manière que tous
les nombres négatifs se trouvent (dans n’importe quel ordre) avant les nombres nuls ou positifs.
En termes formels, après l’exécution de l’algorithme t doit satisfaire la contrainte
Pour tout i et j compris dans les indices de t et tels que i < j
x n f(x, n)
0.1 10 1.0000001
0.01 100 0.99999934
0.001 1000 0.9999907
0.00001 100000 1.0009902
0.0000001 10000000 1.0647675
0.00000001 100000000 0.25
0.000000001 1000000000 0.03125
4 / 4
si t[j] < 0 alors t[i] < 0
Par exemple, si t contient (6, -1, 4, 6, -8, 0, -9, 2) au début, après l’exécution de l’algorithme il
pourra contenir (-1, -9, -8, 6, 6, 4, 0, 2) ou (-9, -1, -8, 0, 4, 2, 6, 6) ou ...(plusieurs solutions pos-
sibles)
Ecriture d’algorithme
On a une liste L qui contient des nombres entiers positifs, nuls ou négatifs. Ecrivez un algorith-
me qui compte le nombre de sous-listes triées dans L. Une sous-liste est triée si ses éléments
sont rangés en ordre croissant ou décroissant.
Par exemple, la liste (-8, 3, 10, 5, 4, 4, 0, 1, 0, 4, 8, 9, 11, -11) contient les 6 sous-listes triées (-
8, 3, 10), (10, 5, 4, 4, 0), (0, 1), (1, 0), (0, 4, 8, 9, 11), (11, -11). Ce qu’on peut voir sur la repré-
sentation graphique ci-dessous.
On suppose que le type Liste possède les méthodes suivantes :
s.element(i) l’élément à la position i dans s (première position = 0)
s.indice(f) position du premier élément égal à f
s.longueur() nombre d’éléments dans s
-15
-10
-5
0
5
10
15
123456789
10
11 12
13
14
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !