Licence d’Informatique (L3)
SIN5U1TL – Algorithmique avancée
TD 1 (Jeudi 15/09)
1. Complexité (exemples simples) – donnez o(f(n)) et la constante multiplicative dans chacun des cas :
- f(n) = 1000.n2 + 3.n.log(n) + n3
- f(n) = 2.n2 + 30000.n.log(n10)
2. Complexité (suite) :
On dispose de deux algorithmes A et B pour résoudre un même problème. Le nombre d’opérations de A en
fonction de la taille n de l’échantillon est f(n) ; celle de B est g(n).
- f(n) = 100.n.log(n)
- g(n) = n2
Dans quel cas vaut-il mieux utiliser A ou B … et donnez la valeur de n à laquelle on bascule
3. Complexité (tris) :
Evaluez les complexités maximales et en moyenne :
- du tri par fusion
- du tri par extraction simple (on l’appelle aussi « par sélection »)
Evaluez précisément pour une configuration donnée la complexité du tri bulle, puis les complexités maximales et
en moyenne de ce tri
4. Exponentiation indienne :
On souhaite calculer xn. On peut le faire simplement en initialisant une variable à 1 et en multipliant sa valeur par
x n fois. Quelle est la complexité de cet algorithme ?
Si n est impair alors xn = x.x(n-1) - mais (n-1) est pair alors – et si n est pair alors xn = (xn/2)2
Invariant : soit z = 1 et y = x ; nous allons faire évoluer z, y et n de telles sorte que z*yn valle toujours xn
Ecrivez un algorithme qui permette de calculer xn en s’appuyant sur le maintien de cet invariant, et qui soit plus
rapide que l’algorithme initial. Quelle est sa complexité ?
Que se passe-t-il si au lieu de calculer xn on calcule (xn mod p) ?
5. Polynômes de Horner :
On souhaite évaluer y = a0 + a1x + … + anxn
Evaluez la complexité du calcul de cette expression.
Si l’on remarque que y = a0 + x.(a1 + … + anxn-1) peut-on calculer y différemment ? Evaluez la complexité de ce
nouveau mode de calcul.