读书人

一个随机生成数组的算法有关问题

发布时间: 2012-09-17 12:06:52 作者: rapoo

一个随机生成数组的算法问题!
给定最小值min、最大值max,随机生成指定长度N的浮点型数组,并且该数组的平均值等于avg;求简单的算法。

[解决办法]
相当于在n维空间里,先作一个x1+...+xn=N*avg的平面,然后截取它在[min,max]^n的正方体内的那个部分,然后取样。直接按序随机每一个元素就可以了,不过需要仔细计算每一步的概率分布。
[解决办法]
很简单 ,每次随机生成一个数值前,先计算最大可能数pMax,最小可能数pMin,再在这个区间里取随机就好了,python解法

Python code
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) 

读书人网 >软件架构设计

热点推荐