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 (Automne 2008) 3 crédits (3-1.5-4.5) CORRIGÉ DU CONTRÔLE PÉRIODIQUE DATE : Mercredi le 8 octobre 2008 HEURE : 9H00 à 10H30 LOCAL : B-505 DUREE : 1H30mn NOTE : Aucune documentation permise. Aucune calculatrice permise. Ce questionnaire comprend 4 questions pour 20 points. Bon travail ! Question 1 : Notation asymptotique [5 points] Soient A, B, C, D et E cinq algorithmes qui résolvent le même problème P . Après une analyse de ces algorithmes nous avons obtenu les résultats suivants : a) TA (n) ∈ O(n2 ) en pire cas ; b) TB (n) ∈ Ω(n2 ) dans tous les cas ; c) TC (n) ∈ Θ(n) en meilleur cas ; d) TD (n) ∈ Θ(n2 log n) dans tous les cas ; e) TE (n) ∈ Θ(n2 ) en pire cas. (a) Supposons que vous vouliez concevoir un algorithme Z qui résout un problème P 0 ayant des instances de taille n. Cet algorithme ne doit jamais prendre plus de n4 log n unités de temps (à une constante près et pour des entrées de taille assez grande). Dans Z, vous devriez faire n2 log n appels à Résoudre le problème P (tous sur des tailles n). Donnez, parmi les cinq algorithmes ci-haut, tous ceux qui peuvent être utilisés dans votre algorithme Z, sans dépasser la limite de temps. Solution: Les algorithmes A et E peuvent être utilisés INF4705 Analyse et conception d’algorithmes, Contrôle périodique 2 (b) Vous êtes à élaborer un système qui doit fonctionner en temps réel (le facteur temps est primordial). Pour ce faire, vous devez choisir un (et un seul) algorithme parmi les cinq ci-haut. Quel serait le choix le plus prometteur ? Justifiez. Solution: A est le choix le plus prometteur (c) Pour chacun des 5 algorithmes ci-haut, dites, avec justification si on est assuré que son temps d’exécution en pire cas appartient à l’ensemble suivant : S = (O(n3 ) ∩ Ω(n2 )) ∪ Θ(n) Question 2 : Analyse d’algorithme [5 points] Soit C[1 . . . m] un tableau d’entiers tels que 0 ≤ C[i] ≤ i2 pour i = 1, . . . , m. Soit T un tableau additionnel. Considérons l’algorithme suivant : Début. k←0 Pour i ← 1 jusqu’à m faire Pour j ← 1 jusqu’à C[i] faire k ←k+1 T [k] ← i Fin a) Exprimez le nombre exact de fois que l’instruction k ← k + 1 est exécutée. Solution: P n= m i=1 C[i] b) Donnez l’ordre exact (notation Θ) du temps pris par cet algorithme. Votre réponse doit être valable non seulement en pire cas, mais dans tous les cas. Solution: T (n) = Θ(m + n) c) Donnez l’ordre (notation O), en fonction de m, du temps pris en pire cas par cet algorithme. Solution: P 2 3 T (n) = Θ(m + m 1 i ) = Θ(m ) Question 3 : Algorithmes voraces [5 points] M. Tremblay conduit une voiture d’un point A à un point B. Le réservoir de son auto lui permet de parcourir une distance D lorsqu’il est plein. Au cours de son voyage, il rencontrera k postes où il pourrait faire le plein. Soient di la distance pour aller du poste i − 1 au poste i, d1 la distance du point A au poste 1, et dB la distance du poste k au point B (on suppose di ≤ D et dB ≤ D). M. Tremblay veut effectuer le moins d’arrêts possibles. INF4705 Analyse et conception d’algorithmes, Contrôle périodique 3 a) Présentez un algorithme vorace qui détermine les postes où Mr Tremblay devrait s’arrêter. Solution: Un squelette de réponse serait comme suit : Fonction VORACE (k : entier) : ensemble S←∅ Pour i ← 1 à k faire {Tester si la distance parcourue jusqu’au poste prochain est inférieure à D} si le plein est nécessaire pour se rendre au poste i + 1 Alors S ← S ∪ {i} Fin pour Retourner S b) Est ce que votre algorithme est optimal ? (preuve ou contre exemple) Solution: Similaire à ce qui a été fait en cours Question 4 : Algorithmes diviser-pour-régner [5 points] Soit T [1 . . . n] un tableau de n éléments. Il est facile de déterminer le plus grand élément de T en faisant exactement n − 1 comparaisons entre éléments : M ax ← T [1] Ind ← 1 Pour i ← 2 jusqu’à n faire Si M ax < T [i] alors M ax ← T [i] ; Ind ← i Finsi FinPour Seules les comparaisons entre éléments sont comptées ici, ce qui exclut les comparaisons implicites dans le contrôle de la boucle Pour. On pourrait subséquemment déterminer le plus petit élément de T en n − 2 comparaisons supplémentaires : T [Ind] ← T [1] M in ← T [2] Pour i ← 3 jusqu’à n faire Si M in > T [i] alors M in ← T [i] Finsi FinPour Cela donne 2n − 3 comparaisons. INF4705 Analyse et conception d’algorithmes, Contrôle périodique 4 a) Trouvez un algorithme A basé sur la technique diviser-pour-régner capable de déterminer le plus petit et le plus grand élément d’un tableau de n éléments en faisant moins de 2n − 3 comparaisons entre éléments. Solution: Fonction MinMax (T [1, . . . , n]) : (reel,reel) {On suppose que n ≥ 1 } Si n > 2 alors s ← n DIV 2 (u1 , v1 ) ← MinMax(T [1, . . . , s]) (u2 , v2 ) ← MinMax(T [s + 1, . . . , n]) Retourner (MIN(u1 , u2 ),MAX(v1 , v2 )) Si n = 1 Alors Retourner (T [1], T [1]) {cas ou n = 2} Si T [1] < T [2] Alors Retourner (T [1], T [2]) Sinon Retourner (T [2], T [1]) b) Quel est le nombre exact de comparaisons requises par votre algorithme ? Solution: Les parties MIN(u1 , u2 ),MAX(v1 , v2 ) et T [1] < T [2] effectuent chacune une comparaison. Pour ce qui est des appels récursifs à MinMax, supposons que n est une puissance de 2. Alors : t(2) = 1 pour n = 2 t(n) = 2t(n/2) + 2 pour n ≥ 2 En résolvant cette équation nous obtenons que t(n) ∈ Θ(n). Plus précisément on trouve que t(n) = 3n/2 − 2. Évidement c’est 25 % de moins que 2n − 3 Le Professeur: Alaaeddine Fellah ()