previous up next contents index
Previous: 1.1 Pourquoi étudier les Up: 1. Générateurs uniformes Next: 1.3 Le test des   Contents   Index

Subsections

1.2 Le test de Pollard (mesure de la période)

1.2.1 Algorithme du centre du carré (Neumann)

L'idée même d'utiliser une fonction déterministe pour engendrer une suite de nombres pseudo-aléatoires est due à J.v.Neumann (1946), et l'une des toutes premières méthodes examinées a été l'algorithme du "centre du carré". Partant d'un entier modulo maths, nous l'élevons au carré puis le réduisons à un nombre modulo maths en nous débarrassant des chiffres initiaux et terminaux. En considérant les nombres qui s'écrivent avec au plus maths chiffres dans une base maths fixée, c'est à dire en prenant maths, on obtient l'algorithme 1.


maths

Si maths est adapté à la taille des mots machine, le calcul des quotients entiers (maths1.1) et des restes euclidiens (maths) s'obtient sans recours à des opérations de division : il suffit de calculer le produit en double précision et de décaler le résultat pour le ramener dans l'accumulateur. De même, le passage de maths c'est à dire d'un entier maths à un nombre maths peut se faire par un simple transtypage, et ne requiert donc pas une division effective en virgule flottante (maths). Ce générateur a donc la qualité d'être très rapide.

Mais un examen systématique des séquences obtenues conduit à un rejet absolu. En effet la longueur totale des suites obtenues est très courte, et la partie strictement périodique est encore plus courte. La figure 1.1 montre que pour maths, la plus longue séquence se compose de 36 termes, tandis que les parties strictement périodiques sont de longueur 1 ou 2 : les cycles attracteurs du processus étant maths et maths.

Figure 1.1: Les longueurs pour maths.
[Longueur totale]maths[Longueur du cycle]maths

Pour maths, la situation n'est pas vraiment meilleure (figure 1.2). La plus grande séquence avant répétition que l'on puisse obtenir ne compte que 352 nombres. Et dans plus de deux cas sur trois, la longueur du cycle auquel le processus aboutit est inférieure ou égale à 7 !

Figure 1.2: Les longueurs pour maths.
[Longueur totale]maths[Longueur du cycle]maths

L'examen (figure 1.3) du cas maths, montre que la très faible longueur des chaînes engendrées n'est pas un phénomène particulier à la base 2. Une des causes de ce mauvais comportement est la suivante. Supposons qu'une valeur maths vienne à tomber en dessous de maths. A l'étape suivante, nous obtenons : maths d'où maths et la suite débouche sur un cycle formé du seul nombre 0.

Figure 1.3: Les longueurs pour maths.
[Longueur totale]maths[Longueur du cycle]maths

1.2.2 Générateurs congruentiels

Cette déconvenue "inattendue" causée par les générateurs quadratiques explique la généralisation des générateurs congruentiels, c'est à dire définis par le choix d'une valeur entière initiale maths (le "random seed") et par la récurrence maths, les nombres fournis par le générateur étant les quotients maths. On peut en effet calculer aisément la période d'un tel générateur.

Examinons les cas réellement utiles : maths et maths premier. L'intérêt du premier cas est évident car l'arithmétique modulaire se simplifie considérablement lorsque maths est égal à la taille du "mot machine" ou est une puissance de celui-ci. En pareil cas, le choix maths et maths racine primitive du groupe maths, qui comporte maths éléments, conduit à une période égale à maths (le choix du même maths et de maths ne donne que des nombres impairs, et conduit à une période divisée par 2). Prenant comme exemple (simpliste) maths et maths, on obtient :

maths

Lorsque l'on choisit un module premier, le choix de maths est indifférent : on peut donc le prendre nul. La période maximale est assurée lorsque maths est une racine primitive du groupe maths qui comporte maintenant maths éléments. Cette période vaut alors maths. Prenant comme exemple (simpliste) maths et maths, on obtient :

maths

Un exemple "réel" de ce procédé est le générateur lgm, proposé par Lewis, Goodman et Miller [73] en 1969. On part d'un nombre et l'on calcule ses successeurs par la récurrence maths, le nombre maths ayant été choisi (entre autres) pour être premier et le nombre maths ayant été choisi (entre autres) pour être une racine primitive de maths. On obtient l'algorithme 2 dans lequel maths contient les instanciations successives de l'entier maths.


maths

1.2.3 L'algorithme de Pollard

Lorsque l'on est en présence d'un générateur non congruentiel, la détermination de sa période est un problème moins simple. Un algorithme immédiat à programmer consiste à utiliser une liste pour stocker au fur et à mesure les valeurs obtenues et à comparer chaque nouvelle valeur avec les précédentes. Comme la recherche dans une liste non triée est un processus proportionnel à la longueur de la liste, cet algorithme est en maths pour la place et en maths pour la durée...

Une amélioration consiste à utiliser une structure de données permettant des recherches et des insertions en temps logarithmique, permettant de passer à maths pour la durée. Mais en fait, il existe un algorithme, dû à Pollard, qui détermine la période d'une fonction maths avec une complexité en maths pour la durée et en maths pour la place !

