从输入确定性生成唯一整数
在寻求生成避免重复的确定性整数的解决方案时,问题围绕着寻找转换将输入数字映射到给定范围内的不同输出的方法,例如int64.
答案在于应用从仿射密码导出的模算术:
f(P) = (mP + s) mod n
其中:
m = 39293 (any non-even number) s = 75321908 (any random number below 2^64)使用这些值,转换函数:
func transform(p uint64) uint64 { return p*m + s }确保每个输入整数生成唯一的输出整数,如以下 Go Playground 所示例如:https://go.dev/play/p/EKB6SH3-SGu对于负数,逻辑保持不变。我们可以简单地在 uint64 和 int64 之间转换输入和输出,以维持唯一的映射:
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }这种方法可确保给定范围内的所有可能整数都确定性地映射到不同的输出整数,并且不会发生任何冲突。
以上是如何从输入确定性地生成唯一整数?的详细内容。更多信息请关注PHP中文网其他相关文章!