随机数的生成及获取方法和装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种随机数的生成及获取方法和装置。
背景技术
随着随机数在计算机领域应用越来越广,对产生的随机数有越来越高的要求。目前,常用随机数产生的方法有两种,一种是软件方式,用系统时间作为随机数产生的种子,再根据系统函数产生随机数。另一种是硬件方式,设计产生随机数的硬件设备,根据随机信号产生随机数。
但是,软件使用系统默认的随机数生成方法存在以下缺点:如果在同一时间点(同一秒,或者同一毫秒)下,产生的随机数重复概率很高,从而导致随机数分布不均衡,即产生伪随机数。因为,在计算机应用系统中,使用时间做为随机数产生的种子,在较短时间内,例如在相同毫秒或秒数的时间段内生产的随机数,因时间种子数相等。因此生成的随机数会存在重复率高,且分布不均衡的缺点。
发明内容
本申请的目的旨在至少在一定程度上解决上述的技术问题之一。
为此,本申请的第一个目的在于提出一种随机数的生成方法,该方法通过生成包括N个存储单元存储随机数的随机数存储数组,接着对随机数存储数组中的存储单元进行随机混排,当接收随机数获取指令时,从随机数存储数组中对应的存储单元读取随机数,通过该申请实施例,可以在较短的单位时间内多次获取的随机数重复率低,且分布均衡,因此本申请的随机数生成方法具有较好的随机性。
本申请的第二个目的在于提出了一种随机数的生成装置。
本申请的第三个目的在于提出了一种随机数的获取方法。
本申请的第四个目的在于提出了一种随机数的获取装置。
为达上述目的,根据本申请第一方面实施例提出的一种随机数的生成方法,包括以下步骤:生成随机数存储数组,其中,所述随机数存储数组包括N个存储单元,每个所述存储单元存储一个随机数,其中,N为正整数;对所述随机数存储数组中的存储单元进行随机混排;以及接收随机数获取指令,并根据所述随机数获取指令从所述随机数存储数组中对应的存储单元中读取所述存储单元存储的随机数。
通过本申请实施例的随机数生成方法,首先生成包括N个存储单元且每个存储单元存储一个随机数的随机数存储数组,接着对随机数存储数组中的存储单元进行随机混排,从而可以在接收到随机数获取指令时,从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数生成方法具有较好的随机性。
在本申请的一个实施例中,所述N个存储单元中存储的随机数均不相同。
在本申请的一个实施例中,所述的随机数的生成方法,每个所述存储单元具有标识值,其中,所述对所述随机数存储数组中的存储单元进行混排具体包括:根据随机函数生成随机值,并根据所述随机值生成待调换存储单元的标识值;以及根据所述标识值和预设调换规则将所述待调换存储单元与目标存储单元中的随机数进行调换。
在本申请的一个实施例中,所述根据随机函数生成随机值具体包括:当i大于1且小于N时,根据当前时间和第i-1次随机值生成第i次随机值,其中,i为调换次数;当i等于1时,根据当前时间生成所述第i次随机值。
在本申请的一个实施例中,所述预设调换规则为:当进行第i次调换时,将第i次随机值对应的存储单元与第(N+1-i)存储单元中的随机数进行调换。
在本申请的一个实施例中,所述根据所述随机数获取指令从所述随机数存储数组中对应的存储单元中读取所述存储单元存储的随机数具体包括:根据所述随机数获取指令获取当前已被读取的存储单元的标识值;根据所述当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数。
为达上述目的,根据本申请的第二方面实施例提出的一种随机数的生成装置,包括:生成模块,用于生成随机数存储数组,其中,所述随机数存储数组包括N个存储单元,每个所述存储单元存储一个随机数,其中,N为正整数;随机混排模块,用于对所述随机数存储数组中的存储单元进行随机混排;以及读取模块,用于接收随机数获取指令,并根据所述随机数获取指令从所述随机数存储数组中对应的存储单元中读取所述存储单元存储的随机数。
本申请实施例的随机数生成装置,首先生成模块生成包括N个存储单元且每个存储单元存储一个随机数的随机数存储数组,接着随机混排模块对随机数存储数组中的存储单元进行随机混排,从而读取模块可以在在接收到随机数获取指令时,从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于随机混排模块对随机数存储数组中的存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数生成装置具有较好的随机性。
在本申请的一个实施例中,所述N个存储单元中存储的随机数均不相同。
在本申请的一个实施例中,所述的随机数的生成装置,每个所述存储单元具有标识值,其中,所述随机混排模块包括:标识值生成子模块,用于根据随机函数生成随机值,并根据所述随机值生成待调换存储单元的标识值;以及调换子模块,用于根据所述标识值和预设调换规则将所述待调换存储单元与目标存储单元中的随机数进行调换。
在本申请的一个实施例中,所述的随机数的生成装置,当i大于1且小于N时,所述标识值生成子模块根据当前时间和第i-1次随机值生成第i次随机值,其中,i为调换次数;当i等于1时,所述标识值生成子模块根据当前时间生成所述第i次随机值。
在本申请的一个实施例中,所述预设调换规则为:当进行第i次调换时,将第i次随机值对应的存储单元与第(N+1-i)存储单元中的随机数进行调换。
在本申请的一个实施例中,所述读取模块具体包括:获取子模块,用于根据所述随机数获取指令获取当前已被读取的存储单元的标识值;读取子模块,用于根据所述当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数。
为达上述目的,根据本申请的第三方面实施例提出的一种随机数的获取方法,包括以下步骤:接收随机数获取指令,并获取随机数存储数组,其中,所述随机数存储数组包括N个存储单元,每个所述存储单元存储一个随机数,且所述随机数存储数组中的N个存储单元的位置通过随机混排确定,其中,N为正整数;根据所述随机数获取指令从所述随机数存储数组中对应的存储单元中获取所述存储单元存储的随机数。
通过本申请实施例的随机数获取方法,首先接收到随机数获取指令,接着获取随机数存储数组并通过随机混排确定随机数存储数组中的N个存储单元的位置,从而根据接收到随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数获取方法具有较好的随机性。
在本申请的一个实施例中,所述N个存储单元中存储的随机数均不相同。
在本申请的一个实施例中,所述的随机数的获取方法,每个所述存储单元具有标识值,其中,通过以下步骤对所述随机数存储数组中的N个存储单元的位置通过随机混排:根据随机函数生成随机值,并根据所述随机值生成待调换存储单元的标识值;以及根据所述标识值和预设调换规则将所述待调换存储单元与目标存储单元中的随机数进行调换。
在本申请的一个实施例中,所述根据所述随机数获取指令从所述随机数存储数组中对应的存储单元中获取所述存储单元存储的随机数具体包括:根据所述随机数获取指令获取当前已被读取的存储单元的标识值;根据所述当前已被读取的存储单元的标识值获取下一个存储单元存储的随机数。
为达上述目的,根据本申请的第四方面实施例提出的一种随机数的获取装置,包括:接收模块,用于接收随机数获取指令;随机数存储数组获取模块,用于获取随机数存储数组,其中,所述随机数存储数组包括N个存储单元,每个所述存储单元存储一个随机数,且所述随机数存储数组中的N个存储单元的位置通过随机混排确定,其中,N为正整数;随机数获取模块,用于根据所述随机数获取指令从所述随机数存储数组中对应的存储单元中获取所述存储单元存储的随机数。
通过本申请实施例的随机数获取装置,首先接收模块接收到随机数获取指令,接着随机数存储数组获取模块获取随机数存储数组并通过随机混排确定随机数存储数组中的N个存储单元的位置,从而随机数获取模块根据接收到随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数获取装置具有较好的随机性。
在本申请的一个实施例中,所述N个存储单元中存储的随机数均不相同。
在本申请的一个实施例中,所述随机数获取模块具体包括:第一获取子模块,用于根据所述随机数获取指令获取当前已被读取的存储单元的标识值;第二获取子模块,用于根据所述当前已被读取的存储单元的标识值获取下一个存储单元存储的随机数。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是根据本申请一个实施例的随机数的生成方法的流程图;
图2是根据本申请一个实施例的获取随机数的流程图;
图3是根据本申请一个实施例对随机数存储数组中的存储单元进行随机混排的方法流程图;
图4是本申请一个实施例的随机数的生成装置的结构示意图;
图5是根据本申请另一个实施例的随机数的生成装置的结构示意图;以及
图6是根据本申请又一个实施例的随机数的生成装置的结构示意图;
图7是根据本申请一个实施例的随机数的获取方法的流程图;
图8根据本申请一个实施例的随机数的获取装置的结构示意图;
图9是根据本申请另一个实施例的随机数的获取装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
本申请通过随机混排的方式对随机数存储数组里的存储单元进行随机混排,使得随机数存储数组中的随机数顺序完全随机,从而解决了传统随机函数较大概率出现重复导致分布不平衡的问题。在需要获取随机数时,可以从该随机数存储数组中获取对应的随机数。
图1是根据本申请一个实施例的随机数的生成方法的流程图。
如图1所示,本申请实施例的随机数的生成方法包括以下步骤:
S110,生成随机数存储数组,其中,随机数存储数组包括N个存储单元,每个存储单元存储一个随机数,其中,N为正整数。
在本申请的实施例中,N个存储单元中存储的随机数均不相同。
可以理解的是,在本申请的实施例中,生成的随机数存储数组中对应的存储单元存储的随机数是不重复的,例如,一个存储单元存储的一个随机数是2,那么其它存储单元存储的随机数都不是2。
在本申请的实施例中,N个存储单元可以分别存储1至N个整数,从而每个存储单元存储的随机数与其他的均不同。
在本申请的另一个实施例中,随机数存储数组的长度是可以配置的,根据需要对随机数存储数组的长度提前进行设置。
S120,对随机数存储数组中的存储单元进行随机混排。
需要说明的是,本申请实施例所述的随机混排是指对随机数存储数组中N个存储单元存储的随机数进行随机调换,从而使得存储单元中存储的随机数的顺序完全随机,从而解决现有技术中随机函数较大概率出现重复导致分布不平衡的问题。在本申请的实施例中,可以采用多种方式对N个存储单元存储的随机数进行随机调换,在后续的实施例中将对这些方式进行详细介绍。对于本领域技术人员而言,可采用多种方式对随机数存储数组中存储的随机数进行随机混排,从而达到随机数的顺序完全随机的目的,因此并不限于本申请以下实施例所提到的随机调换的算法,任何能够达到上述目的的算法均应包含在本申请的保护范围之内。
S130,接收随机数获取指令,并根据随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。
具体而言,在本申请的实施例中,接收随机数获取指令之后,可以顺序地从随机数存储数组中依次读取对应的随机数,也可以随机地从随机数存储数组中依次读取对应的随机数。当然在本申请的实施例中,还可以采用其他的方式从随机数存储数组中读取对应的随机数。
具体地,在本申请的一个具体实施例中,在接收到随机数获取指令之后,根据随机数获取指令获取当前已被读取的存储单元的标识值(即上一次被读取的存储单元的标识值),根据当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数。
需要说明的是,在每一次接收到随机数获取指令之后,进一步判断已被读取的存储单元是否为随机数存储数组中的最后一个存储单元。如果不是随机数存储数组中的最后一个存储单元,则继续读取下一个存储单元存储的随机数。如果是随机数存储数组中的最后一个存储单元,则需要重新生成新的随机数存储数组,即执行步骤S110。
本申请实施例的随机数的生成方法,首先生成包括N个存储单元且每个存储单元存储一个随机数的随机数存储数组,接着对随机数存储数组中的存储单元进行随机混排,从而可以在接收到随机数获取指令时,从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡,因此本申请的随机数生成方法具有较好的随机性。
为了使得本领域的技术人员能够更加清楚地了解本申请的获取随机数流程,下面结合图2具体说明。如图2所示:
S210,接收随机数获取指令。
S220,判断当前已被读取的存储单元是否为随机数存储数组的最后一个。
具体而言,在每一次接收到随机数获取指令之后,进一步判断当前已被读取的存储单元是否为随机数存储数组中的最后一个存储单元。如果不是随机数存储数组中的最后一个存储单元,则继续读取下一个存储单元存储的随机数。
S230,如果判断当前已被读取的存储单元是随机数存储数组的最后一个,初始化随机数存储数组,需要重新生成新的随机数存储数组。
具体而言,确定当前已被读取的存储单元是随机数存储数组的最后一个,即随机数存储数组中的所有存储单元存储的随机数都已经被读取过,则需要对随机数存储数组进行初始化,从而重新生成新的随机数存储数组。
在本申请的实施例中,如果确定当前的存储单元不是随机数存储数组的最后一个,则直接根据随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。
S240,对随机数存储数组中的存储单元进行随机混排,即循环打乱随机数存储数组中的每个存储单元的位置。
在本申请的实施例中,循环打乱随机数存储数组中的每个存储单元的位置,从而可以使得存储单元中存储的随机数的顺序完全随机,进而解决现有技术中随机函数较大概率出现重复导致分布不平衡的问题。在本申请的实施例中,可以采用多种方式对N个存储单元存储的随机数进行随机调换,从而达到随机数的顺序完全随机的目的,因此并不限于本申请实施例。
S250,根据上次获取的存储单元的标识值,选择随机数存储数组中下一个存储单元存储的数据作为当前要获取随机数。
具体地,根据随机数获取指令获取当前已被读取的存储单元的标识值(即上一次被读取的存储单元的标识值),根据当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数,例如可以顺序地读取。
需要说明的是,还可以采用其他的方式从随机数存储数组中读取对应的随机数,不限于本申请实施例的顺序地从随机数存储数组中依次读取对应的随机数。
为了使得本申请中对随机数的生成方法的描述更加的具体化,可以结合JAVA语言的程序秒数进行说明,具体如下:
首先初始化一个随机数存储数组,定义存储单元获取标识值和随机数存储数组长度。接收随机数指令后,判断当前的存储单元是否随机数存储数组的最后一个,判断当前的存储单元不是随机数存储数组的最后一个时,需要重新生成随机数存储数组,进而循环将随机数存储数组中的存储单元顺序打乱,最后根据上次获取的存储单元的标识值,选择随机数存储数组中下一个存储单元存储的数据作为当前要获取随机数。
需要说明的是,本申请的随机数的生成方法不限于基于JAVA语言实现,可以使用其他计算机语言实现。
本申请实施例的随机数的生成方法,首先生成包括N个存储单元且每个存储单元存储一个随机数的随机数存储数组,接着对随机数存储数组中的存储单元进行随机混排,从而可以在接收到随机数获取指令时,从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡,因此本申请的随机数生成方法具有较好的随机性。
为了使得本领域的技术人员能够更加清楚地了解本申请中对随机数存储数组中的存储单元进行随机混排的方法,下面结合图3进行具体说明。如图3所示:
S310,根据当前时间和随机函数生成随机值,其中,每个存储单元具有标识值。该标识值是用于区分存储单元的标识,在本申请的实施例中,在初始状态(即随机混排之前)存储单元的标识值可以与存储单元中存储的随机数可以相等。
需要说明的是,在该步骤S310中生成的随机值与存储单元中存储的随机数的概念并不相同,该步骤生成的随机值用于确定待调换存储单元的标识值。
具体而言,当i大于1且小于N时,根据当前时间和第i-1次随机值生成第i次随机值;而当i等于1时,根据当前时间生成第i次随机值,其中,i为调换次数。也就是说,当第一次生成随机值时,根据当前时间生成随机值,当不是第一次生成随机值时,根据当前时间和第i-1次随机值生成第i次随机值。
在本申请的实施例中,生成随机数存储数组后,每个存储单元具有标识值,根据随机函数生成随机值,并根据随机值生成待调换存储单元的标识值,从而确定需要调换的存储单元。
S320,根据标识值和预设调换规则将待调换存储单元与目标存储单元中的随机数进行调换。
当进行第i次调换时,将第i次随机值对应的存储单元与第(N+1-i)存储单元中的随机数进行调换。
举例而言,生成随机数存储数组后,每个存储单元具有标识值,标识值能够区别不同的存储单元。当i为1时,根据当前时间生成第1次随机值,并根据第1次随机值生成待调换存储单元的标识值,根据预设调换规则,把第1次随机值对应的存储单元和第N存储单元中的随机数进行调换,即将第1次随机值对应的存储单元中的随机数存储于第N存储单元中,并将第N存储单元中的随机数存储于第1次随机值对应的存储单元中。当i为2时,根据当前时间和第1次随机值生成第2次随机值,并根据第2次随机值生成待调换存储单元的标识值,根据预设调换规则,把第2次随机值对应的存储单元和第N-1存储单元中的随机数进行调换,即将第2次随机值对应的存储单元中的随机数存储于第N-1存储单元中,并将第N-1存储单元中的随机数存储于第2次随机值对应的存储单元中。以此循环,直到所有随机数存储数组中的存储单元存储的随机数完成调换。在上述实施例中,将第1次调换计算的标识值的存储单元与第N存储单元先进行调换。在本申请的其他实施例中,也可以从第一存储单元先开始进行调换。
举例而言,初始化一个随机数存储数组randArry[]。对随机数存储数组中的每个存储单元用自然数赋值。例如,randArry[0]=1,randArry[1]=2…randArry[n-1]=n。循环打乱随机数存储数组中的每个存储单元的位置。例如,可以采用每次随机数存储数组中的每个存储单元存储的值与倒数第i个存储单元存储的值交换,i从n-1递减,例如randArry[1]=2与randArry[n-1]=n替换。
需要说明的是,本申请实施例的将存储单元中的随机数进行调换的方法只是预设调换规则的一种,即可以根据实际需要对预设调换规则进行设置,通过不同的调换方法对存储单元中的随机数进行调换。
S330,判断随机数存储数组中的存储单元是否全部被调换过。
S340,如果随机数存储数组中的存储单元全部被调换过,则确定存储单元中存储的随机数的顺序完全随机,因此,该随机数存储数组可供使用。
具体而言,确定随机数存储数组中N个存储单元中存储的随机数已经全部进行调换,根据随机数获取指令获取当前已被读取的存储单元的标识值;根据当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数。
需要说明的是,可以采用其他的方式从随机数存储数组中读取对应的随机数,不限于本申请实施例的顺序地从随机数存储数组中依次读取对应的随机数。
本申请实施例的随机数的生成方法,首先生成包括N个存储单元且每个存储单元存储一个随机数的随机数存储数组,接着对随机数存储数组中的存储单元进行随机混排,从而可以在接收到随机数获取指令时,从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡,因此本申请的随机数生成方法具有较好的随机性。
与上述实施例提供的随机数生成方法相对应,本发明的一种实施例还提供一种随机数生成装置,由于本发明实施例提供的随机数生成装置与上述几种实施例提供的随机数生成方法具有相同或相似的技术特征,因此在前述随机数生成方法的实施方式也适用于本实施例提供的随机数生成装置,在本实施例中不再详细描述。如图4所示,该随机数的生成装置可包括:生成模块110、随机混排模块120、读取模块130。
其中,生成模块110用于生成随机数存储数组,其中,随机数存储数组包括N个存储单元,每个存储单元存储一个随机数,其中,N为正整数。
在本申请的一个实施例中,N个存储单元中存储的随机数均不相同。
随机混排模块120用于对随机数存储数组中的存储单元进行随机混排。
读取模块130用于接收随机数获取指令,并根据随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。
在本申请的一个实施例中,图5是根据本申请另一个实施例的随机数的生成装置的结构示意图,即在如图4所示的基础上,如图5所示,随机混排模块120具体包括标识值生成子模块1201和调换子模块1202。具体地,在本申请的一个实施例中,标识值生成子模块1201用于根据随机函数生成随机值,并根据随机值生成待调换存储单元的标识值。调换子模块1202用于根据标识值和预设调换规则将待调换存储单元与目标存储单元中的随机数进行调换。
在本申请的一个实施例中,当i大于1且小于N时,标识值生成子模块1201根据当前时间和第i-1次随机值生成第i次随机值,其中,i为调换次数。当i等于1时,标识值生成子模块1201根据当前时间生成第i次随机值。
在本申请的一个实施例中,预设调换规则为:当进行第i次调换时,将第i次随机值对应的存储单元与第(N+1-i)存储单元中的随机数进行调换。
在本申请的一个实施例中,接收随机数获取指令后,判断当前的存储单元是否为随机数存储数组的最后一个,如果不是随机数存储数组中的最后一个存储单元,则继续读取下一个存储单元存储的随机数。如果是随机数存储数组中的最后一个存储单元,则需要重新生成新的随机数存储数组。
在本申请的一个实施例中,图6是根据本申请又一个实施例的随机数的生成装置的结构示意图,在如图4所示的基础上,读取模块130具体包括:获取子模块1301和读取子模块1302。
具体地,获取子模块1301用于根据随机数获取指令获取当前已被读取的存储单元的标识值。读取子模块1302用于根据当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数。
本申请实施例的随机数生成装置,首先生成模块生成包括N个存储单元且每个存储单元存储一个随机数的随机数存储数组,接着随机混排模块对随机数存储数组中的存储单元进行随机混排,从而读取模块可以在在接收到随机数获取指令时,从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于随机混排模块对随机数存储数组中的存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数生成装置具有较好的随机性。
图7是根据本申请一个实施例的随机数的获取方法的流程图,本申请实施例示出的随机数的获取方法从获取方面进行描述。如图7所示,该随机数的获取方法包括以下步骤。
S710,接收随机数获取指令,并获取随机数存储数组,其中,随机数存储数组包括N个存储单元,每个存储单元存储一个随机数,且随机数存储数组中的N个存储单元的位置通过随机混排确定,其中,N为正整数。
在本申请的实施例中,N个存储单元中存储的随机数均不相同。
在本申请的实施例中,N个存储单元可以分别存储1至N个整数,从而每个存储单元存储的随机数与其他的均不同。
在本申请的另一个实施例中,随机数存储数组的长度是可以配置的,根据需要对随机数存储数组的长度提前进行设置。
在本申请的实施例中,生成随机数存储数组后,每个存储单元具有标识值,根据随机函数生成随机值,并根据随机值生成待调换存储单元的标识值,从而确定需要调换的存储单元。
在本申请的实施例中,根据标识值和预设调换规则将待调换存储单元与目标存储单元中的随机数进行调换。
需要说明的是,本申请实施例的将存储单元中的随机数进行调换的方法只是预设调换规则的一种,即可以根据实际需要对预设调换规则进行设置,通过不同的调换方法对存储单元中的随机数进行调换。
S720,根据随机数获取指令从随机数存储数组中对应的存储单元中获取存储单元存储的随机数。
具体地,在本申请的一个具体实施例中,在接收到随机数获取指令之后,根据随机数获取指令获取当前已被读取的存储单元的标识值(即上一次被读取的存储单元的标识值),根据当前已被读取的存储单元的标识值读取下一个存储单元存储的随机数。
本申请实施例的随机数获取方法,首先接收到随机数获取指令,接着获取随机数存储数组并通过随机混排确定随机数存储数组中的N个存储单元的位置,从而根据接收到随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数获取方法具有较好的随机性。
与上述实施例提供的随机数获取方法相对应,本发明的一种实施例还提供一种随机数获取装置,由于本发明实施例提供的随机数获取装置与上述几种实施例提供的随机数获取方法具有相同或相似的技术特征,因此在前述随机数获取方法的实施方式也适用于本实施例提供的随机数获取装置,在本实施例中不再详细描述。如图8所示,该随机数的获取装置可包括:接收模块210、随机数存储数组获取模块220、随机数获取模块230。
其中,接收模块210用于接收随机数获取指令。
随机数存储数组获取模块220用于获取随机数存储数组,其中,随机数存储数组包括N个存储单元,每个存储单元存储一个随机数,且随机数存储数组中的N个存储单元的位置通过随机混排确定,其中,N为正整数。
在本申请的一个实施例中,N个存储单元中存储的随机数均不相同。
随机数获取模块230用于根据随机数获取指令从随机数存储数组中对应的存储单元中获取存储单元存储的随机数。
在本申请的一个实施例中,图9是根据本申请另一个实施例的随机数的获取装置的结构示意图,即在如图8所示的基础上,如图9所示,随机数获取模块230具体包括第一获取子模块2301用于根据随机数获取指令获取当前已被读取的存储单元的标识值。第二获取子模块2302用于根据当前已被读取的存储单元的标识值获取下一个存储单元存储的随机数。
本申请实施例的随机数获取装置,首先接收模块接收到随机数获取指令,接着随机数存储数组获取模块获取随机数存储数组并通过随机混排确定随机数存储数组中的N个存储单元的位置,从而随机数获取模块根据接收到随机数获取指令从随机数存储数组中对应的存储单元中读取存储单元存储的随机数。由于在随机数存储数组中对存储单元进行了随机混排,从而实现了在较短的单位时间内多次获取的随机数重复率低,且分布均衡。因此本申请的随机数获取装置具有较好的随机性。
在本申请的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。