一种不重复随机自然数的快速生成方法

文档序号:378159 发布日期:2021-12-10 浏览:3次 >En<

阅读说明:本技术 一种不重复随机自然数的快速生成方法 (Method for rapidly generating non-repeated random natural numbers ) 是由 王璞 张亮 高舜龙 宋兴瑞 罗英 季尧遥 张海丰 于 2021-06-18 设计创作,主要内容包括:本发明公开了一种不重复随机自然数的快速生成方法,定义两个初值为空的集合S和集合T,定义一个长度为M的一维数组F,并将F中每一个元素的数值初始化为1,即F[1:M]=1。循环N次调用随机生成函数,第k次调用随机生成函数的Ω区域为Ω-(k)=[1,M-k+1],其中k=1,2,…,N,将每一个随机生成数S-(k),按顺序存储在S中。依次循环集合S中的每个元素S-(k)(k=1,2,…,N),计算出满足的第一个索引J,将索引J添加到集合T中,并令F[J]=0。返回集合T。此算法解决了在给定的自然数区域内,能够快速挑选出一部分不重复的自然数序列。(The invention discloses a method for quickly generating non-repeated random natural numbers, which comprises defining two sets S and T with empty initial values, defining a one-dimensional array F with the length of M, and initializing the numerical value of each element in F to 1, namely F [1: M%]1. Circularly calling the random generation function for N times, wherein the omega region of the calling random generation function for the k time is omega k =[1,M‑k&#43;1]Where k is 1,2, …, N, each randomly generating a number S k And stored in S in order. Sequentially cycling each element S in the set S k (k is 1,2, …, N), calculated to satisfy Add the index J to the set T and let F [ J ]]0. The set T is returned. The algorithm solves the problem that a part of unrepeated natural number sequence can be rapidly selected in a given natural number region.)

一种不重复随机自然数的快速生成方法

技术领域

本发明涉及自然数生成技术领域,尤其涉及一种不重复随机自然数的快速生成方法。

背景技术

当前,在气象预报、油藏勘探、材料力学、物流交通、生物医药等各个领域中,计算机数值模拟占有不可比拟的重要性。不重复随机自然数的生成在计算机数值模拟中又占有重要的地位,例如在模拟某一时刻的全国各城市天气状态时,要求全国30%的城市为多云,且这些城市在地图上呈现等概率均匀分布;再例如对于某种二代基因测序仪芯片,芯片上共有1300万个小孔,要求85%的小孔中有微球存在,且存在微球的这些小孔在芯片上的位置呈现等概率均匀分布。具体的算法阐述如下:

给定自然数区域为Ω=[1,M],要求从Ω中随机生成N个不重复的数。需要注意的是,当N>M/2时,该问题等价于先生成Ω中的所有数,然后再从其中剔除M-N个不重复的数即可。也就是说,只需要考虑从Ω中随机生成N个不重复的数,且N≤M/2的情况。

传统的生成不重复自然数的计算流程如下:

第一步:定义一个用于存储不重复数字的集合S,并赋值为空。

第二步:在Ω内随机生成一个数α。

第三步:判断α是否在S内,若在,则重新进行第二步;若不在,则将α加入S。

第四步:判断S的个数是否不大于N,若是,则进行第二步;若不是,则退出。

此计算流程无法解决在给定的自然数区域内,能够快速挑选出一部分不重复的自然数序列。

为此,我们提出一种不重复随机自然数的快速生成方法来解决上述问题。

发明内容

本发明的目的是为了解决现有技术中存在的缺点,在给定的自然数区域内,无法快速挑选出一部分不重复的自然数序列,而提出的一种不重复随机自然数的快速生成方法。

为了实现上述目的,本发明采用了如下技术方案:一种不重复随机自然数的快速生成方法,其特征在于,包括以下步骤:

S1:定义两个初值为空的集合S和集合T,定义一个长度为M的一维数组 F,并将F中每一个元素的数值初始化为1,即F[1:M]=1。

S2:循环N次调用随机生成函数,第k次调用随机生成函数的Ω区域为Ωk=[1,M-k+1],其中k=1,2,···,N,将每一个随机生成数Sk,按顺序存储在S中。

S3:依次循环集合S中的每个元素Sk(k=1,2,···,N),计算出满足的第一个索引J,将索引J添加到集合T中,并令F[J]=0。

S4:返回集合T。

优选的,所述集合T中的每个元素即是满足条件的不重复的随机自然数。

优选的,所述假设生成一个随机数的计算复杂度为p,比较两个数大小的计算复杂度为q,加减法运算的计算复杂度为r,则本设计的算法计算量可进行如下分析:第二步的计算量为D2=Np+(N-1)r,第三步的计算量为

优选的,所述根据权利要求3所述的一种不重复随机自然数的快速生成方法,其特征在于,算法的计算量为:

优选的,所述上述的算法计算量代入计算可得:若记

因为比较两个数大小的计算复杂度与加减法的计算复杂度相当,故可以假设r=q,则此时Δ可化简为:

优选的,所述因生成随机数的计算复杂度p=O(M2),比较两个数大小的计算复杂度q=O(M),所以表达式Δ的量级为:

与现有技术相比,本发明的有益效果为:

1、本发明提出的一种不重复随机自然数的快速生成方法,定义两个初值为空的集合S和集合T,定义一个长度为M的一维数组F,并将F中每一个元素的数值初始化为1,即F[1:M]=1。循环N次调用随机生成函数,第k次调用随机生成函数的Ω区域为Ωk=[1,M-k+1],其中k=1,2,···,N,将每一个随机生成数Sk,按顺序存储在S中。依次循环集合S中的每个元素Sk(k=1,2,···,N),计算出满足的第一个索引J,将索引J添加到集合T中,并令 F[J]=0。返回集合T。

2、本发明提出的一种不重复随机自然数的快速生成方法,集合T中的每个元素即是满足条件的不重复的随机自然数,假设生成一个随机数的计算复杂度为p,比较两个数大小的计算复杂度为q,加减法运算的计算复杂度为r,则本设计的算法计算量可进行如下分析:第二步的计算量为D2=Np+(N-1)r,第三步的计算量为算法的计算量为:

算法计算量代入计算可得:若记

因为比较两个数大小的计算复杂度与加减法的计算复杂度相当,故可以假设r=q,则此时Δ可化简为:

因生成随机数的计算复杂度p=O(M2),比较两个数大小的计算复杂度 q=O(M),所以表达式Δ的量级为

附图说明

图1为本发明提出的一种不重复随机自然数的快速生成方法的步骤图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

实施例1

一种不重复随机自然数的快速生成方法,包括以下步骤:

S1:定义两个初值为空的集合S和集合T,定义一个长度为M的一维数组 F,并将F中每一个元素的数值初始化为1,即F[1:M]=1。

S2:循环N次调用随机生成函数,第k次调用随机生成函数的Ω区域为Ωk=[1,M-k+1],其中k=1,2,···,N,将每一个随机生成数Sk,按顺序存储在S中。

S3:依次循环集合S中的每个元素Sk(k=1,2,···,N),计算出满足的第一个索引J,将索引J添加到集合T中,并令F[J]=0。

S4:返回集合T。

实施例2

集合T中的每个元素即是满足条件的不重复的随机自然数,假设生成一个随机数的计算复杂度为p,比较两个数大小的计算复杂度为q,加减法运算的计算复杂度为r,则本设计的算法计算量可进行如下分析:第二步的计算量为

D2=Np+(N-1)r,

第三步的计算量为算法的计算量为:

算法计算量代入计算可得:若记

因为比较两个数大小的计算复杂度与加减法的计算复杂度相当,故可以假设r=q,则此时Δ可化简为:

因生成随机数的计算复杂度p=O(M2),比较两个数大小的计算复杂度 q=O(M),所以表达式Δ的量级为

实施例3

举例:要求在[1,20]中随机生成10个不重复的自然数。

第一步:定义集合S=[],T=[],定义一维数组F[1:20]=1。

第二步:循环10次调用随机生成函数,第k次调用随机生成函数的Ω区域为Ωk=[1,21-k],其中k=1,2,···,10,将每一个随机生成数Sk,按顺序存储在S中。假设S集合中的元素分别为S=[10,8,13,9,6,3,8,9,7,3]。

第三步:依次循环集合S中的每个元素Sk(k=1,2,···,10),计算出满足的第一个索引J,将索引J添加到集合T中,并令F[J]=0。例如对 S1=10,可找到索引J=10,满足故将索引J=10加入到集合T中,并令F[10]=0,此时T=[10];对S2=8,可找到索引J=8,满足故将索引J=8加入到集合T中,并令F[8]=0,此时T=[10,8];对S3=13,可找到索引J=15,满足故将索引J=15加入到集合T中,并令F[15]=0,此时T=[10,8,15];对S4=9,可找到索引J=11,满足故将索引J=11加入到集合T中,并令F[11]=0,此时T=[10,8,15,11]。依次循环完S中的所有元素,最后可得T=[10,8,15,11,6,3,13,16,12,4]。

综上所述:定义两个初值为空的集合S和集合T,定义一个长度为M的一维数组F,并将F中每一个元素的数值初始化为1,即F[1:M]=1,循环N次调用随机生成函数,第k次调用随机生成函数的Ω区域为Ωk=[1,M-k+1],其中 k=1,2,···,N,将每一个随机生成数Sk,按顺序存储在S中,依次循环集合S中的每个元素Sk(k=1,2,···,N),计算出满足的第一个索引J,将索引J 添加到集合T中,并令F[J]=0,返回集合T。

集合T中的每个元素即是满足条件的不重复的随机自然数,假设生成一个随机数的计算复杂度为p,比较两个数大小的计算复杂度为q,加减法运算的计算复杂度为r,则本设计的算法计算量可进行如下分析:第二步的计算量为 D2=Np+(N-1)r,第三步的计算量为算法的计算量为:

算法计算量代入计算可得:若记

因为比较两个数大小的计算复杂度与加减法的计算复杂度相当,故可以假设r=q,则此时Δ可化简为:

因生成随机数的计算复杂度p=O(M2),比较两个数大小的计算复杂度 q=O(M),所以表达式Δ的量级为

在本发明中,除非另有明确的规定和限定,第一特征在第二特征之“上”或之“下”可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征“之上”、“上方”和“上面”包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”包括第一特征在第二特征正下方和斜下方,或仅仅表示第一特征水平高度小于第二特征。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的仅为本发明的优选例,并不用来限制本发明,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种PPTL规范挖掘系统和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类