Université Pierre & Marie Curie Année 2011-2012 Master de mathématiques 1 Module MM020 Théorie des Nombres - TD5 Éléments de complexité algorithmique On appelle “opération élémentaire” dans un anneau A la somme ou le produit de deux éléments de A. On appelle “opération binaire élémentaire” la somme ou le produit de deux nombres s’écrivant avec un seul chiffre en base 2. On ne s’intéresse ici qu’à la complexité temporelle (temps d’éxécution de l’algorithme) et non à la complexité spatiale (encombrement mémoire). Exercice 1 : a) Montrer que le nombre d’opérations binaires élémentaires pour calculer “naı̈vement” la somme de deux entiers de moins de n chiffres (écrits en binaire) est O(n). b) Montrer que le nombre d’opérations binaires élémentaires pour calculer “naı̈vement” le produit de deux entiers de moins de n chiffres (écrits en binaire) est O(n2 ). c) Montrer que le nombre d’opérations élémentaires dans Z pour calculer “naı̈vement” n! est O(n). Quel est le nombre d’opérations binaires élémentaires correspondant ? d) Soient a, k, n trois entiers. Montrer que le nombre d’opérations élémentaires modulo k pour calculer “naı̈vement” an modulo k est O(n) et que le nombre d’opérations binaires élémentaires est O(n log(k)2 ). Proposer un algorithme plus efficace, montrer que le nombre d’opérations élémentaires modulo k est alors O(log(n)) et que le nombre d’opérations binaires élémentaires est O(log(n) log(k)2 ) Exercice 2 : (Algorithme de Karatsuba) L’objectif de cet exercice est l’étude d’un algorithme pour le produit des nombres entiers qui est plus rapide que la méthode naı̈ve. On fixe B ≥ 2 un entier. a) Soient x, y ∈ N deux nombres entiers, dont l’écriture en base B compte moins de n chiffres. Soit n m m 2 ≤ m < n. On écrit x = x1 B + x0 et y = y1 B + y0 les divisions euclidiennes de x et y par m B . Calculer le produit x.y en fonction des xi et yj . b) Combien de multiplications de nombres de moins de m chiffres sont nécessaires au calcul de x.y ? En déduire un algorithme de multiplication des entiers, et évaluer rapidement le nombre d’opérations élémentaires de cet algorithme. Le comparer à l’algorithme naı̈f. c) Avec les notations précédentes, vérifier que x1 y0 + x0 y1 = (x1 + x0 )(y1 + y0 ) − x1 y1 − x0 y0 . d) En déduire un nouvel algorithme pour calculer x.y, en effectuant moins de multiplications. Établir une formule de récurrence pour le nombre d’opérations élémentaires, puis évaluer ce nombre et comparer à l’algorithme naı̈f (on pourra supposer pour commencer que n est une puissance de 2). e) Que donne cet algorithme pour le calcul de an modulo k (voir exercice 1, question d)) ? Exercice 3 : (Transformée de Fourier rapide) Soit k ≥ 0 et n := 2k . Soit A un anneau et ω ∈ A tel que ω n = 1 et ω t − 1 n’est pas diviseur de 0 pour 1 ≤ t ≤ n − 1. Soient F, G ∈ A[X], tels que deg(F.G) < n. On cherche un algorithme rapide pour calculer F.G ∈ A[X]. a) On définit φ = φn : A[X] → An par φ(P ) =: (P (1), P (ω), . . . , P (ω n−1 )). L’objectif P de cette i question est de calculer efficacement φ(H), avec deg(H) < n. On écrit H(X) = n−1 i=0 ai X et n m m on pose m := 2 . On écrit les divisions euclidiennes de H par X − 1 et X + 1 : H(X) = (X m − 1)Q0 (X) + R0 (X) et H(X) = (X m + 1)Q1 (X) + R1 (X). 1 i) Pour tout l ∈ Z, calculer H(ω l ) en fonction de R0 (ω l ) et R1 (ω l ). ii) Calculer les coefficients de R0 et R1 en fonction des ai . iii) On pose R1 (X) := R1 (ωX). Calculer les coefficients de R1 . iv) Montrer que l’on peut calculer φn (H) à partir de φm (R0 ) et φm (R1 ). v) En déduire un algorithme pour calculer φ(H) et évaluer le nombre d’opérations élémentaires dans A nécessaires. b) On cherche maintenant à utiliser la question a) pour calculer le produit F.G. i) On note φe la restriction de φ aux polynômes de degré < n. Calculer la matrice de φe dans les bases canoniques, et en déduire que φe est inversible et que son inverse se calcule en un nombre d’opérations élémentaires égal à celui de la question a)v). ii) En déduire un algorithme pour calculer F.G ∈ A[X], et montrer qu’il nécessite O(n log(n)) opérations élémentaires dans A. c) On cherche maintenant à multiplier efficacement des entiers de taille n = 2k . On suppose donné un nombre premier 2n < p < Kn (K est une constante fixée, indépendante de n) tel que p ≡ 1 [2n] et un générateur ζ de (Z/pZ)∗ . En déduire un algorithme de multiplication des entiers qui s’écrivent en binaire avec moins de n chiffres. Évaluer le nombre d’opérations binaires nécessaires, et comparer à la méthode naı̈ve et à l’algorithme de l’exercice 2. d) En déduire un algorithme pour calculer an modulo k et évaluer sa complexité (voir exercice 1, question d) et exercice 2, question e)). 2