实际上,我正在寻找的是一个函数 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/