从 seed/key 创建大型 array/data
Creating large array/data from seed/key
首先,我使用的语言是节点 (javascript),但我实际上是在寻找它背后的计算机科学,以及如何真正做到这一点,而不仅仅是代码。
基本上我有一个 2,000 x 2,000 的二维数组(我的意思是 2,000 条目长数组中的每个条目都有自己的 2,000 个条目)。在这个数组中,我有值 0、1、2、3 等。它们间隔不同,每个出现的常见程度也不同。我想要做的是根据一个键生成这个数组,idc key/seed 有多长,只是一个可以完成工作的合理长度。如果它是相同的键,我希望相同的键生成相同的数组,如果它是不同的键,我希望生成不同的数组。基本上获取一个密钥并从中生成更长的数据,但没有可识别的模式出现在该数据中。
我对此的想法是有一个键,它是某种小数,我乘以一堆常量以获得数组中的位置,但说实话我真的不知道从哪里开始。本质上它就像我的世界如何将种子变成地图,同样的种子将再次生成相同的地图。
任何可以播种的随机数生成器 (RNG) 都会为给定的种子提供相同系列的随机值,并且应该没有可确定的模式。不幸的是,the default RND for javascript is not seedable; as per this SE post, you will need to write your own or use a someone else's.
一旦您有了可播种的 RNG,对于每个条目,首先获取一个随机值,然后将随机值转换为所需的输出值。有许多不同的方法可以进行转换;如果你只有几个,我会做这样的事情(假设 random_value 在 0 和 1 之间):
if(rand_value <= 70){
output_value = 1;
}
else if(rand_value <= 90){
output_value = 2;
}
else if(rand_value <= 97){
output_value = 3;
}
else {
output_value = 4
}
这给出了 70%、20%、7% 和 3% 分别获得 1、2、3 或 4;根据需要调整值。注意:如果你有很多输出值,你应该编辑你的问题来反映这一点,因为有比巨大的 if else 块更干净的方法来解决这个问题。
首先,我使用的语言是节点 (javascript),但我实际上是在寻找它背后的计算机科学,以及如何真正做到这一点,而不仅仅是代码。
基本上我有一个 2,000 x 2,000 的二维数组(我的意思是 2,000 条目长数组中的每个条目都有自己的 2,000 个条目)。在这个数组中,我有值 0、1、2、3 等。它们间隔不同,每个出现的常见程度也不同。我想要做的是根据一个键生成这个数组,idc key/seed 有多长,只是一个可以完成工作的合理长度。如果它是相同的键,我希望相同的键生成相同的数组,如果它是不同的键,我希望生成不同的数组。基本上获取一个密钥并从中生成更长的数据,但没有可识别的模式出现在该数据中。
我对此的想法是有一个键,它是某种小数,我乘以一堆常量以获得数组中的位置,但说实话我真的不知道从哪里开始。本质上它就像我的世界如何将种子变成地图,同样的种子将再次生成相同的地图。
任何可以播种的随机数生成器 (RNG) 都会为给定的种子提供相同系列的随机值,并且应该没有可确定的模式。不幸的是,the default RND for javascript is not seedable; as per this SE post, you will need to write your own or use a someone else's.
一旦您有了可播种的 RNG,对于每个条目,首先获取一个随机值,然后将随机值转换为所需的输出值。有许多不同的方法可以进行转换;如果你只有几个,我会做这样的事情(假设 random_value 在 0 和 1 之间):
if(rand_value <= 70){
output_value = 1;
}
else if(rand_value <= 90){
output_value = 2;
}
else if(rand_value <= 97){
output_value = 3;
}
else {
output_value = 4
}
这给出了 70%、20%、7% 和 3% 分别获得 1、2、3 或 4;根据需要调整值。注意:如果你有很多输出值,你应该编辑你的问题来反映这一点,因为有比巨大的 if else 块更干净的方法来解决这个问题。