排序列表中的加权随机选择

卡曼德

我有一个很大的项目列表,这些项目按“权重”排序。我需要能够从此列表中随机选择项目,但是更接近开始的项目(更大的权重)必须有更大的机会根据“精英”因素进行选择。

我意识到以前也曾问过类似的问题,但这里的问题是此列表会随着时间的推移而变化。随着最后一项的删除,新值将被分类到列表中(以保持“优化”值池的大小不变)。

首先,最有效的选择方式是什么?选择必须从50到1000个项目长的列表中实时进行。

其次,在这里使用的最佳数据结构是什么?我正在使用C#。

我只是想到了一个可能的解决方案,但我希望对此想法有一些反馈。如果我要生成一个在一定范围内的随机浮点值,然后对它进行平方运算,该怎么办?较小的值将返回较小的值,较大的值将返回较大的值。据我所知,将此结果映射到列表的长度应该可以达到预期的效果。听起来对吗?

脱壳

不幸的是,我现在无法提供任何代码,但是有一些想法:

当您的列表从高权重到低权重排序时,您应该能够使用基于正态分布的随机数生成器。如果您手边没有这样的随机数生成器,则可以使用以下代码将均匀分布转换为正态分布:随机高斯变量

我很难解释,但我会尝试:您可以在0处定义偏差(平均值),在3处定义sigma(偏差),然后从生成的数中取绝对值,因为您可能会得到负数。

这将为您提供一个数字生成器,该数字生成器可能具有较高的偏差数(在上面的示例中为0),并且数字偏离此值的可能性较低。

就像我说的那样,我很难解释

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章