首页 > 编程语言 >梅森旋转算法

梅森旋转算法

时间:2023-01-24 21:24:09浏览次数:34  
标签:int32 梅森 624 self 旋转 mt 算法 mti def

梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归。可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷。

def _int32(x):
    return int(0xFFFFFFFF & x)

class MT19937:
    def __init__(self, seed):
        self.mt = [0] * 624
        self.mt[0] = seed
        self.mti = 0
        for i in range(1, 624):
            self.mt[i] = _int32(1812433253 * (self.mt[i - 1] ^ self.mt[i - 1] >> 30) + i)


    def extract_number(self):
        if self.mti == 0:
            self.twist()
        y = self.mt[self.mti]
        y = y ^ y >> 11
        y = y ^ y << 7 & 2636928640
        y = y ^ y << 15 & 4022730752
        y = y ^ y >> 18
        self.mti = (self.mti + 1) % 624
        return _int32(y)


    def twist(self):
        for i in range(0, 624):
            y = _int32((self.mt[i] & 0x80000000) + (self.mt[(i + 1) % 624] & 0x7fffffff))
            self.mt[i] = (y >> 1) ^ self.mt[(i + 397) % 624]

            if y % 2 != 0:
                self.mt[i] = self.mt[i] ^ 0x9908b0df

  

标签:int32,梅森,624,self,旋转,mt,算法,mti,def
From: https://www.cnblogs.com/mysterygust/p/17066398.html

相关文章

  • 机器学习算法-有监督学习的定义与模型
    有监督学习的定义与模型 机器学习的算法可以分为以下三类:有监督学习(SupervisedLearning):有预测目标Y,通过X预测Y无监督学习(UnsupervisedLearning):没有Y,只通过X......
  • 使用栅格地图复现Floyd算法
    Floyd算法适用于APSP(AllPairsShortestPaths,多源最短路径),是一种动态规划算法,稠密图效果最佳,边权可正可负。此算法简单有效,由于三重循环结构紧凑,对于稠密图,效率要高于Di......
  • 使用栅格地图复现迪杰斯特拉算法
    Dijkstra算法可以计算出在有权图中从某个起点出发到其他任何一点的最短路径长度算法思想:迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最......
  • 2023牛客寒假算法基础集训营1 个人题解(ACDHKL)
    A.WorldFinal?WorldCup!(I)题意:给10场比赛的点球输赢情况,奇数为A队点球,偶数为B队点球思路:用两个变量x,y来分别存A队当前赢的场次和B队当前赢的场次然后就就扫......
  • python入门学习笔记002--趣学Python算法--第2例兔子产子
    例题如下:有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少?  个......
  • python入门学习笔记001--趣学Python算法--第一例抓交通肇事犯
    本人是python小白初学者,过年期间实在闲的无聊,偶尔翻到《趣学Python算法100例》这本书,浅浅阅读后感觉写的很不错。本系列案例均取自该书,只分享题目和自己的编的代码,问题分析......
  • 代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈
    基础知识使用ArrayDeque实现栈和队列stackpushpoppeekisEmpty()size()queueofferpollpeekisEmpty()size()LeetCode232.用栈实现队列分析1.0队列先进先出......
  • 算法应对电商的各种满减活动
    动态规划roadmap动态规划适于求解最优问题,如求最大值、最小值等。可显著降低时间复杂度,提高代码的执行效率。难点和递归类似,求解问题的过程不太符合人类常规思维。本文会先......
  • 算法竞赛向 C++ Standard Library 使用速查
    因网络上STL教程大多零散且缺乏严谨性,本文对算法竞赛所需C++StandardLibrary做了一个较为全面的总结。全文主要参考以下文档:Containerslibrary-cppreference.c......
  • 随机算法之水塘抽样算法
    本文首发:随机算法之水塘抽样算法读完本文,你不仅学会了算法套路,还可以顺便解决如下题目:382.链表随机节点(中等)398.随机数索引(中等)-----------我最近在力扣上做到两道......