Cet algorithme consiste à utiliser deux processus indépendants, l'un donnant les itérations maths et l'autre les itérations maths, avec initialement maths. On peut donc décrire le processus par deux cyclistes partant du même endroit, le second ayant une vitesse exactement double de la vitesse du premier. Leur trajet a la forme d'un maths: d'abord une partie rectiligne, puis une boucle. Il y aura forcément un moment où le second doublera le premier, qui aura alors parcouru la partie rectiligne et une partie de la boucle. La seconde fois où le second cycliste doublera le premier, ils auront parcouru un nombre entier de tours, à savoir un tour pour le premier, et deux pour le second : l'intervalle de temps séparant les deux événements permet donc une mesure de la longueur de la boucle (algorithme 3).


maths

Par exemple, maths donne maths, montrant que maths ne serait pas un choix optimal du multiplicateur (en dehors du fait que maths est un choix évidemment défectueux du module). On peut ainsi obtenir la période maths associée à chacun des multiplicateurs possibles maths, conduisant à la table :

maths

Il ne faudrait pas en conclure que la recherche d'un bon multiplicateur congruentiel requiert une durée en maths. Il existe en effet des algorithmes logarithmiques pour déterminer si un nombre est ou non une racine primitive d'un nombre premier donné à partir d'une factorisation de maths.


1.2.4 Période du générateur de Fibonnaci

Examinons maintenant le générateur défini par maths c'est à dire par une récurrence à la Fibonacci modulo maths. On obtient l'algorithme 4, qui significativement plus rapide qu'un générateur congruentiel, puisqu'il ne met pas en oeuvre de multiplications. Dans ce paragraphe, nous allons nous intéresser à la période de ce générateur, le reste de ses propriétés seront examinées plus en détail section 1.7.1.
maths

Appelons maths la période de la suite modulo maths obtenue à partir de la condition initiale maths. Nous allons d'une part montrer que cette période vérifie maths et d'autre part indiquer comment choisir le module pour que cette période soit au moins égale à maths pour tout choix raisonnable de la condition initiale, c'est à dire tel que les trois nombres maths soient premiers dans leur ensemble.

Pour une condition initiale donnée maths, cette période est une fonction multiplicative, c'est à dire que maths implique

maths

Il suffit donc de déterminer les maths pour maths, c'est à dire pour les nombres premiers maths et leurs puissances [7].

L'équation caractéristique de la récurrence est maths, dont le discriminant est maths. Il convient donc de distinguer le cas spécial maths, le cas où maths est un carré modulo maths (premier), imposant maths et le cas où maths n'est pas un carré modulo maths, soit maths ou maths.

Pour maths et maths, un examen direct donne maths. Ce résultat se retrouve en remarquant que l'équation caractéristique admet alors maths pour racine double, conduisant à maths. Comme le premier facteur est de période maths (lorsque maths) et le second de période maths (Fermat), on retrouve effectivement la valeur expérimentale. Au passage, on remarque la sensibilité de la période aux conditions initiales : maths aurait donné une période maths.

Pour les maths premiers de la forme maths, le nombre maths est un carré modulo maths et l'équation caractéristique admet deux racines distinctes maths, conduisant à maths. Le théorème de Fermat montre alors que maths est un diviseur de maths. A titre d'exemple, pour maths, on obtient (par examen direct, ou en utilisant l'algorithme de Pollard) : maths et maths.

Pour les autres nombres premiers, soit maths ou maths, le nombre maths n'est un carré modulo maths et le polynôme maths est irréductible sur le corps maths. L'anneau quotient maths est donc un corps, à savoir le seul et unique corps ayant maths éléments, qui se note usuellement maths. Sur ce corps, l'équation caractéristique admet deux racines distinctes maths, et l'on obtient à nouveau maths. Dans cette écriture, maths et maths sont des quantités conjuguées, conduisant à un entier naturel pour valeur de maths.

Le théorème de Fermat montre alors que maths est un diviseur de maths. Et l'on a effectivement maths. Pour les premiers maths, il convient de remarquer que maths (formule de conjugaison de Frobénius) et que maths (produit des racines). On a donc maths et la période est donc un diviseur de maths. A titre d'exemple, pour maths, on obtient : maths et maths.

Passons maintenant aux maths pour maths, maths premier. Pour alléger les notations, nous écrirons maths. Posant maths, on a maths d'où maths. On a donc maths. Si nous supposons que maths n'est pas divisible par maths, on a maths. Nous allons montrer que l'on a alors maths.

Pour maths, on a maths. Pour maths impair, on a : maths. Nous avons donc maths multiple strict de maths et diviseur de maths : on en conclut maths. Ce résultat se généralise aux puissances supérieures. Posant maths (maths) on obtient maths, conduisant à maths et donc à maths.

On a donc maths, maths, maths (maths) ou maths (maths). On en déduit maths, cette valeur étant atteinte pour le choix maths et (par exemple) la condition initiale maths.

Le choix du module maths est particulièrement avantageux, à la fois parce que l'arithmétique modulo maths est aisément implémentable en machine et parce que la période maths est indépendante de la condition initiale du moment que celle-ci contient au moins un nombre impair.

Par contre, les modules maths, qui donnent toujours une période maths, et les modules maths, qui donnent une période au moins égale à maths se prêtent moins bien au calcul, tandis que certains modules premiers conduisent à de mauvaises périodes pour certaines conditions initiales : maths donne une période égale à maths !


previous up next contents index
Previous: 1.1 Pourquoi étudier les Up: 1. Générateurs uniformes Next: 1.3 Le test des   Contents   Index


douillet@ensait.fr
2005-01-04