c/c++开发分享是否反复为随机数生成器播种合理的哈希函数?

我希望生成大量的随机数据,这些数据对于给定的key是可重现的,包括一个数字列表:

 [a, b, c, d, e, ...] 

以下是使RNG进入状态以生成随机数据的良好或明智的方式,对于每个n元组[a, b, c, ..., n] ,该数据与该数据不相关。输出“相邻”n元组[a+1, b, c, ..., n][a, b+1, c, ..., n]等。

 srand(a); srand(rand() * b); srand(rand() * c); ... srand(rand() * n); # generate random data: for (int i=0; i < 100; +i) printf("%d", rand()); 

我认为这个问题归结为以下几点: rand_hash是2元组(a, b)的良好哈希函数吗?

 int rand_hash(int a, int b) { srand(a); srand(rand() * b); return rand(); } 

注意:我不希望暗示srandrand是RNG的任何特定实现。 假设为了论证我们使用了一个好的Mersenne Twister代码。

编辑 :如果不清楚,通过“合理的哈希函数”我的意思是以下。 在2元组[a, b]的受限情况下, rand_hash的输出应该在int的范围内是均匀的,并且(通常) ab的变化幅度与之间不应该相关。返回值变化的幅度。

    不,这不是一个合理的方法。

    使用boost::hash_combine 不止一次使用srand总会在我脑海中触发红旗。

    潜在问题:

    如果另一个线程在哈希函数中调用rand()怎么办?

      以上就是c/c++开发分享是否反复为随机数生成器播种合理的哈希函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545919.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注