我正在寻找一个 int32->int32 函数
- 双射(一一对应)
- 至少在一个方向上计算成本低
- 将递增序列 0, 1, 2, 3, ... 转换为一个看起来像好的伪随机序列的序列(当参数变化较小时,一半位会翻转,没有明显的模式)
最佳答案
乘以一个大的奇数,然后与另一个奇数异或。
双射:奇数具有二的乘法逆模幂,因此乘法被逆乘法取消。当然,xor 会被另一个 xor 撤消。
这基本上就是线性同余伪随机数生成器的工作原理。
关于algorithm - 伪随机一对一 int32->int32 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533937/