java大数据颇有难度算法

例如:给定一个大数 count=80000000,随机生成n=4500000个数。要求:1、这些随机数范围可控max=20(例如:20以内)2、这些随机数和为8000000如果觉得简单再给条件。3、max出现的次数在m=10000次4、这些count,n,max,m都是可变的参数。
一句话描述下一个例子:随机生成500000个最大值为20和为8000000的数,要求20在这500000个数中出现10000次。

第1个回答  推荐于2016-05-18
先指出一下楼主你给出的数据是没办法做
500000(50万)个数最大值时20,要求和为80000000(8千万)
500000x20=10000000(1千万)连一半都不到,更何况20只能出现10000次...

要求完成这个算法没有难度,只不数据量过于庞大,对程序员来说没有难度,但是对设备来说压力不小追问

你已看出举例有问题,说明你已经理会我的意思。我要的是一个通用的算法,一段实现这个功能的java代码。你能给出一个合理的代码不?

追答public static void main(String[] args){

//条件修改为:总和为800,最大值20,共50个数,20最多出现10次

final int count = 800;          //总和
final int max = 20;             //最大值
final int m = 10; //最大值出现次数
final int n = 50; //数字数

int [] array = new int [n];
int num = m;
int sum = count;
Random random = new Random();

//先随机为array所有变量赋值

for(int i = 0; i < n; i++){
do{
if(sum >= max)
array[i] = random.nextInt(21);
else 
array[i] = random.nextInt(sum+1);
}while(num <= 0 && array[i]==max);
if(array[i]==max)num--;
sum -= array[i];
}


//如果结束后结果并不是所要的最大值,随机将某一位上的数补1,直至达到要求
while(sum > 0){
int a = random.nextInt(50);
if (array[a] !=  max){ //
if(array[a]==(max-1) && num > 0){
num--;array[a]++;sum--;
}else if(array[a] < (max-1)){
array[a]++;sum--;
}
}
}

for(int i = 0; i < n; i++){
System.out.print(""+array[i]+" ");
if((i+1)%10 == 0)System.out.print("\r\n");
}
}

本回答被提问者采纳
第2个回答  2014-07-17
没明白...
相似回答