3

我有一组非常大的值(0-300000^700),我想找到一种算法,它可以在同一组中双向分配一个唯一值。

它相当于一个排列,但由于明显的内存问题,必须“即时”完成。并且该算法需要在某个时候反转。

这个问题类似于“巴别库”中的这个问题: http ://www.fromquarkstoquasars.com/meet-the-digital-library-of-babel-a-complete-combination-of-every-possible-combination -永远的字母/

使用 LCG,使用 Hull-Dobell 定理设置参数以确保不重复。种子用作初始值。我没有得到的是逆是如何可能的(即从输出中获取种子),因为我认为这需要蛮力。

4

1 回答 1

1

对于 LCG,种子与状态相同,并用作计算下一个值的先前值。已知 LCG 是可逆的,如果

next = (a * prev + c) mod m

然后

prev = (next - c) * a_inv mod m

a_inv可以使用欧几里得算法计算哪里

更多讨论在这里

可逆伪随机序列发生器

于 2015-10-01T04:28:31.953 回答