dan*_*nem 0 algorithm math combinatorics
我正在开发一个有趣的项目,我需要一个算法来做如下:生成一个长度的数字列表n,加起来x
我会满足于整数列表,但理想情况下,我希望留下一组浮点数.
如果这个问题没有得到充分研究,我会非常惊讶,但我不确定该寻找什么.
我过去曾经解决过类似的问题,但这个问题本质上是截然不同的.在我生成将加起来为x的数字列表的不同组合之前.我确信我可以简单地强迫这个问题,但这似乎不是理想的解决方案.
任何人都知道这可能被称为什么,或如何接近它?谢谢大家!
编辑:为了澄清,我的意思是列表应该是长度N,而数字本身可以是任何大小.
edit2:对于我对'set'的不当使用感到抱歉,我使用它作为列表或数组的所有术语.我明白它引起了混乱,我道歉.
这是在Python中如何做到这一点
import random
def random_values_with_prescribed_sum(n, total):
x = [random.random() for i in range(n)]
k = total / sum(x)
return [v * k for v in x]
Run Code Online (Sandbox Code Playgroud)
基本上你选择n个随机数,计算它们的总和并计算一个比例因子,这样总和将是你想要的.
请注意,这种方法不会产生"统一"切片,即如果在给定总和的所有分布中随机选取,则您将获得的分布将更倾向于"平等".
要查看原因,您只需描绘算法在具有规定总和的两个数字(例如1)的情况下所执行的操作:

该点P是通过拾取两个随机数得到的通用点,它在正方形内部是均匀的[0,1]x[0,1].该点Q是通过缩放获得的点P,使得总和需要为1.从图中可以清楚地看出,靠近中心的点具有更高的概率; 例如,通过投射对角线上的任何点可以找到正方形的正中心(0,0)-(1,1),而该点将(0, 1)被发现仅投射点(0,0)-(0,1)......对角线长度是sqrt(2)=1.4142...正方形边1.0.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |