arrays - 用于选择数组中的半随机项的伪随机算法

标签 arrays algorithm random indexing

我有一个简单的整数数组(如果您愿意,也可以设置),我们称它为 X。我还有另一个数组 W,它存储数组 X 中元素的“权重”。“权重”表示 n-应该选择第一个元素。现在我需要一种方法(算法)来(伪)根据数组 W 中定义的“权重”从数组/集合 X 中随机选择一个元素。

例如,如果我的 W 看起来像这样: W[0] = 2; W[1] = 4; W[2] = 6;

这意味着从数组 X 中选择第 N 项的概率是: X[0] = 16.6% X[1] = 33.3% X[2] = 50%

所以方法 get_pseudorandom_item(X) 应该在所有时间的一半左右返回第二个项目。

非常感谢任何关于如何(以任何编程语言)实现这一点的想法或建议。 谢谢。

最佳答案

  1. 用权重的部分和生成数组P,即

    (P0 = W0), (P>1 = W0 + W1), ..., ( Pn = W0 + W1 + ... + Wn)

    (实际上,如果之后不需要权重,您可以在 W 内执行此操作)。

  2. 在[0, Pn)中生成一个随机数r,其中 Pn 表示最后一个这样的总和(即所有权重的总和)。

  3. 找到最小(第一个)部分和大于您生成的数字的索引k:

    Pk> r ∧ ∀ a <k : Pa <r

  4. 使用该索引选择您的实际元素:Xk

关于arrays - 用于选择数组中的半随机项的伪随机算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408740/

相关文章:

c++ - 如何以n位数组的方式生成所有n位数字?

c++ - Random 每次都返回相同的输出

c - MPI C 中每个进程生成的随机数

PHP 网站 - mysql 数据库 - 函数数组

java - PacMan 网格 2D 阵列 JAVA

javascript - 更优雅的数组二次排序

android - admob 广告频率(频率上限)如何运作?

c - 指向数组中值的指针?

c - 如何编写满足要求的C程序

algorithm - 长度为 X 的最频繁子串