我有一组非常大的值(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定理设置参数以确保不重复。种子用作初始值。我没有得到的是反转是可能的(即从输出中获取种子),因为我认为这需要暴力。
答案 0 :(得分:1)
对于LCG,种子与状态相同,并作为计算下一个的先前值。已知LCG是可逆的,如果
next = (a * prev + c) mod m
然后
prev = (next - c) * a_inv mod m
其中a_inv
可以使用Euclid算法计算
这里有更多讨论