【发布时间】:2012-02-22 18:43:38
【问题描述】:
假设您有一个哈希数组,代表竞争对手及其中奖概率(0 到 1 之间的浮点数)。喜欢:
[ {:name => "Adam" , :prob => 0.5}
{:name => "Ben" , :prob => 1.0}
{:name => "Chris" , :prob => 0.1}
{:name => "Daniel" , :prob => 0.2}
{:name => "Ed" , :prob => 0.7}
{:name => "Frey" , :prob => 0.5}
{:name => "Gilbert" , :prob => 0.3}
]
我想要一个算法,我可以使用随机数选择三个获胜者,但要尊重每个人的概率。
样本的总概率为3.3
一种合乎逻辑的方法是计算随机值,例如:
val = rand(33)/10.0
并扫描数组,直到找到达到随机数的人。
这种方法有效,但它意味着对数组进行扫描。
我想知道是否会有更直接的解决方案。有什么想法吗?
PS:想象一下这个数组可能有很多元素。
【问题讨论】:
-
我在下面发布了我的解决方案,但是,考虑到您正在处理概率,我认为所有概率的总和应该等于 1。在您的示例中,Ben 有 100% 的机会被选中.
-
是的,你是对的。只是我实际上使用了配额的概念,为了简化问题,我将配额更改为 0 到 1 的数字。