从集合中进行概率选择

时间:2010-08-15 05:28:38

标签: perl math random statistics

假设我想随机选择0到30之间的数字n,其中分布是任意的,而不是统一的。每个数字具有相应的权重P(n):P(0)= 5,P(1)= 1,P(2)= 30,P(3)= 25,依此类推。如何从该集合中随机选择,以便选择数字的概率与其权重成正比?

这种随机选择甚至被称为什么?

我可以看到实现它的一种方法:

  1. 制作查找表V,其中V(n)= V(n-1)+ P(n);基本情况V(0)= P(0)。
  2. 生成一个随机数X,其均匀分布在0和V的最大值之间。
  3. 求出n的最小值,使得V(n)> X
  4. 这样的东西已经在库中实现了吗? (使用Perl。)

2 个答案:

答案 0 :(得分:6)

这实际上是一个非常受欢迎的问题,被称为加权随机选择(或有时加权随机选择)。这是关于它的a complete article

答案 1 :(得分:1)

#!/usr/bin/perl

use strict; use warnings;

my @p = map { ($_) x int(1 + rand 50) } 0 .. 30;
my @s = @p[ map rand @p, 1 .. 10 ];
print "@s\n";