in reply to Weighted random numbers generator
You can swap memory for time to do this in O(1). Populate an array with your values in the distribution you want, and select a random index.
Your example, ( 1, 1.25, 3.6, 2), is ( 20/20, 25/20, 72/20, 40/20), so:
If time is not an issue, your method is fine, except that < is probably better than <= in the comparisons. That is because rand() returns a number less than one.{ my @dist = ( (0) x 20, (1) x 25, (2) x 72, (3) x 40 ); sub choose_weighted { $dist[ rand(@dist)]; } }
After Compline,
Zaxo
|
---|
Replies are listed 'Best First'. | |
---|---|
•Re: Re: Weighted random numbers generator
by merlyn (Sage) on Mar 13, 2003 at 18:17 UTC | |
by Zaxo (Archbishop) on Mar 13, 2003 at 18:28 UTC | |
by no_slogan (Deacon) on Mar 13, 2003 at 18:48 UTC |