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