赞
踩
几个答案建议选择随机百分比,并取得差异。正如Nikita Ryback所指出的那样,这不会给所有可能性的统一分配;特别是零将比预期的频率低。
为了解决这个问题,想想从100%的百分比开始,并插入分隔线。我会用10:
% % % % % % % % % %
有十一个地方我们可以插入一个分隔线:任何两个百分点之间,或在开始或结束。所以插入一个:
% % % % / % % % % % %
这代表选择四和六。现在插入另一个分隔线。这一次,有十二个地方,因为已经插入的分隔符创建和额外的一个。特别是有两种方式可以得到
% % % % / / % % % % % %
要么插入前一个分频器之前或之后。您可以继续进行该过程,直到您拥有所需的分隔线(少于百分比数)。
% % / % / % / / % % % / % % % /
这对应于2,1,1,0,3,3,0。
我们可以证明这给出了均匀分布。 100个到k个部分的组合数是二项式系数100 k-1选择k-1。那是
(100k-1)(100k-2)… 101 /(k-1)(k-2)* … * 2 * 1
因此,选择任何特定组合的概率是这样的倒数。当我们一次插入一个分频器时,首先我们选择101个位置,然后选择102,103等,直到达到100 k-1。因此,任何特定的插入序列的概率为1 /(100 k-1)* … * 101。多少插入序列产生相同的组成?最终组合包含k-1分频器。他们可以按任何顺序插入,所以有(k-1)!产生给定组合物的序列。因此,任何特定组合的概率正是它应该是什么。
在实际的代码中,你可能不会代表你这样的步骤。你应该能够坚持数字,而不是百分比和分隔符的序列。我还没有想过这个算法的复杂性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。