首页  >  文章  >  后端开发  >  如何生成唯一的确定性整数而不重复?

如何生成唯一的确定性整数而不重复?

Patricia Arquette
Patricia Arquette原创
2024-11-22 06:32:11294浏览

How to Generate Unique Deterministic Integers Without Duplicates?

无重复的确定性整数生成

在软件开发领域,生成唯一且可预测的数字可能是一项令人困惑的任务。让我们深入研究确定性数字生成函数,该函数确保没有两个输入产生相同的输出,从而实现高效且可重复的计算。

完成此壮举的公式是模块化算术,常用于密码学和随机数生成:

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

其中:

  • P 是输入整数
  • m 是所需范围 (n)
  • s 的互质常数,确保输出在所需范围内 (n)

应用此公式,我们可以生成确定性数字,而不需要详尽的数组或内存限制。例如,使用 uint64 作为数据类型(表示 64 位无符号整数):

import (
    "fmt"
)

func main() {
    m := uint64(39293)
    s := uint64(75321908)

    input := []int64{1, 2, 3, 4, 5}
    output := make([]uint64, len(input))

    for i, v := range input {
        output[i] = (m*uint64(v) + s) % (1 << 64)
    }

    fmt.Println(output) // Output: [3 5 4 2 1]
}

此代码演示了给定输入的唯一数字的确定性生成。通过为 m 和 s 插入不同的值,您可以根据您的特定需求定制输出。

对于有符号整数,例如 int64,可以应用相同的公式,但建议转换输入和输出在 uint64 和 int64 之间以获得最佳性能。

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

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