在给定任意种子值的情况下,是否有任何已知算法可以在线性时间和恒定空间(当输出迭代产生时)中生成混洗范围 [0..n)?
假设 n 可能很大,例如数百万,因此不需要潜在地产生每个可能的排列,尤其是因为它不可行(种子值空间需要很大)。这也是需要恒定空间的原因。(所以,我特别不是在寻找数组改组算法,因为这要求范围存储在长度为 n 的数组中,因此会使用线性空间。)
我知道问题 162606,但它没有给出这个特定问题的答案 - 从排列索引到该问题中给出的排列的映射将需要巨大的种子值空间。
理想情况下,它会像一个周期和范围为 的LCG ,但选择和用于 LCGn
的艺术是微妙的。简单地满足 LCG 的限制并在整个周期内满足我的要求,但我想知道是否有更好的想法。a
c
a
c