Hash 查找表的伪随机种子方法

Hash 查找表的伪随机种子方法,hash,random,seeding,Hash,Random,Seeding,是否有人可以建议一种好的方法来获取全局种子值,例如“Hello World”,并使用该值在数组或表中查找值 我的想法有点像经典的“精英”太空游戏,其中行星有不同的属性,但它们不是随机的,只是从宇宙的种子值衍生而来 我考虑在输入值上使用MD5,然后使用散列中的字节,将它们转换为整数,并将它们修改为查找表的可接受索引,但我怀疑一定有更好的方法?我读到了一些关于梅森龙卷风的文章,但也许那太过分了 我希望有一些东西能很好地分布在我的查找表中的值上。e、 红色、橙色、黄色、绿色、蓝色、紫色 还要强调的是,

是否有人可以建议一种好的方法来获取全局种子值,例如“Hello World”,并使用该值在数组或表中查找值

我的想法有点像经典的“精英”太空游戏,其中行星有不同的属性,但它们不是随机的,只是从宇宙的种子值衍生而来

我考虑在输入值上使用MD5,然后使用散列中的字节,将它们转换为整数,并将它们修改为查找表的可接受索引,但我怀疑一定有更好的方法?我读到了一些关于梅森龙卷风的文章,但也许那太过分了

我希望有一些东西能很好地分布在我的查找表中的值上。e、 红色、橙色、黄色、绿色、蓝色、紫色

还要强调的是,我不是在寻找随机值,而是每次都要寻找一致的值

更新:也许我在表达自己的问题领域时遇到了困难。以下是一个使用生成器并可以生成X个值的站点示例:

附加标准


我更愿意从基本原理出发,而不是使用诸如System.Random之类的库函数。我的方法是使用您的密钥作为随机数生成器的种子

public StarSystem(long systemSeed){
    java.util.Random r = new Random(systemSeed);
    Color c = colorArray[r.nextInt(colorArray.length)]; // generates a psudo-random-number based from your seed
    PoliticalSystem politics = politicsArray[r.nextInt(politicsArray.length)];
    ...
}
对于一颗特定的种子,这将每次产生相同的颜色和相同的政治制度

要从字符串中获取起始种子,您可以使用MD5Sum并获取long的第一个/最后一个64位,另一种方法是为每个植物使用一个数字。Elite还使用其伪随机生成器生成每个系统的名称

for(long seed=1; seed<NUMBER_OF_SYSTEMS; seed++){
    starSystems.add(new StarSystem(seed));
}

注意到不同了吗?没有,我也没有。

许多常见的随机数生成器都会在给定相同种子值的情况下生成相同的序列,因此您似乎只需要将您的名称转换为数字。有很多散列函数可以实现这一点

补充问题:是否要求所有唯一字符串生成唯一散列和(可能)唯一伪随机序列。

示例是用java编写的,使用java的Random.nextInt(int maxValue)返回0-maxValue范围内的整数。所有其他主流语言都有相同的方法。在我的回答中需要注意的另一点是,c#和Java的随机数类都有一个方法,该方法将返回给定范围内的整数。在这种情况下,在0和数组长度之间,可以轻松安全地转换随机数和颜色列表中的查找。更正式地说,谢谢,我相信这会奏效的。我希望有人知道一个基于第一原则的综合答案。i、 散列和伪随机都在算法一中,但也许我只是没有看到树木的树木
public StarSystem(int systemSeed){
    System.Random r = new Random(systemSeed);
    Color c = colorArray[r.next(colorArray.length)]; // generates a psudo-random-number based from your seed
    PoliticalSystem politics = politicsArray[r.next(politicsArray.length)];
    ...
}