previous up next contents index
Previous: 2.1 Sélection dans un Up: 2. Générateurs non uniformes Next: 2.3 Présentation du problème   Contents   Index

Subsections

2.2 Echantillons et permutations

2.2.1 Sélection d'un échantillon (maths connu)

Les algorithmes de la section précédente ne résolvent pas totalement le problème de l'échantillonage, c'est à dire la sélection aléatoire uniforme de maths éléments (différents) parmi maths. Dans bien des situations concrètes, il est absolument hors de question d'enregistrer la totalité d'un processus pour sélectionner ensuite l'échantillon voulu. Il faut au contraire "sélectionner au vol" c'est à dire décider en temps réel d'enregistrer ou non l'événement qui est en train de se produire, et cela de façon à obtenir directement l'échantillon voulu, tout en s'assurant que tout autre échantillon aurait eu une égale chance d'être sélectionné.

Il est clair qu'il ne suffit pas de sélectionner chaque événement avec une probabilité maths, car la taille de l'échantillon obtenu ne vaudrait maths qu'en moyenne seulement (avec une variance maths rendant peu probable que cette taille soit effectivement maths). Une méthode effective est donnée par l'algorithme 17 (Fan 1962) : si maths est le nombre d'événements qui sont déjà passés et maths le nombre de ceux qui ont été déjà sélectionnés, nous sélectionnons l'événement à venir avec la probabilité maths.


maths

Dans notre description de l'algorithme, maths est le processus à échantilloner, tandis que l'échantillon retenu se retrouve dans le fichier maths. Les fonctions maths pour leur part effectuent ce que l'on imagine, à savoir lire l'événement en cours, l'écrire dans le fichier ou sauter l'événement en cours.

Il est tout à fait remarquable que cet algorithme (1) arrive toujours à sélectionner les maths événements voulus (2) se termine le plus souvent avant que le processus à échantillonner soit lui-même terminé (3) assure une probabilité de sélection égale à chacun des événements.

2.2.2 Sélection d'un échantillon (maths inconnu)

Le problème se complique lorsque maths n'est pas connu d'avance, car l'algorithme de Fan devient inutilisable. Il convient alors d'utiliser l'algorithme 18 (Waterman) : on commence par sélectionner les maths premiers événements, puis on décide de temps en temps d'abandonner l'un des événements déjà retenus, et d'en retenir un autre. Comme on se place toujours dans l'hypothèse où le processus à échantilloner, mais aussi l'échantillon lui-même est trop vaste pour pouvoir tenir en mémoire centrale, on est amené à stocker "au vol" les événements retenus dans un fichier intermédiaire maths, tout en gérant en mémoire centrale une table d'index pointant vers les événements qui seront effectivement retenus lorsque le processus à échantillonner sera terminé (condition maths).


maths

La méthode de sélection proposée par Waterman (pour les événements de numéro maths) est la suivante. Lorsque le maths-ième événement se produit, la probabilité pour qu'il soit immédiatement rejeté est maths. Dans le cas contraire, il vient prendre la place de l'un des maths éléments précédemment sélectionnés, l'élément à supprimer étant choisi uniformément parmi les maths éléments faisant partie, à ce moment là, de la sélection provisoire.

Vérifions par récurrence la correction de cet algorithme : supposons qu'une fois les maths premiers événements lus, ces événements aient eu une égale probabilité de faire partie des maths sélectionnés à cette date. Une telle situation se produit avec certitude lorsque maths. A l'étape suivante, le maths-ième événement est sélectionné avec la probabilité maths tandis que les maths premiers ont désormais la probabilité maths d'être encore sélectionnés. On voit donc que l'équiprobabilité se généralise étape par étape.

Il reste à estimer la praticabilité de l'algorithme, c'est à dire la taille potentielle du fichier temporaire. Une analyse à l'aide de séries génératrice montre que maths. Si donc maths, on a maths. Bien entendu, si la taille mémoire est suffisante pour contenir l'échantillon tout entier, il suffit de stocker les événements retenus dans une table et d'écraser directement l'événement abandonné par l'événement retenu pour le remplacer.

2.2.3 Numérotation des permutations

Intéressons nous maintenant aux algorithmes permettant de déterminer une permutation aléatoire d'un ensemble de maths éléments, donné dans un certain ordre, c'est à dire sous la forme d'une liste. Pour cela, il est commode de disposer d'une façon de numéroter ces permutations. L'algorithme 19 (Moses, 1963) répond à cette question en déterminant une transposition après l'autre quelle est la permutation maths qui permet d'ordonner cette liste dans l'ordre croissant.

Le cardinal maths de la liste est déterminé (maths), puis une copie de cette liste est faite dans une maths, à la fois pour ne pas modifier la liste d'origine et pour accélérer le processus. Puis la place maths de l'élément maximal est déterminée. Cette place est nécessairement unique, puisque nous sommes en train de trier un ensemble. La transposition maths est donc telle que maths est une permutation des maths plus petits éléments de l'ensemble, le plus grand étant revenu à la dernière place.


maths

Si l'on pose maths (le nombre maths étant déterminé récursivement) on obtient un nombre compris entre 0 et maths, et on vérifie aisément que ce nombre caractérise la permutation maths. Pour maths et maths, cet algorithme donne les résultats suivants :

maths

maths

On remarquera que dans chacune des maths colonnes le dernier élément est à la même place, tandis que chaque ligne correspond à la même permutation des maths premiers éléments.

2.2.4 Permutation aléatoire (n petit)

Pour obtenir une permutation aléatoire de maths éléments lorsque maths est nettement inférieur à la période du générateur uniforme dont on dispose, il suffit de tirer au sort le numéro de la permutation et d'inverser l'algorithme précédent. On obtient l'algorithme 20.


maths

Dans le code proposé, le résultat fourni par la commande maths est le reste de la division de maths par maths, c'est à dire la quantité maths, mais en outre, par effet de bord, le quotient de la division est affecté à la variable fournie en troisième paramètre : maths est donc automatiquement mis à jour.

2.2.5 Permutation aléatoire (n quelconque)

Lorsque maths augmente, la précision du générateur uniforme ne permet plus de procéder en une seule étape, et il convient maintenant de l'utiliser pour déterminer chaque transposition l'une après l'autre. On obtient l'algorithme 21 (Moses 1963).


maths

La figure 2.2 donne l'histogramme de la répartition de maths instanciations de maths, obtenues par composition de maths et de maths. On vérifie que les nombres obtenus se comportent effectivement comme autant d'instanciations d'une variable entière uniformément répartie dans maths (le score au test du maths est de maths).

Figure 2.2: Test de l'algorithme de Moses.
maths


previous up next contents index
Previous: 2.1 Sélection dans un Up: 2. Générateurs non uniformes Next: 2.3 Présentation du problème   Contents   Index


douillet@ensait.fr
2005-01-04