【问题标题】:On-the-fly pseudo-random permutation of very large set without repeating and with inverse operation非常大集合的动态伪随机排列,不重复且具有逆运算
【发布时间】:2015-12-28 23:08:15
【问题描述】:

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

这相当于置换,但由于明显的内存问题,必须“即时”完成。并且算法需要在某些时候反转。

这个问题和“babel库”中的这个问题类似:http://www.fromquarkstoquasars.com/meet-the-digital-library-of-babel-a-complete-combination-of-every-possible-combination-of-letters-ever/

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

【问题讨论】:

  • 您可能会在其他 SO 交换(可能是 CS 或数学)中取得更大的成功。这里的许多人不认为依赖于深度数学的算法在 SO 章程中……正如您以 2 票结束所见。
  • 我认为这种情况的一些变体在stackoverflow上反复出现。参见例如stackoverflow.com/questions/32182120/…

标签: algorithm random permutation lcg


【解决方案1】:

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

next = (a * prev + c) mod m

然后

prev = (next - c) * a_inv mod m

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

更多讨论在这里

Reversible pseudo-random sequence generator

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2015-11-28
    • 1970-01-01
    • 2014-04-12
    • 2013-03-03
    • 2013-01-31
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    相关资源
    最近更新 更多