Home > Article > Web Front-end > Which Approach is Best for Generating a Weighted Random Number: Lookup Table or Iterative Summation?
Generate a Weighted Random Number: Efficient Alternatives to Rejection Sampling
While rejection sampling is a straightforward approach for selecting a random number with weighted probabilities, it may not be the most efficient solution in all scenarios. Here are two alternative strategies with distinct performance characteristics:
Constant-Time Lookup Table (via Higher-Order Function)
This approach involves creating a lookup table from the weight specification and returning a function that retrieves values from the table. The benefits include:
However, this strategy requires linear time to build the table and may consume significant memory for large specifications or weights with small or precise values.
Iterative Summation
In this strategy, a random number is generated within the range [0,1) and iteratively compared to the cumulative sum of weights. If the random number is within the cumulative sum for a particular value, that value is returned. The advantages of this approach include:
However, this approach may be more computationally intensive than constant-time lookup.
Conclusion
The choice of approach depends on the specific requirements of the application. Constant-time lookup is ideal for performance-critical scenarios, while iterative summation is more suitable for scenarios with large specifications or weights with small or precise values.
The above is the detailed content of Which Approach is Best for Generating a Weighted Random Number: Lookup Table or Iterative Summation?. For more information, please follow other related articles on the PHP Chinese website!