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

标签 algorithm random integer bijection

我正在寻找一个 int32->int32 函数

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

最佳答案

乘以一个大的奇数,然后与另一个奇数异或。

双射:奇数具有二的乘法逆模幂,因此乘法被逆乘法取消。当然,xor 会被另一个 xor 撤消。

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

关于algorithm - 伪随机一对一 int32->int32 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533937/

相关文章:

c++ - 无符号到有符号的转换,位级别会发生什么?

java - Median of Medians 算法错误的中位数

objective-c - 确保 random() 不返回 0?

c++ - 创建一个使用 4 位编码表示整数 0 -9 的文件

c - 在 Linux 上以非阻塞模式读取文件

javascript - 如何让数组选择四种不同的选项

java - 在 Java 中检查 int l,r 条件 l+1<r 的最快方法

algorithm - 为什么这是一个贪心算法?

algorithm - 在 O(N + K) 时间内从 N 个整数数组中提取 K 个最大元素

c# - 更改特定元素时更新数组的值