Sup’Galilée INFO1 S1– Année 2013–2014 Algorithmique TD01 : Complexité 1/Que vaut x (en fonction de a et n) après exécution de chacun des trois programmes suivants ? Donner un équivalent asymptotique (Θ(•)) x=a; for(i=0;i<n;i++) x++; x=a; for(i=0;i<n;i++) for(j=0;j<i;j++) x++; x=a; for(i=0;i<n;i++) for(j=0;j<i;j++) for(k=0;k<j;k++) x++; Algorithme de Horner On représente un polynôme R de degré n par un tableau tR à n + 1 valeurs. La case tR [i] représente le coefficient du terme de degré i. Autrement dit, si i=n X R(X) = ai X i i=0 4 3 2 on aura tR [i] = ai . Par exemple, X − 2X + 3X − 1 est représenté par le tableau [-1;0;3;-2;1] (attention à l’inversion de l’ordre des coefficients). 2/Écrire un algorithme qui calcule xn . Combien de multiplications sont effectuées par l’algorithme ? 3/Écrire un algorithme qui étant donné un polynôme P (sous forme de tableau) et une valeur x, calcule P (x). Combien de multiplications sont effectuées pour l’évaluation d’un polynôme de degré n ? 4/Montrer que tout polynôme P de degré n + 1 peut s’écrire sous la forme P (X) = Q(X) × X + α où Q est un polynôme de degré n (que valent α et les coefficients de Q en fonction des coefficients de P ?) En utilisant cette égalité, écrire un algorithme récursif pour évaluer P (x), étant donné P et x (algorithme de Horner). Combien de multiplications l’algorithme effectue pour l’évaluation d’un polynôme de degré n ? Tris 5/Un tri par sélection fonctionne selon le principe suivant (les éléments déjà triés sont rangés à la fin du tableau) : On sélectionne le plus grand 1 élément parmi ceux qui ne sont pas déjà triés, on le met au début de ceux qui sont triés et on recommence jusqu’à avoir trié tous les éléments. Écrire un algorithme de tri par sélection. Combien de comparaisons effectue-t-il ? 6/Un tri rapide fonctionne selon le principe suivant : 1. On choisit un pivot (généralement le premier élément) et on sépare les autres éléments en deux paquets : d’un coté ceux qui sont plus petits que le pivot et de l’autre ceux qui sont plus grands. 2. On trie récursivement chacun des deux paquets. 3. On recolle les deux paquets, avec le pivot entre eux. Écrire un algorithme de tri rapide. Combien de comparaisons effectue-t-il dans le pire des cas ? Dans le meilleur des cas ? En moyenne ? 1. Ou le plus petit, ça dépend si on veut trier en ordre croissant ou décroissant. 1 c xkcd.com 2