【发布时间】:2020-03-14 20:56:53
【问题描述】:
我的问题是这个问题的延伸:Weighted random numbers
我正在尝试实现加权随机数。我目前只是 把我的头撞在墙上,无法弄清楚。
在我的项目中(Hold'em 手牌范围,主观全押赢率 分析),我正在使用Boost的随机函数。所以,假设我想要 选择 1 到 3 之间的随机数(因此选择 1、2 或 3)。升压的 mersenne twister 发电机就像一个魅力。但是,我 希望选择权重,例如:
1 (weight: 90) 2 (weight: 56) 3 (weight: 4)Boost 是否为此提供了某种功能?
扩展:允许用户动态改变给定键的权重。
如何最佳地解决问题?
天真的解决方案可能是扫描所有元素,根据新的权重调整所有元素的权重……但更新的时间为 O(n)。这是非常低效的。我们如何做得更好?
我希望update(key, w) 和get() 优于或等于O(logn)
【问题讨论】:
-
为什么是python标签?
-
您注意到 Boost.Random 文档中的
discrete_distribution了吗? -
@Shawn,现在在
std。 -
@GiovanniCerretani 是的,是的。但是,OP 指出他使用的是 Boost 库,而不是标准库。
-
然而,
discrete_distribution没有改变概率的接口。唯一的方法是创建一个新的discrete_distribution。