web-dev-qa-db-fra.com

Qu'est-ce qu'une graine en termes de génération d'un nombre aléatoire?

Qu'est-ce qu'une graine en termes de génération d'un nombre aléatoire?

J'ai besoin de générer des centaines à des milliers de nombres aléatoires, j'ai beaucoup lu sur l'utilisation d'une "graine". Qu'est-ce qu'une graine? Est-ce une graine d'où partent les nombres aléatoires? Par exemple, si je fixe ma valeur de départ à 5, cela générera-t-il des nombres de 5 à ma limite? Donc ça ne me donnera jamais 3 par exemple.

J'utilise C++, donc si vous fournissez des exemples, ce serait bien si c'était en C++.

Merci!

27
SirRupertIII

Ce qui est normalement appelé une séquence de nombres aléatoires est en réalité une séquence de nombres "pseudo-aléatoires" car les valeurs sont calculées à l'aide d'un algorithme déterministe et la probabilité ne joue aucun rôle réel.

La "graine" est un point de départ pour la séquence et la garantie est que si vous partez de la même graine, vous obtiendrez la même séquence de nombres. Ceci est très utile par exemple pour le débogage (lorsque vous recherchez une erreur dans un programme, vous devez pouvoir reproduire le problème et l'étudier, un programme non déterministe serait beaucoup plus difficile à déboguer car chaque exécution serait différente) .

Si vous avez juste besoin d'une séquence aléatoire de nombres et que vous n'avez pas besoin de la reproduire, utilisez simplement l'heure actuelle comme graine ... par exemple avec:

srand(time(NULL));
36
6502

Donc, disons-le de cette façon:

si vous et votre ami définissez la graine égale au même nombre, alors vous et votre ami obtiendrez les mêmes nombres aléatoires. Donc, si nous écrivons tous ce programme simple:

#include<iostream>
using namespace std;
void main () {
    srand(0);
    for (int i=0; i<3; i++){
        int x = Rand()%11;          //range between 0 and 10
        cout<<x<<endl;
    }
}

Nous obtiendrons tous les mêmes nombres aléatoires qui sont (5, 8, 8).

Et si vous voulez obtenir un nombre différent à chaque fois, vous pouvez utiliser srand (time ())

4
Anwarvic