Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Elegant way to generate a random value regarding percentage?

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.

like image 501
nathan Avatar asked Oct 01 '12 11:10

nathan


People also ask

How do I randomize a percentage in Excel?

If you want to use RAND to generate a random number but don't want the numbers to change every time the cell is calculated, you can enter =RAND() in the formula bar, and then press F9 to change the formula to a random number.

What are random values?

As the term suggests, a random number is a number chosen by chance -- i.e., randomly, from a set of numbers. All the numbers in a specified distribution have equal probability of being chosen randomly.


2 Answers

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;
like image 72
Peter Lawrey Avatar answered Sep 22 '22 17:09

Peter Lawrey


Proposed algorithm:

  • generate a random number (n) between 0 and 1 (assuming your random generator is well distributed)
  • if n < 0.30 return value 1
  • if n < 0.42 return value 2
  • else if n < 0.87 return value 3
  • else say Hello (your numbers don't add up to 100%)
like image 41
assylias Avatar answered Sep 22 '22 17:09

assylias