gpt4 book ai didi

javascript - (P)RNG - 用种子创建的随机数数组

转载 作者:行者123 更新时间:2023-11-30 10:50:53 24 4
gpt4 key购买 nike

我想使用种子创建一个随机/伪随机数数组。我希望在使用相同种子时创建完全相同的数组,并且我希望数组中的可见图案很少或没有。我正在使用 JavaScript。

这是我正在使用的随机函数,我很满意(抱歉,我忘了原作者是谁):

function random(seed) {
if (!seed) seed = new Date().getTime();
seed = (seed*9301+49297) % 233280;
return seed/(233280.0);
}

这是数组生成:

var superSeed = random();
var nRandom = 100;
var randomArray = new Array();
for (var i = 0 ; i < nRandom ; i++){
randomArray.push(random((superSeed*10)+ (i)));
}

无论我运行多少次,模式似乎都非常相似。 This question好像也差不多,不过因为是矩阵,没看懂在说什么。

谢谢!

最佳答案

在我认为我们可以使用一个相当简单的系列之前,我已经研究过类似的事情,它有两个初始值,然后你可以获得更多。

var a1,b1;

function InitSequence(v1, v2) {
a1 = Math.pow(v1, 5) / Math.pow(v1, 3);
b1 = Math.pow(v2, 8);
lastrand = (a1 + b1) & 0x7fffffff;
}

function SequenceNext() {
var alast = a1;
var nextVal = (a1 + b1) & 0x7fffffff;
b1 = alast;
a1 = nextVal;
return nextVal;
}

然后像这样使用它:

InitSequence(75, 21);
for (var i = 0; i < 99; i++) {
v = SequenceNext();
}

我是这样测试的:

var used = new Array();

InitSequence(75, 21); // any two values will do.

// fill 10k into array.

for (var i = 0; i < 9999; i++) {
v = SequenceNext();
if (undefined != used[v]) {
used[v]++;
} else used[v] = 1;

//document.write(i+": "+v+"<br>");
}

// see if there any duplicates.
var tdup = 0;
for (xx in used) {
ndup = used[xx];
if (ndup > 1) {
document.write("duplicated " + xx + " :" + ndup + "<br>");
tdup += ndup;
}
}
document.write("Total dups " + tdup + "<br>");

这是使用 Fibonacci系列,用数学术语来说,就是Fibonacci的序列Fn数字由递归关系定义 Fibonacci  recurrence relation .我从不同的值开始 - (v1^5)/(v1^3) 和 v2^8;否则它只会是相同的。

关于javascript - (P)RNG - 用种子创建的随机数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com