2010-12-04 5 views
0

Possible en double:
Expand a random range from 1-5 to 1-7génération de nombres aléatoires

Salut, Cette question est tirée de http://blog.seattleinterviewcoach.com/2009/02/140-google-interview-questions.html

Étant donné une fonction qui produit un nombre entier aléatoire dans la gamme 1 à 5, écrire une fonction qui produit un nombre entier aléatoire dans la plage 1 à 7.

Je ne suis pas recevoir un moyen de générer tous les nombres aléatoires 1 à 7, avec une probabilité pratiquement égale à l'aide de 1 à 5 générateur aléatoire.

Quelqu'un pourrait-il le résoudre?

+0

La distribution doit-elle être uniforme? Obtenez-vous une distribution uniforme de la fonction fournie? Pourriez-vous simplement ignorer la fonction fournie? :) –

Répondre

1

Je suppose que la fonction qui vous est fournie fournit des nombres distribués uniformément et que la fonction que vous devez écrire renvoie également des nombres uniformément distribués.

Le pseudo-code suivant illustre la technique standard (appelée rejection sampling):

do { 
    rand25 = (rand5() - 1) * 5 + rand5; // 1-25 
} while (rand25 > 21); 
return (rand25 - 1)/3 + 1; 
-1

Qu'en est-func() + func()% 3?

+0

vient de remarquer, la probabilité doit être la même. Cette solution change la distribution. – qutron

+0

C'est une mauvaise idée car elle détruit les propriétés de distribution de 'func()'. Dans 'func()% 3', obtenir un' 1' ou '2' est deux fois plus susceptible d'obtenir' 0', en supposant que 'func()' ait une distribution égale. – bitmask

Questions connexes