你没听过的梅森旋转算法
(标准开头) 如果单独提梅森旋转算法可能大家都很陌生,但如果说到C++11的random可能大家就都熟悉多了。事实上,C++,python等多种计算机语言的随机数都是通过梅森旋转算法产生的。(也有一个称呼是梅森缠绕算法) 那,本文就着重介绍这个梅森 螺旋 旋转算法 (算法本身挺学术的,我努力写得轻松点) 先在这里感谢一下@ dgklr 大佬的引导。如果没有他提及,笔者可能还不知道这个算法。 旋转算法简介 梅森旋转算法,也可以写作MT19937。是有由松本真和西村拓士在1997年开发的一种能快速产生优质随机数的算法。 其实这个算法跟梅森没有什么关系,它之所以叫做是梅森旋转算法是因为它的循环节是2^19937-1,这个叫做梅森素数。 如果看过我的那篇随机数的文章应该知道关于伪随机的一些知识。这个随机算法之所以说是产生“优质“”随机数,特点就是它的循环节特别长。而且产生的数分布是比较平均的。 可能有的同学对这个循环节有点质疑。可能觉得2^19937-1有点短? 我在这里大概给一个概念: 银河系中的恒星数量级10^11 撒哈拉沙漠中的沙子数数量级是10^26 宇宙中目前可观察的粒子数量级是10^87 2^19937数量级是10^6001 这个比较大概心里有数了吧 相差的已经不止是一个数量级了 同时他在623维中的分布都十分的均匀(这个不用理解) 知道分布平均就好了 (梅森镇楼) -