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