一个随机生成数组的算法问题!
给定最小值min、最大值max,随机生成指定长度N的浮点型数组,并且该数组的平均值等于avg;求简单的算法。
[解决办法]
相当于在n维空间里,先作一个x1+...+xn=N*avg的平面,然后截取它在[min,max]^n的正方体内的那个部分,然后取样。直接按序随机每一个元素就可以了,不过需要仔细计算每一步的概率分布。
[解决办法]
很简单 ,每次随机生成一个数值前,先计算最大可能数pMax,最小可能数pMin,再在这个区间里取随机就好了,python解法
import randomdef foo2(minV,maxV,N,avg): total = N*avg result = [] for i in range(N,0,-1): pMin = max(total-(i-1)*maxV,minV) pMax = min(total-(i-1)*minV,maxV) v = random.uniform(pMin,pMax) result.append(v) total-=v print(result,sum(result),sum(result)/N)