function - 如何在没有冲突的情况下将一个范围内的数字映射到同一范围内的另一个数字?

标签 function random hash

实际上,我正在寻找的是一个函数 f(x),它输出到预定义的范围内。调用 f(f(x)) 也应该有效。该函数应该是循环的,所以调用 f(f(...(x))) 调用次数等于范围大小的地方应该给你原始数字,并且 f(x) 不应随时间变化,并且始终会给出相同的输出。

虽然我可以看到获取所有可能值的列表并对其进行洗牌会给我一些接近我想要的东西,但我更喜欢它,如果我可以简单地将值一次插入一个函数,这样我不必一次计算整个范围。

我研究过最小完美哈希函数,但没能找到一个不使用外部库的函数。我可以使用它们,但我宁愿不这样做。

如果需要实际范围来帮助回答我的问题,我认为它不需要大于 [0, 2^24-1],但起始值和结束值没关系。

最佳答案

您可能想看看 Linear Congruential Generator .您应该查看全周期生成器(例如,m=224),这意味着参数应满足 Hull-Dobell 定理。

Calling f(f(x)) should be valid as well.

应该可以

the number of calls is equal to the size of the range should give you the original number

是的,对于参数满足 Hull-Dobell 定理的 LCG,您将获得一次完整周期覆盖,并且“m+1”调用将使您回到开始的位置。 这种LCG的周期正好等于m

should not be time dependent and will always give the same output

LCG 是 O(1) 算法,它是 100% 可重现的

LCG 也是可逆的,通过扩展的 Euclid 算法,检查 Reversible pseudo-random sequence generator详情

关于function - 如何在没有冲突的情况下将一个范围内的数字映射到同一范围内的另一个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981398/

相关文章:

c - 使用 C 从一系列数字中返回一个随机数

c - 为什么这个 MD5 算法返回的似乎是内存位置而不是哈希值?

php - 在Smarty模板引擎中执行MD5函数

javascript - JS : Confused on how to make a function return it's parameters concatenated

java - 如何获取不重复的随机字符串值?

具有不同参数传递的 Javascript 函数

来自foreach的php随机顺序

python - 如何在不使用 Flask-Security 的情况下验证它生成的哈希值?

python - 如何使用python找到矩阵中最大的平方和

java - Java 中的 "Module"功能?