Comment obtenir un nombre aléatoire avec chaque nombre a sa propre probabilité

Par exemple, je veux obtenir un nombre aléatoire de l’ensemble S = {0, 1, 2, 3}. Mais au lieu que chaque nombre ait la même probabilité de s’afficher (ce qui est 25%), maintenant j’ai une probabilité différente pour chaque nombre, disons {50%, 30%, 20%, 10%}. Comment je code ceci? En Java ou en C # (je préfère le C #).

La méthode Alias ​​est de loin mon préféré pour le faire.

http://code.activestate.com/recipes/576564-walkers-alias-method-for-random-objects-with-diffe/

Je n’ai pas revu ce code mais c’est un excellent résultat sur Google.

Voici une autre explication bien meilleure

http://pandasthumb.org/archives/2012/08/lab-notes-the-a.html

En fait, j’utilise assez souvent cette question pour des entretiens, car si vous ne l’avez jamais vue auparavant, cela peut être assez déroutant.

Si ce qui précède est trop difficile à mettre en œuvre, il existe une boucle plus simple dans la solution de saisie.

Utiliser PHP puisqu’il est plus facile d’afficher le code.

function getNumberFromDissortingbution($dist) { $totalProbability = 0; $randomNumber = mt_rand(0, mt_getrandmax()) / mt_getrandmax(); //uniform random number between 0-1 foreach($dist as $number => $chance) { if (($totalProbability += $chance) <= $randomNumber) { return $number; } } return null; //only reachable on bad input } 

Si le jeu est petit, vous pouvez construire un tableau contenant le bon nombre de chaque valeur dont vous avez besoin pour obtenir votre dissortingbution, par exemple. 1 1 1 2 2 3 fournirait 3 fois plus de chances d’obtenir un 1 que d’obtenir un 3. Vous utiliseriez ensuite la longueur du tableau pour déterminer le nombre aléatoire que vous utilisez comme index.