Algorithmique & Programmation, période 1
Alternants première année 2015 – 2016
Durée : 3 heures.
Documents : tous documents papier autorisés.
Le barème est indicatif, sur 20 points. Les deux exercices sont indépendants.
La rédaction de vos réponses devra contenir des commentaires et des explications pertinentes.
Merci d’utiliser la syntaxe introduite en cours pour écrire le code.
Tableaux binomiaux (10 points)
Soit Tun tableau trd’entiers, de taille net de capacité K >> n. Autrement dit, Ta été alloué avec Kcases
mémoire, mais seulement les npremières sont remplies.
On note k=blog2(n+ 1)c+ 1, où bxcdésigne la partie entière inférieure de x. On note également {ni, i =
0. . . k 1}les bits de la décomposition en base 2de n. On a donc n=
k1
X
i=0
ni2i, et i[0, k 1], ni= 0 ou 1.
Question 1 (0.5 point). Rappeler le coût en pire cas, en nombre de comparaisons, de la recherche d’un élément
dans T. Quel est le coût en pire cas de l’insertion d’un élément ?
Lobjectif de l’exercice est d’utiliser une autre structure de données, qui permettra une insertion avec un coût
plus faible, sans trop perdre pour la recherche si possible. Pour cela, on va stocker les néléments de Tdans
kplus petits tableaux T0, . . . , Tk1. Pour tout i, le tableau Tiest de taille 2isi ni= 1. Il est vide (c’est-à-dire
n’existe pas) si ni= 0. Comme T, chaque tableau Tiest trié. Cependant, il n’y a pas d’ordre entre deux tableaux.
Exemple : pour un T=[1234567891011], une solution possible est constituée de T0= [5],T1= [3 9],T2
vide et T3=[1246781011].
Question 2 (0.5 point) Donner une solution {T0, . . . , Tk1}pour T=[123456789101112].
Question 3 (2 points) Ecrire un algorithme de recherche d’un élément dans l’ensemble T={T0, . . . , Tk1}.
On suppose que cet ensemble Test représenté par une liste doublement chaînée de pointeurs vers les tableaux
Ti.
Question 4 (1 point) Donner le coût en pire cas (toujours en nombre de comparaisons) de votre algorithme.
Question 5 (0.5 point) Expliquer ce qui se passe pour les niquand on incrémente nde 1.
Question 6 (2 points) En déduire un algorithme d’insertion d’un élément dans T. Ecrivez-le avec soin.
Question 7 (0.5 point) Soit Taet Tbdeux tableaux triés de tailles respectives aet b. Donner le coût en pire cas
de la création d’un tableau trde taille a+bcontenant tous les éléments de Taet de Tb.
Question 8 (0.5 point) En déduire le coût en pire cas de l’algorithme d’insertion.
On va maintenant s’intéresser au coût amorti de cet algorithme.
Question 9 (1 point) Pour ivariant de 0à7, donner le coût exact de l’insertion d’un élément dans un ensemble
Tde taille i.
Question 10 (1.5 point) En déduire le coût total d’insertion de méléments dans un ensemble Tinitialement
vide, avec mune puissance de 2:m= 2j. En déduire le coût amorti de l’algorithme d’insertion.
1
Arbres de décision (10 points)
Les arbres de décisions permettent de caractériser une classe d’algorithmes de tris : les algos de tris par comparai-
son séquentiels et déterministes. Cela correspond grosso-modo aux programmes de tri qu’on peut écrire dans les
langages impératifs standards, et en ne faisant que l’hypothèse d’une fonction de préordre <sur les éléments
à trier.
Plus précisément, un algorithme donné correspond à un ensemble d’arbres de décision, dans lequel chaque
arbre de décision représente les suites de comparaisons effectuées par l’algorithme lorsque la séquence en entrée
a une taille fixée n. Étant donné le caractère séquentiel et déterministe des algos considérés, ces suites ont une
structure d’arbre.
Définition 1 (Arbre de décision) Soit Σun ensemble fini à néléments appelé alphabet. Un arbre de décision sur
Σest un arbre binaire, dont :
chaque nœud interne est étiqueté “a?b” avec aet bdans Σ; un tel nœud représente une comparaison effectuée par
l’algorithme entre deux éléments de nom aet bdans la séquence d’entrée.
chaque feuille est étiquetée
soit par une permutation des éléments de Σ, quon note ha1, a2, . . . , anipour signifier a1< a2, etc. (cette
permutation correspond donc à la permutation appliquée par l’algorithme pour trier la séquence en entrée.)
soit étiquetée par un symbole spécial qui représente du code de l’algorithme qui n’est jamais exécuté. 1
Pour une séquence d’entrée donnée (qui associe à chaque élément de Σune valeur concrète), l’exécution de
l’algorithme de tri représenté par l’arbre de décision, doit correspondre exactement à un chemin entre la racine
et une feuille-permutation dans l’arbre. La figure 1 illustre par exemple le déroulement d’un algorithme de tri
par insertion sur un ensemble de trois éléments Σ = {a, b, c}. Si on prend par exemple a= 27,b= 42 et c= 5,
l’algorithme va suivre le chemin surligné en rouge.
Figure 1 – Arbre de décision sur Σ = {a, b, c}pour un algorithme de tri par insertion.
Dans cet exercice, on va montrer grâce aux arbres de décision qu’un algorithme de tri par comparaison séquen-
tiel et déterministe d’un ensemble de néléments doit effectuer au moins de l’ordre de nlog ncomparaisons
dans le pire cas.
Question 11 (1 point) Décrire le fonctionnement de l’algorithme de tri codé en Ada Figure 2. A quel algo-
rithme de tri de tableau connu ressemble-t-il ?
Question 12 (0.5 point) Dessiner l’arbre de décision sur Σ = {A, B, C}associé à l’algorithme de tri donné en
Figure 2.
1. On peut donc ainsi représenter des algorithmes qui font des tests superflus.
2
1type Sequen ce is ar ray ( Po sitive range < >) of Ele ment ;
2
3pro ced ure TriMys tere (T: in out Sequence ) is
4I: Integer; E: Element ;
5Fi ni : Boolean := True ;
6begin
7K in T ’ First .. T ’ Last -1 loop
8T (K +1) < T (K ) then
9Fini := False ;
10 E := T(K) ;
11 T (K ) := T (K + 1) ;
12 T (K +1) := E ;
13 end ;
14 end loop ;
15
16 Fini then
17 ;
18 end ;
19
20 K in reverse T’ Fir st .. T ’ Last -2 loop
21 E := T ( K) ;
22 I := K +1 ;
23 T(I) < E loop
24 T(I -1) := T(I);
25 I := I +1 ;
26 end loop ;
27 T(I -1) := E;
28 end loop ;
29 end ;
Figure 2 – Tri mystère.
Question 13 (1.5 point) Soit Tun tableau contenant néléments, avec nfixé. Proposer un type DecisionTree
qui permet de coder un arbre de décision associé à un certain algorithme de tri par comparaison séquentiel et
déterministe sur T. Justifier vos choix.
Question 14 (1.5 point) Ecrire une fonction Execute() qui parcourt un arbre de décision (supposé construit)
Aet renvoie le tableau trié correspondant aux valeurs stockées dans T.
Question 15 (1 point) Quelle est la plus petite profondeur possible pour une feuille dans un arbre de décision
sur un alphabet à néléments ? En déduire un coût en meilleur cas pour tout algorithme de tri par comparaison
séquentiel et déterministe.
Question 16 (0.5 point) Combien de feuilles doit au moins posséder l’arbre de décision associé à un algorithme
de tri par comparaison séquentiel et déterministe ? On rappelle que le nombre de permutations d’un ensemble
ànéléments est n!.
Question 17 (2 points) En déduire que tout algorithme de tri par comparaison séquentiel et déterministe d’un
ensemble de néléments nécessite Ω(nlog n)comparaisons dans le cas le pire. On rappelle la formule de Stirling :
n!2πn(n
e)n
avec ela constante d’Euler (i.e. la base du logarithme népérien).
Question 18 (1 point) Démontrer qu’il n’existe pas d’algorithme de tri par comparaison séquentiel et déter-
ministe qui fonctionne en temps linéaire pour la moitié des configurations possibles sur néléments.
Question 19 (1 point) Qu’en est-il pour une fraction 1/n des configurations ? Pour une fraction 1/2n?
3
1 / 3 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 !