是否有一个简单的伪随机数生成器可以在你的头脑中做?

LeB*_*leu 26 language-agnostic random algorithm

是否有任何伪随机数生成器很容易与心算,心算和手指计数.显然,这限制了相当简单的数学 - 它需要具有平均数学能力的人才能做到,或者可能是程序员的平均能力,而不是数学天才.

我发现最简单的是中间方法,但不仅知道它是一个不好的随机源,它看起来仍然太复杂,没有铅笔和纸.

如果唯一的方法是限制范围,也许它只能输出8位数,那很好.我怀疑其中一个标准的PRNG算法在8位版本中足够简单,但我不知道如何将它们从32位版本简化为8位版本.(我查看的所有内容取决于特殊选择的种子数,这些种子数根据您使用的位数而有所不同,通常只给出32位和64位示例.)

Mar*_*gus 41

伪随机(根据Dilbert):

迪尔伯特卡通2001-10-25

  • 不,不管你做什么,都不要想到9. (6认同)
  • 所以你说"想到9"? (3认同)
  • 在我的问题中,我考虑先发制人地将那个和xkcd漫画联系起来....我猜我应该有 (2认同)
  • 不,无论您做什么,都不要考虑七到九之间的数字。 (2认同)

Mic*_*sen 16

一个线性反馈移位寄存器是很简单的,只要你熟悉二进制思维(或十六进制可能,因为它很容易在两者之间映射).

一个更复杂的是Xorshift,但是如果你知道你的按位操作,那么它也应该很有可能.


Bar*_*ter 6

在你的头脑中,你可以进行“语义”随机数生成:-)

就像随机取单词并从中计算一些度量一样,重复直到获得合理长度的数字。

例如,单词“exercise”可能会转换为 10100101b(您可以在此处查看我的转换想法)。


Ste*_*sop 5

Blum Blum Shub 怎么样,但素数太小而无法安全使用?安全使用时它很慢,但它涉及我们习惯处理的操作,因此您可能无需太多练习即可达到可管理的速度,也许 M = 437 或稍大一些。

不管怎样,我怀疑我脑子里能做的任何事情是否都是安全的。我只是记不起足够大的数字来在合理大小的状态下不出错地工作。

如果你有不错的肌腱,你可以轻松地在手指上进行 10 位 LFSR ;-)

不是直接答案,但取决于您询问的原因,您可能对Solitaire感兴趣,它使用一副纸牌生成密钥流(即伪随机序列)。无法在头脑中完成,但不需要铅笔和纸。


sh1*_*sh1 5

这是非常基本的,应该适合大多数人的头脑:

  1. 从三位数的种子号开始(找到合适的种子可能是一个更难的问题)。
  2. 乘以九。
  3. 将第四位数字与底部三位数字分开,并将这两个数字相加得到一个新的三位数字。
  4. 写下这些数字。为了帮助掩饰这种模式,您可能只写下一两个数字。
  5. 根据需要重复 2-4。

只要您不从零开始,这将迭代 4500 个结果。输出“看起来”不是随机的,但它是十进制的,即使是真正的随机结果也不能看起来随机,这就是人类在这项任务中表现不佳的原因。

我可能会尝试破解一个程序,以无偏见的方式将其转换为二进制文件来测试它。

替代配置:

  • 三位数乘以3
  • 四位数乘以6
  • 五位数乘以2