1 (5 x 4 = 20 points)

publicité
EXAMEN PARTIEL NUMÉRO 1
IFT-17588 : Analyse d’algorithmes
Samedi 21 février 2004, 13h30 à 16h30
NOM
SECTION :
–
–
–
–
A (Lundi avec François Gagnon)
MATRICULE
B (Mercredi avec Hans Bherer)
Placez votre carte d’identité sur le coin gauche de votre table.
Aucune documentation n’est permise et les calculatrices sont interdites.
Rappel : Vous pouvez perdre jusqu’à 10% des points pour des fautes de français.
Vérifiez que le questionnaire a 3 pages (6 questions).
ATTENTION :
– Monceau est le terme français pour « heap ».
– fn représente le nième nombre de fibonacci.
– f0 = 0, f1 = 1, . . . , fn = fn−1 + fn−2 , . . .
– lg n = log2 n
– ln n = loge n
– log n = log10 n
– alogb n = nlogb a
– logb a · logc b = logc a
– Les fonctions logb n, n, n2 , (logb n)2 , n logb n sont harmonieuses.
– Dans le cadre cours : TA (n) ≡ TB (n) ssi TA (n) ∈ θ(TB (n)).
1
(5 x 4 = 20 points)
1. Quelle est la différence entre une analyse en moyenne et une analyse amortie ?
2. Dans le cadre du cours, que signifie « pire cas » dans l’expression « faire une analyse en
pire cas »
3. Soient A et B des algorithmes prenant des temps dans O(2n ) et O(n10 ) respectivement.
Est-il possible qu’une implantation de l’algorithme A soit plus efficace qu’une implantation
de l’algorithme B sur tous les exemplaires ? Justifiez.
4. Dans le cadre du cours, est-il possible que 2 implantations différentes d’un même algorithme
prennent des temps d’exécution qui ne soient pas équivalents (on suppose qu’il est possible
de calculer les ordres exacts des temps d’exécution des 2 implantations) ? Justifiez.
5. Deux algorithmes A et B prennent des temps d’exécution dans θ((lg n)lg n ) et θ(nlg lg n )
respectivement. Ces algorithmes sont-ils équivalents ? Justifiez.
2
(15 + 5 = 20 points)
Voici un algorithme A qui résout un problème P.
ALGO(T, n)
. Si n < 2 alors SolutionDirecte(T, n)
. Sinon
.
ALGO(T, b n2 c)
.
Combiner (T, n)
Afin de simplifier, nous formulons les hypothèses suivantes :
– Pour n = 0 et n = 1, SolutionDirecte() prend un temps constant de 0 et 1 respectivement.
– Combiner() prend un temps de lg n (incluant les appels récursifs, les tests, etc..).
– Vous pouvez supposer que n = 2k (vous devrez vous débarrasser de cette hypothèse pour le
résultat final et ce, avec justifications).
1. Analysez cet algorithme A et donnez votre résultat en utilisant la notation asymptotique.
2. Analysez ce même algorithme A en considérant cette fois que Combiner() prend un temps
constant c. Donnez votre résultat en utilisant la notation asymptotique.
3
(15 points)
Alice et Bob analysent un même algorithme A et obtiennent les résultats TA (n) et TB (n)
respectivement. Alice obtient que TA (n) ∈ Ω(n3 ) en meilleur cas. Bob obtient que TB (n) ∈ Ω(nlg 7 )
pour tous les cas.
Le résultat d’Alice implique-t-il celui de Bob ? Justifiez.
4
(8 + 2 = 10 points)
1. Considérons un ensemble S contenant n > 1 nombres positifs et distincts non triés. Décrivez
un algorithme en O(n) qui utilise les monceaux et qui détermine 2 nombres distincts
x, y ∈ S tels que :
|x + y| ≥ |w + z|, ∀w, z ∈ S où w 6= z.
2. Justifiez que le temps d’exécution de votre algorithme est bien dans O(n).
5
(5 + 5 + 5 = 15 points)
Un monceau ternaire ressemble à un monceau binaire, mais au lieu d’avoir 2 fils, les noeuds
internes ont 3 fils (sauf peut-être le dernier noeud interne). La représentation des monceaux binaires dans un tableau s’applique mutatis mutandis aux monceaux ternaires.
Soient les deux fonctions suivantes (les deux s’exécutent dans θ(1)) :
Parent(i)
RETURN b(i − 2)/3 + 1c
et
Fils(i,j)
RETURN 3 ∗ (i − 1) + j + 1
qui retournent l’indice du parent du noeud i et l’indice du j ième fils (pour 1 ≤ j ≤ 3) du noeud i
respectivement.
Écrivez et analysez, en pire cas et en meilleur cas, la procédure : Procédure3Tamiser(T [1 . . . n], i)
qui permet de « tamiser » l’élément d’indice i dans un monceau ternaire contenant n éléments.
6
(8 + 2 + 10 = 20 points)
1. Analysez l’algorithme A suivant en utilisant une instruction baromètre. Donnez votre résultat
en utilisant la notation asymptotique.
AlgoA(n)
. REP = n
. while n > 0
.
k=n
.
for i = 1 to k
.
n++
.
REP++
.
n=n÷2
.
n−−
. Return REP
2. Que vaut AlgoA(5) ?
√
3. Montrez que le temps d’exécution TB (n) de l’algorithme B suivant est dans Ω(2 n ) (on
suppose ici que le temps de calcul de f2n est dans θ(1)).
Aide : montrez par induction que pour tout n ≥ 0 nous avons f2n ≥ 2n − 1 et utilisez ce
résultat pour votre analyse.
AlgoB(n)
. REP = 0
.
for i = 0 to f2n
.
REP++
. Return REP
Téléchargement