INF4705 Analyse et conception d’algorithmes, Contrôle périodique 1
ECOLE POLYTECHNIQUE DE MONTREAL
Département de génie informatique et génie logiciel
Cours INF4705: Analyse et conception d’algorithmes (Hiver 2016)
3 crédits (3-1.5-4.5)
CORRIGÉ DU CONTRÔLE PÉRIODIQUE
DATE : Mercredi le 17 février 2016
HEURE : 9H30 à 11H00
LOCAL : L-2710
DUREE : 1H30
NOTE : Aucune documentation permise. Aucune calculatrice permise.
Ce questionnaire comprend 3 questions pour 20 points.
Bon travail !
Question 1 : Analyse d’algorithme [7 points]
Soit C[1 . . . m]un tableau d’entiers tels que 0C[i]i2pour i= 1, . . . , m.
Considérons l’algorithme suivant :
k0
Pour i1jusqu’à mfaire
Pour j1jusqu’à C[i]faire
Si (i2modulo j= 0)
alors kk+ 1
a) Identifiez une opération baromètre. [1 point]
Solution: “La comparaison (i2modulo j= 0) est une réponse acceptable mais la sentinelle
de la boucle interne, “jC[i]”, est encore mieux car il est possible que C[i]=0.
b) Calculez exactement le nombre de fois que cette opération baromètre sera exécutée. [1 point]
Solution: Pm
i=1 C[i]. Attention ! ce n’est pas égal à m·C[i].
c) Donnez l’ordre exact du temps pris par cet algorithme en meilleur cas. [1 point]
Solution: En meilleur cas, C[i] = 0 i. Donc la boucle interne n’itère jamais et le temps
pris est dans Θ(m)
INF4705 Analyse et conception d’algorithmes, Contrôle périodique 2
d) Exprimez au moyen de la notation asymptotique une borne inférieure pour le temps pris par
cet algorithme en pire cas. [2 points]
Solution: En pire cas, C[i] = i2i. Donc la boucle interne fait i2itérations et le temps pris
est Pm
i=1 i2Θ(m3). Donc il est certainement dans Ω(m3).
Attention ! Pm
i=1 i26=m2(m+1)2
2.
e) En supposant que la fréquence d’occurrence de la valeur i2pour C[i]soit 1
i, quelle soit 11
i
pour la valeur iet qu’elle soit nulle pour toute autre valeur de C[i], donnez l’ordre exact du
temps moyen pris par cet algorithme. [2 points]
Solution: Pm
i=1(1
ii2+ (1 1
i)i) = Pm
i=1(i+i1) = 2 Pm
i=1 iPm
i=1 1 = m(m+ 1) m=
m2Θ(m2).
Question 2 : GP-compression [7 points]
a) Votre professeur a développé un nouvel algorithme pour calculer la GP-compression d’une
matrice tri-dimensionnelle. Pour une matrice de dimensions `×m×n, cet algorithme effectue
un nombre d’opérations élémentaires qui ne dépasse pas 5`mn log `+ 3m2log n(à partir
d’une certaine taille de la matrice) et travaille directement sur la matrice en plus d’allouer
un vecteur de nentiers. Il aimerait exprimer cela en notation asymptotique mais la définition
formelle habituelle exprime la taille d’un exemplaire au moyen d’un seul paramètre plutôt
que trois, comme c’est le cas ici. Pour lui venir en aide :
i) adaptez la définition formelle habituelle à ses besoins ; [1 point]
Solution: O(f) = {t: IN ×IN ×IN IR+|(cIR?)(`0IN)(m0IN)(n0
IN)(``0)(mm0)(nn0)[t(`, m, n)c·f(`, m, n)]}
ii) exprimez la consommation du temps de calcul de son algorithme en notation asympto-
tique, le plus précisément possible ; [1 point]
Solution: O(`mn log `+m2log n)
iii) exprimez la consommation de l’espace mémoire de son algorithme en notation asymp-
totique, le plus précisément possible. [1 point]
Solution: θ(`mn)ou θ(n)
b) Votre professeur a trouvé un autre algorithme pour la GP-compression dans le cas particulier
d’une matrice dont les trois dimensions sont égales (à n). C’est un algorithme diviser-pour-
régner qui s’applique récursivement à huit sous-matrices de taille n
2×n
2×n
2puis recombine
les huit sous-résultats en effectuant 2nmultiplications de paires de matrices 3n×3nen uti-
lisant l’algorithme de Strassen (les détails doivent demeurer secrets. . .). Pouvez-vous l’aider
à décider si, du point de vue du temps de calcul, cet algorithme est meilleur que le précédent
dans ce cas particulier ? Vous devez :
i) poser la relation de récurrence pour T(n), le temps d’exécution de l’algorithme ; [2 points]
Solution: T(n)=8T(n
2) + cn1+log27.
INF4705 Analyse et conception d’algorithmes, Contrôle périodique 3
ii) en déduire l’ordre exact en notation asymptotique ; [1 point]
Solution: Puisque 8=2log28= 21+log24<21+log27, on obtient, avec la formule, T(n)
Θ(n1+log27).
iii) comparer les deux résultats en notation asymptotique pour dire lequel vous utiliseriez.
[1 point]
Solution: dans ce cas particulier, le premier résultat devient O(n3log n), ce qui est
meilleur que l’autre (borne sup. asymptotiquement inférieure car 3<1 + log27).
Question 3 : Manipulations de tableaux [6 points]
a) Un tableau dynamique est utile lorsqu’on ne connaît pas à l’avance le nombre d’éléments
qu’on y mettra. Considérez l’implantation suivante :
Un tableau de taille 10 est initialement créé. Lorsqu’on ajoute un n+ 1 ième élément au
tableau de taille net pour éviter un débordement : on crée un nouveau tableau de taille
n+ 10 ; on copie les néléments de l’ancien tableau dans le nouveau ; on ajoute le nouvel
élément ; le nouveau tableau devient notre tableau courant. On passe ainsi d’un tableau de
taille 10 à un autre de taille 20, puis 30, 40, etc. On considère que d’ajouter un élément au
tableau de taille nconsomme une unité de ressource lorsqu’il n’y a pas de débordement et
n+ 1 unités sinon (pour copier les néléments et ajouter le nouveau).
En supposant qu’on démarre avec un tableau vide de taille 10 auquel on ajoute éventuel-
lement néléments, évaluez la consommation amortie d’un ajout d’élément. Détaillez vos
calculs. [2 points]
Solution: Les 10 premiers éléments seront manipulés dn/10efois (ajout initial + co-
pies dues aux débordements) ; les 10 suivants, dn/10e − 1fois ; et ainsi de suite. Au total,
10 Pbn/10c−1
i=0 (dn/10e − i) + nmod 10 = 10 Pbn/10c−1
i=0 dn/10e − 10 Pbn/10c−1
i=0 i+nmod 10
n2/10 n2/20 + n/2 + c=n2/20 + n/2 + cDonc une consommation totale dans Θ(n2)pour
néléments, d’où la consommation amortie dans Θ(n).
b) Soit Tun tableau de nentiers. Un élément est dit majoritaire dans Ts’il y apparaît plus
de n
2fois. Donnez un algorithme retournant l’élément majoritaire dans T, s’il existe, et qui
prend un temps et un espace mémoire linéaires en n. [2 points]
Solution: Calculer la médiane des éléments de T en temps linéaire à l’aide de l’algorithme
diviser-pour-régner vu en classe puis compter le nombre d’occurrences de celle-ci dans T.
c) Soit Tun tableau de nentiers distincts et possiblement négatifs, triés en ordre croissant.
Concevez et analysez un algorithme diviser-pour-régner efficace pouvant déterminer
un index i(1 in)tel que T[i] = i, à condition qu’il existe. [2 points]
Solution: Procéder comme pour une fouille dichotomique, en Θ(lg n). Si T[i]> i alors
certainement T[j]> j pour tout j > i, puisque T[j]T[i]jipar définition de T. On
peut donc négliger la partie de droite. Idem pour T[i]< i.
Le Professeur: Gilles Pesant (M-3404, tel. 340-4711 ext.4142)
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 !