假设我有一个数字序列:{n, n+1, n+2, ... n + m}
在不提前存储数字的情况下,我想创建一个函数 f(),它给定序列 {1,2,3,...m} 将以随机(或至少伪随机)顺序吐出原始集合.
例如假设我的序列是 {10, 11, 12, 13, 14, 15, 16, 17}
f(1) 可以产生 14 f(2) 可以产生 17 f(3) 可以产生 13 f(4) 可以产生 10 f(5) 可以产生 16 f(6) 可以产生 15 f(7) 可以产生 11 f(8) 可以产生 12
在过去的某个时刻,一位同事向我展示了一种能够做到这一点的数学算法,但我几乎忘记了除了它存在之外的所有东西。我记得你必须事先有序列,并从函数中使用的序列中生成一些常量。对于那些想知道的人,我很遗憾与那位同事失去了联系。
这个问题的答案看起来接近我想要的,但我不确定答案是否允许我提前将输出限制为特定序列。
编辑:
为了澄清一点,我不想存储原始序列或打乱的序列。我想从原始序列生成一个函数 f() 。
令人沮丧的是我已经看到了这个,我只是记不住它,无法用谷歌再次找到它。
Fisher-Yates 算法非常适合置换或洗牌,但这不是我想要的。