读书人

带约束的随机数有关问题

发布时间: 2012-06-20 20:37:21 作者: rapoo

带约束的随机数问题
谢谢你看此贴.

问题:生成n个[-0.5,1.5]之间的随机数使得其和为1.

请问怎样做才可以"尽可能的随机"?

[解决办法]
这里最关键的就是确定每次生成随机数的数值范围,[-0.5,1.5]是最直接的要求,还有一个隐含要求:使得其和为1。
所以,我们主要计算隐含要求限定的数值范围,然后和[-0.5,1.5]取交集,就能获得实际的随机数值范围了。

第一个数,隐含要求规定其最小值为(2.5-1.5*n),这样只有后面(n-1)个数全是1.5,才能保证和为1;同理求出其最大值为(0.5+0.5*n),只有后面全是-0.5,才能保证和为1;将这个范围与[-0.5,1.5]取交集后,得到第一个数的范围,然后在范围内取随机数;

第二个及以后的数,分析方法同上,只不过第一个数已经确定,可以直接带入运算。

实现成程序也是很简单的事情。

读书人网 >C++

热点推荐