Objectifs : comparaison de deux algorithmes
de multiplication de polynômes à coefficients modulo
un entier donné. Implantation de l'algorithme de Karazuba.
Temps : 1 séance de 3 heures.
Implanter les opérations de base modulo un entier donné.
Il s'agit d'écrire les fonctions#define base 13Les polynomes seront représentés par une structure à deux champs : un pointeur vers les coefficients, et la taille du polynomes.
int add(complexe x, y) : retourne x+y modulo base.
int prd(complexe x, y) : retourne x*y modulo base.et les fonctions
typedef struct { int taille;
int * coef;
} POLYNOME;POLYNOME allocation( int n );
void Liberer( POLYNOME p );
Il s'agit de calculer le produit de deux polynômes A(X) et B(X) de taille n dans un troisième R(X) de taille double, et donc de faire le calcul exact:R(X) := A(X) * B(X)Ecrire la procédure correspondqnte, les allocations de mémoire devraient etre externes à la procédure...void naif( POLYNOME r, a, b).qui doit être de complexité quadratique.
Compiler avec l'option -pg mais sans option d'optimisation -Ox. Utiliser le profileur gprof pour compter le nombre d'opérations effectuées sur des complexes pour calculer le produit de deux polynômes de taille n, mesurer aussi les temps de calcul. Faire un tableau récapitulatif pourlog(n) = 6, 7, 8, 9, 10, 14, 18, 22.Estimer les facteurs cachés.
Implanter l'algorithme de Karazuba.
Algorithme KARAZUBA(A, B, R)
DONNEES A,B,R : POLYNOME;
VARIABLE AH, AL, BH, BL : POLYNOME;
PS, PA, PB, SA, SB : POLYNOME;
DEBUT
SI ( TAILLE(A) > 1 ) ALORS
division
DIVISION( A, AH, AL)
DIVISION( B, BH, BL)
preparation
ADDITION( AH, AL, SA);
ADDITION( BH, BL, SB);
récursion
KARAZUBA( AH, BH, PH );
KARAZUBA( AL, BL, PL );
KARAZUBA( SA, SB, PS );
fusion
SOUSTRACT( PS , PH );
SOUSTRACT( PS , PL );
FUSION( PL, PS, PL, R );
SINON
R[0] := prd( A[O], B[0] );
FSI
FIN
Compiler avec l'option -pg mais sans option d'optimisation -Ox. Utiliser le profileur gprof pour compter le nombre d'opérations effectuées sur des complexes pour calculer le produit de deux polynômes de taille n, mesurer aussi les temps de calcul. Faire un tableau récapitulatif pour[ 5 ] commenter les temps de calcul obtenus en [2] et [4];log(n) = 6, 7, 8, 9, 10, 14, 18, 22.Estimer les facteurs cachés.