【发布时间】:2012-12-05 07:18:52
【问题描述】:
我在这里阅读了几篇关于生成不重复的随机序列的帖子(例如Create Random Number Sequence with No Repeats),并决定根据自己的需要实现它
实际上,它是一种算法,它对当前计数器的位应用一些非破坏性(可逆)操作,以获得应该只出现一次的伪随机数。由于操作是可逆的,不同的源编号会给出不同的结果编号。
至少有几种可能的操作,例如交换两位,反转一位,循环移位。如果我们只使用提到的那些,那么序列的质量不会很好,因为附近的计数器会产生具有相似数量的 0 和 1 的结果。真正的游戏规则改变者一点一点地异或。现在序列看起来好多了,但问题是:
- 是否存在足够小的操作子集(例如,将位反转 + 异或位一位)并且添加任何其他操作只会使算法更难阅读,同时不会带来额外的好处
- 我怎样才能大致猜测给定范围内的操作数,以使序列足够好。例如,对 0 到 31 的数字进行 200 次运算会产生良好的视觉效果,但 0..199 范围内的 200 次运算有时会产生接近的数字块。
- 是否有用于测试此类序列的算法或测试套件。我知道并曾经使用过可以测试一般随机序列的套件,但这个套件是不同的,因此可能需要一些特殊套件,或者至少需要一些转换回一般随机世界
更新:正如我在此处的评论中发布的,已经有一个像这样的生成器:AES 加密,但不幸的是它只能用于 128 位范围。
谢谢
最大
【问题讨论】: