Algorithme de Horner et calcul de complexité

publicité
ECE 1
2011 - 2012
TP d’informatique no 12.
Algorithme de Horner et calcul de complexité
Un polynôme P de degré n est caractérisé par la donnée de ses n + 1 coefficients a0 , a1 , . . . , an (on choisit
ici d’ordonner les polynômes suivant les puissances croissantes de x) :
P (x) = a0 + a1 x + a2 x2 + . . . + an xn .
1. Vérifier l’égalité suivante :
2 − 3x + 5x2 − 7x4 = (((−7 × x + 0) × x + 5) × x − 3) × x + 2.
Cette égalité se généralise pour des polynômes de degré quelconque :
a0 + a1 x + a2 x2 + . . . + an−1 xn−1 + an xn = ((((an × x + an−1 ) × x + an−2 ) × . . .) × x + a1 ) × x + a0 .
L’algorithme de Horner consiste à utiliser l’écriture de droite (ci-dessus) du polynôme P afin de
calculer la valeur de P (x) pour tout réel x.
2. Écrire (en français) cet algorithme de calcul de P (x), les réels a0 , a1 , . . . , an et x étant supposés
connus.
3. On se propose dans cette question d’écrire un programme mettant en oeuvre l’algorithme de Horner.
Afin de simplifier les saisies et les affichages, ne seront utilisés dans ce TP que des polynômes à
coefficients entiers et de degré inférieur ou égal à 4. C’est pourquoi la variable représentant le
polynôme P sera du type array[0..4] of integer. Les évaluations seront faites également en des
valeurs entières.
(a) Écrire un programme (u:infoec1\tp12a.pas) permettant de saisir au clavier les coefficients
d’un polynôme de degré inférieur ou égal à 4. On pourra donner le nom polynome au type
array[0..4] of integer.
On peut éviter d’écrire plusieurs fois la même suite d’instructions en déclarant une procédure.
Une procédure est une suite d’instructions décrivant une action simple ou complexe, à laquelle
on donne un nom. Chaque fois que l’on aura besoin de faire cette action, il suffira d’évoquer
ce nom au lieu de réécrire la suite d’instructions.
(b) Charger le fichier ( v:eece1\tp12b.pas) dont le texte est reproduit ci-dessous.
program Horner;
type polynome=array[0..4] of integer;
var a:polynome; x:integer;
procedure saisie(var a:polynome);
var i:integer;
begin
for i:=0 to 4 do
begin
write(’Entrer le coefficient de degr ’,i,’ : ’);
readln(a[i]);
end;
BEGIN
saisie(a);
END.
Étude de la structure d’un programme :
I Déclaration d’un type.
I Déclaration des variables du programme principal.
I Déclaration d’une procédure : nom de la procédure, paramètres formels (ceux qui figurent
dans l’en-tête de la déclaration de la procédure) et effectifs (ceux qui figurent dans l’appel
de la procédure), passage des paramètres par valeur ou par variable, variables locales.
I Programme principal.
(c) Écrire une procédure affiche permettant d’afficher les coefficients d’un polynôme de degré
inférieur ou égal à 4.
(d) Compléter le programme précédent pour qu’il permette le calcul de P (x) (x étant une variable
de type integer) à l’aide de l’algorithme de Horner : on déclarera une fonction eval p. Tester
le programme sur différents exemples.
4. La rapidité d’un algorithme de calcul peut se mesurer au nombre d’opérations qu’il nécessite : plus
il y a d’opérations à effectuer et plus l’algorithme est coûteux en temps.
(a) Pour un polynôme P de degré n, combien d’opérations (additions et multiplications) nécessite
le calcul de P (x) avec l’algorithme de Horner ?
(b) Déterminer le nombre d’opérations effectuées lors du calcul de P (x) au moyen d’un algorithme
utilisant la décomposition suivante :
P (x) = a0 + a1 × x + a2 × x × x + . . . + an × x × . . . × x .
| {z }
n facteurs
Déterminer un équivalent simple au voisinage de de ce nombre d’opérations et le comparer
avec le résultat obtenu à la question précédente.
Téléchargement