非常大的集合的动态伪随机置换,无需重复和反向操作

时间:2015-10-01 02:05:40

标签: algorithm random permutation lcg

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

它相当于排列,但由于明显的记忆问题,必须在飞行中完成#34;。并且算法需要在某个时刻反转。

此问题类似于" babel":http://www.fromquarkstoquasars.com/meet-the-digital-library-of-babel-a-complete-combination-of-every-possible-combination-of-letters-ever/

库中的问题

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

1 个答案:

答案 0 :(得分:1)

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

next = (a * prev + c) mod m

然后

prev = (next - c) * a_inv mod m

其中a_inv可以使用Euclid算法计算

这里有更多讨论

Reversible pseudo-random sequence generator