创建一个双射以获得一个具有已知最大值的无序计数器


Create a bijection to get an unordered counter with known max

我有一个已知最大值的计数器(称为max)。CCD_ 2可以很大(实际上它将是36^40 - 162^40 - 1)。

我想要一个从[0..max][0..max]的双射b,具有以下属性:b(n+1)不容易从b(n)猜测。

NOT正在搜索加密安全函数,我只想尽可能多的熵来模糊计数器的输出。

该函数在PHP中必须是可行的。这允许PHP执行所有功能。

我不认为这个问题以目前的形式是可以回答的

b(n+1)不容易从b(n) 中推测出来

定义不明确。你没有给出任何衡量标准或可量化的约束。由于您继续写道您"NOT正在搜索加密安全函数",并在评论中提到您"并不真正关心任何人找到该函数",因此尚不清楚您为什么需要双射。

然而,这里有一些想法可以帮助你找到一个你满意的双射,或者澄清你的问题,这样其他人就可以提供帮助。

任何线性多项式的可逆模max都可以工作。也就是说,形式的多项式

b(n) = a*n + b mod max 

给出双射当且仅当

gcd(a,max) = 1 

最简单的情况是a=1b=0,所以b(n) = n似乎满足了您模糊的约束。

如果你想喜欢它,你可以经常更改ab,比如生成一个随机数(但一定要检查gcd(a,max) = 1,否则你不会得到双射)。