读书人

求按指定比例随机返回结果的算法,该如

发布时间: 2012-04-11 17:42:33 作者: rapoo

求按指定比例随机返回结果的算法
给定一个整数数组(N1,N2,N3,...,Ni),要求随机打印该数组的元素,使N1出现的比率为N1/(N1+N2+N3+...+Ni),N2出现的比率为N2/(N1+N2+N3+...+Ni),以此类推。性能要求比较高。

谢谢啦!

[解决办法]
楼主看这样的思路对不对,假设数组都为正数,总和为sum,产生一个值在0-sum之间的随机数,如果数组中第n个数比这个随机数大就打印这个数,否则不打印
大概代码如下:

C/C++ code
void randPrint(int k[], int size){    int sum = 0;    int index = 0;    for(; index<size; ++index)  sum += k[index];    srand(time(0));    int randNum = rand()%sum;    for(index=0; index<size; ++index){        if(k[index] > randNum)            printf("%d ",k[index]);    }}int main(){    int k[] = {1,2,3,4,5};    randPrint(k,5);    return 0;}
[解决办法]
楼上的if(k[index] > randNum) 这里满足条件的极少吧。
应该创建一个数组array,1到N1放N1, N1+N2放N2, 依次类推. 然后返回一个array[randNum]就可以了。这种办法相当于构造了一个均匀分布。

读书人网 >软件架构设计

热点推荐