algorithm - 如何从反向加权列表中随机选择?

标签 algorithm language-agnostic

给定一个整数列表,例如1, 2, 3, 4,我知道如何根据重量选择元素。示例项目的概率分别为 10%、20%、30% 和 40%。

有没有一种同样简单的方法可以根据重量的倒数来选择元素?使用这种方法,示例列表将等于 1, 1/2, 1/3, 1/4 (48%, 24%, 16%, 12%) 的加权列表,但是我想避免浮点运算的转换和使用。 (假设所有整数都是正数且非零。)

最佳答案

你可以除以数字' least common multiple由每个数字得到整数比例。

对于 [1, 2, 3, 4],这是 12。你的权重是 12/1=12, 12/2=6, 12/3=4, 12/4= 3.

您也可以将它们全部相乘,而不必理会 LCM。数字会更高,但比例相同:24/1=24、24/2=12、24/3=8、24/4=6。

关于algorithm - 如何从反向加权列表中随机选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762569/

相关文章:

c# - A* 表示认识到实现目标是不可能的

java - 解决 Dice for Risk 游戏的这个 java 算法

design-patterns - 在 DDD 中在哪里实现聚合级别的权限?

algorithm - 这个谜题——子集和?

c# - 单维峰拟合

c# - 数组的平衡索引如何工作?

c++ - 2个数字之间的随机数选择器

按格式不一致的耗时字段排序(k8s 事件按事件发生后的实际时间)

regex - 匹配正则表达式的随机字符串

math - 如何计算两个 AABB 之间的 Minkowski 差异(没有矢量数学)?