让我们假设一个有序的整数序列A = {0,1,2, ... k}
。
我正在寻找一个(种子)函数f: A -> A
,其中f
的图像似乎是ramdom,但每个元素只被命中一次(双射)。
重要的是,有权访问f
某些结果的人既不能估计他是否正在查看直接邻居f(n), f(n+1)
,也不应该能够猜猜下一个结果。
一个想法是在range(1, k)
上映射shuffle(range(1, k))
。但这在性能上似乎非常低(对于大k
)并且确实错过了生成器的基本概念。序列中的第一个元素应该与n
- 元素一样昂贵。
在标记为公开之前仔细阅读。我不是在寻找可能发生碰撞的范围内随机挑选。另外,我想在不计算所有n
元素的情况下计算n-1
- 元素,就像我必须使用MT或Xorshift一样。