您的任务是编写一个程序或函数,以固定的总和从间隔[0,1] 中输出 n
随机数s
。
输入值
n, n≥1
,要生成的随机数
s, s>=0, s<=n
,要生成的数字总和
输出量
n
浮点数的随机元组,所有元素的间隔都为[0,1],且所有元素的总和等于s
,以任何方便的明确方式输出。n
在浮点数的限制内,所有有效元组必须具有同等的可能性。
这等于从- n
维单位立方和n-1
穿过(s/n, s/n, …, s/n)
并垂直于矢量的- 维超平面内的点的交点进行均匀采样(1, 1, …, 1)
(请参见图1中的红色区域以获取三个示例)。
图1:n = 3且总和为0.75、1.75和2.75的有效输出平面
例子
n=1, s=0.8 → [0.8]
n=3, s=3.0 → [1.0, 1.0, 1.0]
n=2, s=0.0 → [0.0, 0.0]
n=4, s=2.0 → [0.2509075946818119, 0.14887693388076845, 0.9449661625992032, 0.6552493088382167]
n=10, s=9.999999999999 → [0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999]
规则
- 您的程序应至少在一秒钟之内用
n≤10
或任何有效s完成。 - 如果愿意,您的程序可以在高端独占,即
s<n
半开间隔[0,1)的输出数字(破坏第二个示例) - 如果您的语言不支持浮点数,则可以在小数点后至少十个十进制数字伪造输出。
- 不允许使用标准漏洞,并且允许使用标准输入/输出方法。
- 这是code-golf,所以最短的条目(以字节为单位)获胜。
This is equal to uniformly sampling from the intersection
-我可以看到一个程序仅从该交叉点的角落随机选择。那会有效吗?
s==0 or s==3
。对于的所有其他值s
,该平面的面积非零,您必须均匀地随机选择该平面上的一个点。
s=2.99999999999, n=3
吗?我们可以生成随机实数的倍数1e-9
吗?