我希望生成大量的随机数据,这些数据对于给定的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(); }
注意:我不希望暗示srand
和rand
是RNG的任何特定实现。 假设为了论证我们使用了一个好的Mersenne Twister代码。
编辑 :如果不清楚,通过“合理的哈希函数”我的意思是以下。 在2元组[a, b]
的受限情况下, rand_hash
的输出应该在int
的范围内是均匀的,并且(通常) a
或b
的变化幅度与之间不应该相关。返回值变化的幅度。
不,这不是一个合理的方法。
使用boost::hash_combine
不止一次使用srand
总会在我脑海中触发红旗。
潜在问题:
如果另一个线程在哈希函数中调用rand()
怎么办?
以上就是c/c++开发分享是否反复为随机数生成器播种合理的哈希函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545919.html