Ste*_*pan 1 java random algorithm
我正在寻找一种简单的方法来填充大int[] testArray数据.方法应接受单个参数来生成确定性的整数序列,但乍看之下看起来像噪声.
想到这样的事情,但数据可能有模式.
public int[] populate(int arraySize, int somePrime){
int[] testArray = new int[arraySize];
int offset = -100000;
long fib = 0; long fibm1 = 1; long fibm2 = 1;
//...
for(int i = offset; i< testArray.length; i++){
fib= fibm1+ fibm2;
fibm2= fibm1;
fibm1= fib;
if(i >= 0){ testArray[i] = (int) fib%somePrime; }
}
return testArray[i];
}
Run Code Online (Sandbox Code Playgroud)
什么是更好的方法?
您可以通过使用固定种子初始化随机数生成器来完成此操作.它生成的序列对于不知道种子的人来说是随机的,但是你将能够通过再次使用相同的种子来重建序列.
例如:
Random r = new Random(mySeed);
int[] testArray = new int[arraySize];
for(int i=0; i<arraySize; i++) {
testArray[i] = r.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
更新:此方法容易被某人通过反复试验猜测您的种子,特别是如果它是一个小数字或其他可预测的.您还可以存储一个秘密的固定种子,并将两者合并为一个更长的种子.但是你应该小心你如何做到这一点,因为存在陷阱.请参阅确定性地组合多个熵源.