【发布时间】:2014-01-13 16:14:57
【问题描述】:
我正在实现通用哈希并使用以下通用哈希函数:
h(k)=((A*k)mod 2^64) rsh 64-r
其中A是一个随机数
2^61 和 2^62。
C++ 中的rand() 函数具有返回类型integer,它不能生成那么大的数字。那么如何在这个范围内生成随机数呢? (数字应该是非常随机的,即每个数字应该有相同的概率被选中)
注意:
long long int random=rand();
不起作用,因为 rand 返回的数字是 int。
【问题讨论】:
-
如果您手头有一个好的 PRNG(而不是
std::rand()),您可以从中生成 N 位并将它们连接起来。或者一次生成 M 位,并将它们连接起来。因为如果它好,每个位都有相同的概率,因此将它们连接起来是安全的。
标签: c++ random universal-hashing