首页  >  文章  >  后端开发  >  如何从输入数字生成确定性且唯一的整数?

如何从输入数字生成确定性且唯一的整数?

Barbara Streisand
Barbara Streisand原创
2024-11-23 08:38:50821浏览

How to Generate Deterministic and Unique Integers from Input Numbers?

确定性和唯一数字生成

考虑到需要生成唯一映射到每个输入数字的确定性整数,这似乎是不可能的Задача 。不过,有一个数学公式可以满足这个要求。

变换公式

变换公式是由模运算推导出来的:

f(P) = (mP + s) mod n

其中:

  • P 是输入number
  • m 是与 n
  • 互质的非偶数
  • s 是小于 n
n 的随机数

n 是要生成的值的范围(例如,2 ^64 for uint64)

此公式确保每个输入 P 映射到 0 范围内的唯一输出至n-1。 m 的互质条件可防止 m 和 n 之间的公因数,从而消除周期性模式和冲突。

uint64 的实现示例
var (
    m = uint64(39293)
    s = uint64(75321908)
)

func transform(p uint64) uint64 {
    return p*m + s
}

对于 uint64 范围,以下参数值可以使用:

扩展至int64
func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}

对于有符号数 (int64),可以使用类似的方法。在将输入和输出与 uint64 相互转换之后,应用 uint64 的原始转换:通过利用这种确定性和唯一的数字生成方案,可以将输入数字映射到唯一的输出,而无需数组或内存密集型排序。

以上是如何从输入数字生成确定性且唯一的整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn