4 EXERCICES SUR LA TECHNIQUE DIVISER POUR RÉGNER R. Lelouche ©2000
Exercice 9
Un polynôme de degré n, tel que an xn + an–1 xn–1 + ... + a1 x + a0, est représenté par le tableau
P[0..n] de ses coefficients, c’est-à-dire que P[i] = ai. Supposez que vous disposiez déjà d’un
algorithme capable de multiplier symboliquement deux polynômes de degré au plus m en un temps
dans O(m logm). Soient x1, x2, ..., xn des entiers quelconques. Esquissez un algorithme efficace,
basé sur la technique diviser pour régner, capable de calculer les coefficients du polynôme produit
(x – x1) (x – x2) ... (x – xn). Par exemple, si n = 3, x1 = 2, x2 = –1, et x3 = 1, il faut retourner
le tableau [2, –1, –2, 1] correspondant au polynôme (x – 2) (x + 1) (x – 1) = x3 – 2x2 – x + 2.
En fonction de n, exprimez le temps pris par votre algorithme sous la forme d’une équation de récur-
rence asymptotique. Résolvez cette récurrence en notation O lorsque n est une puissance de 2.
Exercice 10
Supposons que vous ayez un problème à résoudre et que vous décidiez d’utiliser une méthode diviser
pour régner telle que la solution d’un problème de taille 3n demande la solution de 9 sous-problèmes
du même type, mais de taille n. Supposons de plus que le temps requis pour la séparation du
problème original en sous-problèmes et pour la combinaison des sous-solutions ainsi obtenues soit de
Θ(n2) opérations. Supposez pour simplifier que cet algorithme ne sera utilisé que sur des problèmes
dont la taille est une puissance exacte de 3.
i) Donnez l’équation de récurrence exprimant le temps d’exécution de cet algorithme en fonction de la
taille du problème à traiter.
ii) Exprimez en notation Θ le temps requis par cet algorithme sur un problème de taille n. (Preuves
non requises. Ne ré-inventez pas la roue!)
iii) Quelle aurait été la réponse à (ii) s’il avait fallu résoudre 10 sous-problèmes plutôt que 9 ?
iv) Idem avec 8 sous-problèmes.
Exercice 11 (ancien problème 4.8.5)
Démontrez que h(A) = lgA + le nombre de “1” dans la représentation binaire de A.
Exercice 12
Considérez la matrice F = ()
01
11 . Soient i et j deux entiers quelconques. Que vaut le produit du
vecteur (i j) par la matrice F? Que se passe-t-il si i et j sont deux termes consécutifs de la suite de
Fibonacci ? En utilisant la matrice F, donnez une équation pour le ne terme de la suite de Fibonacci.
Déduisez-en un algorithme de type diviser pour régner pour calculer ce ne terme. Donnez l’ordre exact
du temps d’exécution de votre algorithme, sans tenir compte de la taille des opérandes (vous pouvez
supposer, par exemple, que tous les calculs se font modulo 1000).