我想要某种方法来创建一个相当长的随机数序列,可以前后翻转。就像带有“下一个”和“上一个”按钮的机器一样,这将为您提供随机数。诸如10位分辨率(即,从0到1023的正整数)之类的东西就足够了,并且序列号大于100k。这是一个简单的游戏类型应用程序,不需要加密强度随机性或其他任何东西,但我希望它具有相当的随机性。我的可用内存有限,因此我不能只生成大量随机数据并进行处理。我需要在“互动时间”中获得数字-我可以轻松地花几毫秒来考虑下一个数字,但舒适度远不止于此。最终它将在某种微控制器上运行,可能只是一个Arduino。我可以使用简单的线性同余生成器(LCG)来实现。前进很简单,要前进,我必须缓存最新的数字并间隔存储一些点,以便我可以从那里重新创建序列。但是也许有一些伪随机生成器可以让您向前和向后前进?应该有可能将两个线性反馈移位寄存器(LFSR)连接起来,以朝不同的方向滚动,不是吗?或者,也许我可以使用某种哈希函数来使索引号变乱呢?我将首先尝试。还有其他想法吗?
3 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
只需按递增的整数顺序反转位的顺序即可。例如(8位分辨率):
0 <=> 0
1 <=> 128
2 <=> 64
3 <=> 192
4 <=> 32
等等
在序列中前进和后退非常容易,并且比调用加密或哈希函数要快得多。它还具有产生最长可能序列的好处。
绝对不是加密安全的。这是生成值的散点图(同样具有8位分辨率):
“随机”生成值的散点图
尽管可能足够“随机”,但您可以轻松看到模式。
添加回答
举报
0/150
提交
取消