精华内容
下载资源
问答
  • 平方取中法

    2020-11-05 12:12:11
    我们首先介绍的是平方取中法,这个方法非常简单粗暴,是用来产生四位随机数的。 具体的逻辑是怎样的呢?首先我们需要一个随机种子,比如2333,我们把这个随机种子进行平方,得到5442889。这个数一共有6位,我们给它...

    我们首先介绍的是平方取中法,这个方法非常简单粗暴,是用来产生四位随机数的。

    具体的逻辑是怎样的呢?首先我们需要一个随机种子,比如2333,我们把这个随机种子进行平方,得到5442889。这个数一共有6位,我们给它左边填充一个0变成05442889,最后取出它的中间四位是4428,这就是我们随机得到的结果。当我们下次再计算随机数的时候,随机数的种子就成了4428。

    这个算法的作者是大名鼎鼎的计算机之父冯诺依曼,自从他确定了计算机体系结构之后一直沿用至今。他当时推崇这一算法的原因很简单,计算方便,速度快,也容易排查错误。它认为如果真的设计一个复杂的算法来生成看起来比较好的随机数,可能隐藏的bug比解决的问题还要多。

    seed = 2333
    def random():
        global seed
        seed = seed ** 2
        return int(str(seed)[1:5])
    

    我写了代码实际运行了一下,结果看起来其实没有那么不靠谱。

    随机数大家都会用,但是你知道生成随机数的算法吗?

    展开全文
  • Matlab随机数生成

    2020-11-08 20:47:08
    Matlab随机数生成的常用算法实现(用平方取中法产生随机数列 、用混合同余法产生随机数列 、用乘同余法1产生随机数列 、产生柯西分布的随机数列 、产生正态分布的随机数列 、产生贝努里-高斯分布的随机数列 )
  • 三:平方取中法 四:折叠法 五:除留余数法 六:随机数法 这些方法原理都是将原来数字按某种规律变成另一个数字 一:直接定址法 取关键字的某个线性函数值作为散列地址: 直接定址法获取得到的散列函数...

    目录:

    一:直接定址法

    二:数字分析法

    三:平方取中法

    四:折叠法

    五:除留余数法

    六:随机数法


    这些方法原理都是将原来数字按某种规律变成另一个数字

    一:直接定址法

    关键字的某个线性函数值作为散列地址

     

    直接定址法获取得到的散列函数有点就是简单,均匀也不会产生冲突

    但问题是这需要事先知道关键字的分布情况

     

    适合查找表较小且连续的情况

    由于这样的限制,在现实应用中,此方法虽然简单,但却并不常用

     

    二:数字分析法

    如果关键字是位数较多的数字(比如手机号),且这些数字部分存在相同规律

    则可以采用抽取剩余不同规律部分作为散列地址

     

    比如手机号前三位是接入号,中间四位是 HLR 识别号,只有后四位才是真正的用户号

    也就是说,如果手机号作为关键字,那么极有可能前 7 位是相同的

    此时我们选择后四位作为散列地址就是不错的选择

     

    同时,对于抽取出来的数字,还可以再进行反转

    右环位移,左环位移等操作

     

    目的就是为了提供一个能够尽量合理地将关键字分配到散列表的各个位置的散列函数


    数字分析法通常适合处理关键字位数比较大的情况

    如果事先知道关键字的分布且关键字的若干位分布较均匀,就可以考虑用这个方法

     

    三:平方取中法

    即取关键字平方的中间位数作为散列地址

     

    比如假设关键字是 4321,那么它的平方就是 18671041,抽取中间的 3 位就可以是 671,也可以是 710,用做散列地址


    平方取中法比较适合不知道关键字的分布,而位数又不是很大的情况

     

    四:折叠法

    折叠法是将关键字从左到右分割成位数相等的几部分(注意最后一部分位数不够时可以短些)

    然后将这几部分叠加求和

    并按散列表表长取后几位作为散列地址

     

    比如假设关键字是 9876543210,散列表表长为三位

    则我们可以将它分为四组 987|654|321|0

    然后将它们叠加求和 987+654+321+0=1962

    再取后 3 位得到散列地址即为 962

     

    有时可能这还不能够保证分布均匀

    那么也可以尝试从一端到另一端来回折叠后对齐相加

    比如讲 987 和 321 反转

    再与 654 和 0 相加,变成 789+654+123+0=1566

    此时散列地址为 566


    折叠法事先不需要知道关键字的分布适合关键字位数较多的情况

     

    五:除留余数法

    此方法为最常用的构造散列函数方法

    对于散列表长的散列函数公式为

    很显然,本方法的关键就在于选择合适的 

    根据前辈们的经验

    散列表表长

    通常 小于或等于表长(最好接近)的最小质数不包含小于 20 质因子的合数

     

    六:随机数法

    选择一个随机数

    取关键字随机函数值为它的散列地址

     

    当关键字的长度不等采用这个方法构造散列函数是比较合适

    展开全文
  • 随机数产生原理

    千次阅读 2006-06-29 21:53:00
    平方取中法1)从一个n位数x开始,称为种子2)将它平方得到一个2n位数(必要时前面加0)3)取中间的n位数做为下一个随机数这种方法有一个缺点就是产生随机数会趋向02.线性同余法选择三个整数a,b,c,给定初始种子X(0...

    ==============
    随机数产生原理
    ==============

    通常有两种方法

    1.平方取中法

    1)从一个n位数x开始,称为种子

    2)将它平方得到一个2n位数(必要时前面加0)

    3)取中间的n位数做为下一个随机数

    这种方法有一个缺点就是产生的随机数会趋向0

    2.线性同余法

    选择三个整数a,b,c,给定初始种子X(0)

    按下列规则生成数列

    X(n+1)=( a * X(n) + b )mod(c)

    这种方式产生的随机数会出现循环

    但是只要我们把c取得足够大就可以保证不会在我们运算中出现循环

    很多计算机都是利用这个原理产生随机数的

    只是c值取得很大,c=2^31
     

    展开全文
  • PFQZ 用平方取中法产生随机数列 MixMOD 用混合同余法产生随机数列 MulMOD1 用乘同余法1产生随机数列 MulMOD2 用乘同余法2产生随机数列 PrimeMOD 用素数模同余法产生随机数列 PowerDist 产生指数分布的随机数列 ...
  • MATLAB常用算法

    热门讨论 2010-04-05 10:34:28
    PFQZ 用平方取中法产生随机数列 MixMOD 用混合同余法产生随机数列 MulMOD1 用乘同余法1产生随机数列 MulMOD2 用乘同余法2产生随机数列 PrimeMOD 用素数模同余法产生随机数列 PowerDist 产生指数分布的随机数列 ...
  • Python——伪随机数生成器

    千次阅读 2018-10-28 20:27:27
    1.平方取中法 2.线性同余法 线性同余法的随机概率更大一点,不容易随机,以下我要讲的也是关于线性同余法产生随机数的方法。 线性同余法的公式: rNew=(a*rOld+b) % (end-start) 其中: a成为乘数,b称为增...

    伪随机数生成器顾名思义就是它能产生随机数!,实际上这种生成器就是一个小算法,通过一定的算法去生成一个个的随机数。
    现在网上流行的伪随机生成器的算法大致分为两种:
    1.平方取中法
    2.线性同余法

    线性同余法的随机概率更大一点,相对于平方取中法,随机性更好一点,以下我要讲的也是关于线性同余法产生随机数的方法。

     线性同余法的公式: rNew=(a*rOld+b) % (end-start)
     其中:	rNew为新种子,a成为乘数,b称为增量,(end-start)称为模数,他们均为常数,然后设置rOld = rNew ,一般要求用户指定种子数rOld(也叫seed),当然也可以自由选择a和b,但是这两个数字选的不好的话,会影响数字的随机性。
           经过数学家的计算,a,b 最好的值是: a=32310901  ,b=1729
    
    

    以下代码会以时间为种子(每个时间都是不一样的,这意味着种子不会重复,大大的提高了随机性),以当前时间作为种子,循环得到十个时间种子,每个时间种子会随机生成十个数。

    ''' 惰性求值    yield  即:你需要时才获取,包含yield语句得函数可以用来创建生成器对象,这样得函数也称生成器函数,每次执行到yiled语句会返回一个值然后暂停或挂起后面得代码得执行,下次通过生成器对象得__next()__方法,内置函数x.next(),for 循环遍历生成器对象元素或其他方式显示“索要”数据恢复执行。'''
    
    from random import randint
    import time
    
    def myrandint( start,end,seed=999999999 ):
        a=32310901
        b=1729
        rOld=seed   #将种子seed赋值给rOld
        m=end-start   #得到m 模数
        while True:
            rNew=int(( a*rOld+b )%m)   #开始产生随机数
             yield rNew     #遇到yield关键字暂时挂起后面的代码,等带next(r)的调用并返回 rNew
            rOld=rNew
    
    #模拟使用10个不同得时间种子来生成随机数
    '''  获得时间戳,由于计算机运行较快,可能计算机在同一个时间内循环了多次,这会导致时间种子相同的问题。所以保险起见,我用一个随机函数产生的随机数与其相加,更好避免出现重复种子的现象 '''
    for i in range(10):      
        now=time.time()+randint(0,99999)     #时间戳加一个随机数作为种子
        print(now)
        r=myrandint(1,10000,now)     #把时间种子作为参数调用myrandint函数
        #每个种子生成10个随机数
        print( "种子",now,"生成的随机数:" )
        for j in range(10):
    	#使用next()函数循环遍历r生成器对象来得到十个随机数
            print( next(r),end="," )   
        print()
    

    运行结果:
    在这里插入图片描述

    小伙伴们如果有改善的建议请评论哦,谢谢支持~

    展开全文
  • 随机种子

    2016-03-09 02:09:54
    简介 编辑 一般计算机的随机数都是伪随机数,以一个真...算法1:平方取中法。 1)将种子设为X0,并mod 10000得到4位数 2)将它平方得到一个8位数(不足8位时前面补0) 3)取中间的4位数可得到下一个4位随机数X
  • 今天主要是来研究梅森旋转算法,...平方取中法等等。但是这些方法产生随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质量的伪随 机数,并且效率高效,弥补了传统伪随机数生成器的不足。梅森旋转算法的
  • 平方取中法等等。但是这些方法产生随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质量的伪随 机数,并且效率高效,弥补了传统伪随机数生成器的不足。梅森旋转算法的最长周期取自一个梅森素数, 由此...
  • 平方取中法等等。但是这些方法产生随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质量的伪随 机数,并且效率高效,弥补了传统伪随机数生成器的不足。梅森旋转算法的最长周期取自一个梅森素数, ...
  • 平方取中法等等。但是这些方法产生随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质量的伪随 机数,并且效率高效,弥补了传统伪随机数生成器的不足。梅森旋转算法的最长周期取自一个梅森素数, 由此...
  • 哈希表

    2017-09-04 16:32:25
    3.平方取中法 4.折叠法 5.除留余数法 f(key)= key mod p(p 6.随机数法 处理冲突的方法 1.开放定址法 f(key)= key mod 12; 发生冲突时 线性探测法:F(key)=(f(key)+1)mod12; 会产生堆积 二次探测法...
  • 平方取中法 折叠法 1移位叠加 2间界叠加 随机数法 除留余数法 处理冲突 开放寻址法 再散列法 链地址法拉链法 建立一个公共溢出区 查找性能 影响产生冲突多少的三个因素 著名的hash算法 Hash算法应用若关键字为k,则...
  • 哈希表: 哈希表底层使用的是数组机制。当向哈希表中存放元素时,会通过...3.平方取中法 4.取模法 5.随机数法 这里以取模法为例,给大家简单解释一下向哈希表存放元素的过程: 现需要向哈希表中依次插入这些数据:...
  • 16.信息指纹及其应用 原来的Hash Table是直接存储的,而且存储效率只有50%,十分耗费存储空间。...常见的算法有:平方取中法、MD5、SHA-1等。  有了这个信息指纹,我们就能够判别是否有重复、是否...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

平方取中法产生随机数