猿问

可逆伪随机序列发生器

我想要某种方法来创建一个相当长的随机数序列,可以前后翻转。就像带有“下一个”和“上一个”按钮的机器一样,这将为您提供随机数。

诸如10位分辨率(即,从0到1023的正整数)之类的东西就足够了,并且序列号大于100k。这是一个简单的游戏类型应用程序,不需要加密强度随机性或其他任何东西,但我希望它具有相当的随机性。我可用内存有限,因此我不能只生成大量随机数据并进行处理。我需要在“互动时间”中获得数字-我可以轻松地花几毫秒来考虑下一个数字,但舒适度远不止于此。最终它将在某种微控制器上运行,可能只是一个Arduino。

我可以使用简单的线性同余生成器(LCG)来实现。前进很简单,要前进,我必须缓存最新的数字并间隔存储一些点,以便我可以从那里重新创建序列。

但是也许有一些伪随机生成器可以让您向前和向后前进?应该有可能将两个线性反馈移位寄存器(LFSR)连接起来,以朝不同的方向滚动,不是吗?

或者,也许我可以使用某种哈希函数来使索引号变乱呢?我将首先尝试。

还有其他想法吗?


绝地无双
浏览 500回答 3
3回答

噜噜哒

只需按递增的整数顺序反转位的顺序即可。例如(8位分辨率):0 <=> 01 <=> 1282 <=> 643 <=> 1924 <=> 32等等在序列中前进和后退非常容易,并且比调用加密或哈希函数要快得多。它还具有产生最长可能序列的好处。绝对不是加密安全的。这是生成值的散点图(同样具有8位分辨率):“随机”生成值的散点图尽管可能足够“随机”,但您可以轻松看到模式。
随时随地看视频慕课网APP
我要回答