Polynômes Creux

publicité
Polynômes Creux
Chapitre 7
Polynômes Creux
Et si on faisait encore de l’informatique ?
En informatique, nous avons deux problèmes que nous rencontrons chaque jour : l’algorithmique, la méthode de calcul, et les
structures de données, la formalisation de notre problème. Par exemple, nous voulons enregistrer dans un ordinateur un graphe,
ou un dessin.
Mettons que vous avez fait ceci sur un bout de papier, et que vous voulez le mettre dans un ordi :
A
Lien
B
Faut-il enregistrer "Deux ronds avec respectivement A et B à l’intérieur reliés par des pointillés" ? Ou une image qui contient
les informations de couleurs pour chaque zone ?
Ce sont des décisions que doit prendre un informaticien et nous allons voir un exemple sur les polynômes.
1
Représentation d’un polynôme
Quels informations sont importantes dans un polynômes ? La liste de ses coefficients bien sûr. Par exemple quand nous
sommes dans RN [X], on est en clair dans un espace qui ressemble à R N +1 .
Donc pour enregistrer un polynôme, la première manière de penser est, une case correspondant à chaque coefficient. Ainsi
on aura :
P = X 3 + 63X 2 + 4X + 2 = 1 63 4 2
Jusque là tout va bien, mais supposons que nous avons, ce que l’on appelle un polynôme creux :
P = X 321 + 63X 9 + 4X + 2 = 1 0...0 63 0...0 4 2
Résultat : Nous avons alloué au total 322 cases mémoires pour stocker très peu d’information.
Pour éviter ce genre de problème, nous n’avons pas d’autres choix que de remettre en cause notre structure de donnée. Quel
est le problème ici ? Nous avons des trous dans notre polynôme assez conséquents.
Nous avons à ce moment deux possibilités de structures :
– Créer une syntaxe permettant de spécifier la taille du trou. Par exemple : 63 Trou de taille 7 4 2
– Enregistrer avec le coefficient, la puissance à laquelle elle correspond. (1, 321) (63, 9) (4,1) (2,0)
Pour des raisons de facilité d’implantation, la deuxième solution est la meilleure. Nous rappelons donc :
Chaque coefficient est stocké dans une liste par un couple (coefficient , puissance) par ordre décroissant de puissance
L’ordre est important pour des questions de structuration claire et compréhensible, mais surtout pour l’évaluation que nous
verrons plus tard.
2
Implantation
L’implantation est l’ensemble des procédures de bases permettant la manipulation de la structure de donnée. Le tout réside
dans le concept de boite noire.
Ce concept est très simple, quelqu’un qui va récupérer votre ensemble de fonction. Il ne voudra pas savoir (sauf s’il est
curieux) comment vous avez stocké votre polynôme. Par contre il voudra savoir ce que fait chaque fonction, mais ça n’ira pas
plus loin !
Voici la liste des procédures à créer :
Ex 1 : – convertPoly(p, x) : Cette fonction prend en paramètre P, le polynôme, et x la variable sur laquelle le polynôme est construit (en général
X) et rend le polynôme sous forme cité (sous forme creuse).
– deg(L) : Fonction qui a partir de la forme creuse, détermine le degré (une seule ligne !)
– somme(L1, L2) : Fait l’addition de deux formes creuses
– produitMonome(L, M) : Fait la multiplication d’une forme creuse par un monome (donc un couple).
– produit(L1, L2) : Fait le produit de deux formes creuses
1
Loïc Frère TEX Petit
Polynômes Creux
3
Chapitre 7
Evaluation - Forme de Hörner
Pour évaluer un polynôme de façon efficace en informatique, on ne le fait pas naïvement (à y réfléchir ça arrive très peu
souvent ce genre de cas). L’évaluation simple entraînerait une redondance de calcul importante.
Par exemple : pour évaluer 1 + X + X 2 + X 3 + X 4 . La logique voudrait que l’on calcule dans l’ordre, le 1, ensuite le X,
ensuite le X 2 , ensuite le X 3 et enfin le X 4 . On remarque que si on réfléchit bien, on a X 4 = (X 2 )2 par exemple. Il y a donc
quelque part quelque chose qui fait accélérer les choses.
La solution est de factoriser le plus simplement sans calcul, dans notre exemple on a :
1 + 2X + 3X 2 + 4X 5 + 5X 6 = (((5X + 4)X 3 + 3)X + 2)X + 1
Ainsi, on a au total, pour n le degré, n multiplications. Au lieu d’environ n(n + 1)/2 si on avait fait le calcul naïvement.
Cette forme du polynôme s’appelle la forme de Hörner, qui a connu son succès pour l’accès à l’évaluation polynomiale de
façon linéaire (en O(n)).
Ex 2 : A partir de la forme de Hörner, créer la procédure eval(L, x) qui à partir de la forme creuse fournit une évaluation en x. Faites
attention : il faut de l’evalf de partout !
Essayer de tracer quelques exemples pour bien vérifier que votre fonction marche bien.
4
Plus loin...
Pour les fous qui sont arrivés là....
L’évaluation de Hörner n’est pas la meilleure dans le cas général car il faut la coupler à une autre. Pourquoi ? Car l’évaluation
naïve de X 100 (utile dans un polynôme du genre X 101 + X), prendra 100 opérations. En réalité, on peut amener ce résultat à 7
opérations.
La technique s’appelle "Diviser pour régner" (non Sébastien n’a rien à voir avec ça). Elle consiste à toujours découper en
deux pour répartir le calcul. En effet, on se rend compte que X n = X n/2 ∗ X n/2 . Or si on divise à chaque fois par 2, on arrive à
log2 n opérations.
Ex 3 : Implantez l’algorithme récursif d’exponentiation rapide.
Rajoutez le à votre calcul de l’évaluation.
On peut remarquer que cet algorithme est exactement du même type que le tri fusion que nous avons vu dans le dernier cours.
C’est ultime et très couramment utilisé même sur des applications bien plus dures (transformés de Fourier, recherche de plus
court-chemin, imagerie, intelligence artificielle), car on peut arriver .
2
Loïc Frère TEX Petit
Téléchargement