如果是整数的话,其实是比较简单的,因为有穷举的算法保底。
http://nilnul.com/app_/nilnul._stat_/finite/measures/rational/algorithms/mean2randomSample/Page.aspx
是一个 【0,100】抽5个数使得和为给定的数的例子。
源代码:
https://github.com/nilnul/nilnul._stat_._LIB_/blob/nilnul-pub/dist_/finite/survey_/_constraint/_boundSum/_algos/ByProportionalSelect.cs
比这稍复杂的是允许非整数。这个我也拟了个算法,有也几年了;一直没提笔,最近迫于写了个论文稿件,也写差不多了;但我对其中的数学还没有把握,正想顺便请版上的牛人们帮忙给审阅一下,欢迎版友们赐教啊。
【 在 bfield 的大作中提到: 】
: 谢谢关于这个问题回答的版友们,给了很好的答案,有一个版友raku语言一句话就找到很多可能的选择。
: 实际上我昨天那个描述显得有点特殊了,我给一个比较完整的问题描述,而且希望更充分考虑数字产生的随机性,我发现这个问题非常难,我即使设定被分解的整数为85,还是分成5份,只是每个数加了不同的限制,就难以找到答案。让chatgpt给了很多次代码都不能解决,问题如下:
: 将整数N随机分成n个随机数N1,N2,...,Nn,N1+N2+...+Nn=N,n是事先指定的,但是每个随机数都要在指定范围内产生, 如N1 in [N1_,N1_y],N2 in [N2_x,N2_y],..., Nn in [Nn_x,Nn_y]。
: ...................
--
FROM 183.95.135.*