首页  >  文章  >  后端开发  >  加权随机选择和替换的合适方法是什么?

加权随机选择和替换的合适方法是什么?

Patricia Arquette
Patricia Arquette原创
2024-10-24 10:15:29725浏览

What is a Suitable Approach for Weighted Random Selection With Replacement?

加权随机选择:克服替换限制

最近,许多开发者都遇到了从列表中加权随机选择元素的挑战,既有和没有更换。虽然存在用于未加权选择和无替换加权选择的有效算法,但事实证明,为带替换的加权选择找到合适的解决方案很困难。

一种实现高效和简单的创新方法是别名方法。它的工作原理是为加权列表创建相同大小的箱。这些 bin 使用位操作有效地索引,避免了耗时的二进制搜索。

要形成别名查找表:

  1. 将权重归一化为 1.0(例如,从 (1 , 1, 1, 1, 1) 到 (0.2, 0.2, 0.2, 0.2, 0.2))。
  2. 确定大于或等于变量数量的最小 2 次幂并创建该数量的分区。在我们的五个选择的示例中,我们将创建八个分区。
  3. 将最小的剩余权重分配给空分区(例如,分区 1 的权重为 0.075)。
  4. 如果分区未满,也为其分配最大权重(例如,分区 2 现在的权重为 0.075 和 0.15)。

重复步骤 3 和 4,直到分配所有原始权重。

期间运行时:

  1. 生成 [0, 1] 范围内的随机数(例如 0.001100000)。
  2. 将随机数移位 log2(num_partitions) 以找到相关分区 (例如,001.1 映射到分区 2)。
  3. 如果分区被分割,则使用移位随机数的小数部分来决定分割。

此方法有效地处理加权随机通过替换进行选择,与基于存储库的方法相比,可显着提高性能,尤其是在选择列表的大部分时。

以上是加权随机选择和替换的合适方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn