给出一个整数列表,例如1, 2, 3, 4
,我知道如何根据体重选择项目。示例项目的概率分别为10%,20%,30%和40%。
是否有同样简单的方法根据体重的倒数选择项目?使用此方法,示例列表将等于1, 1/2, 1/3, 1/4
的加权列表(48%,24%,16%,12%),但我希望避免转换和使用浮点算法。 (假设所有整数都是正数且非零。)
答案 0 :(得分:3)
您可以将数字'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.
答案 1 :(得分:0)
首先得到权重之和,称之为S
(例如1 + 1/2 + 1/3 + 1/4 = 2.083
)。然后,为了找到权重w_i
的概率,您将w_i
除以S
(例如1/2.083 = 48%
。
对于一般数字序列,我认为这个表达式没有一个很好的,封闭形式的公式。
权重之和为harmonic numbers。对于大n
,总和收敛到ln(n)+gamma
,其中gamma是Euler-Mascheroni常数(~0.577)。因此,对于较大的n
,您可以使用此公式来估算总和。
编辑:有一些方法可以减少浮点错误。一种这样的方法是计算从最小项到最大项的总和(例如1/n + 1/(n-1) + ... + 1
)。这允许中间计算最大化精度位数。通过这样做,舍入问题应该不是问题。