伪随机的一对一int32-> int32函数

时间:2013-03-20 20:23:32

标签: algorithm random integer bijection

我正在寻找

的int32-> int32函数
  • 双射(一对一对应)
  • 至少在一个方向上计算便宜
  • 将增加的序列0,1,2,3 ......转换成一个看起来像一个好的伪随机序列的序列(当参数变化较小时,〜半位翻转,没有明显的模式)

2 个答案:

答案 0 :(得分:10)

乘以一个大的奇数和xor乘以不同的数。

双射:奇数具有2的乘法逆模幂,因此通过乘以逆来解除乘法。当然,xor是另一个xor。

这基本上是线性同余伪随机数发生器的工作原理。

答案 1 :(得分:3)

对于此任务可能有些过分,但您是否考虑过应用任何加密pseudo random permutation或来自block ciphers的其他原语。例如,可以使用des在计数器模式下使用已知密钥来完成:

younumber xor (des (key, number counter))