Elegant way to generate a random value regarding percentage?
-
12-12-2019 - |
Question
I have N values (integer). I'd like to know what is the most elegant way to randomly pick one of those values regarding a percentage. For example, for a 3 values example:
- Value 1 has 30% chance to get picked
- Value 2 has 12% chance to get picked
- Value 3 has 45% chance to get picked
I need this for a program i'm developing with Java but a pseudo code algorithm or a code in any other language would be ok.
Solution
One way of doing this without calculating values to use is
double d = Math.random() * 100;
if ((d -= 30) < 0) return 1;
if ((d -= 12) < 0) return 2;
if ((d -= 45) < 0) return 3;
return 4;
OTHER TIPS
Proposed algorithm:
- generate a random number (
n
) between0
and1
(assuming your random generator is well distributed) - if
n < 0.30
return value1
- if
n < 0.42
return value2
- else if
n < 0.87
return value3
- else say Hello (your numbers don't add up to 100%)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow