[发明专利]基于空间搜索的唯一随机数序列的求取算法在审
申请号: | 201710252961.5 | 申请日: | 2017-04-12 |
公开(公告)号: | CN107092463A | 公开(公告)日: | 2017-08-25 |
发明(设计)人: | 吴旭军;刘旭东 | 申请(专利权)人: | 烟台职业学院 |
主分类号: | G06F7/58 | 分类号: | G06F7/58 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 264670 山东*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 空间 搜索 唯一 随机数 序列 求取 算法 | ||
技术领域
本发明涉及求取算法领域,尤其涉及一种基于空间搜索的唯一随机数序列的求取算法。
背景技术
唯一随机数序列在计算机游戏、软件测试用例、计算机考试等场景中经常用到,一种最平常的算法是:将每次产生的随机数进行比较,以前如果出现过就再发生一次,这样如果序列很长的话,越到后面的运算,所花的时间越长,并且其时间复杂度是无法估计的(因为不知道什么时候才能产生与前面不一样的随机数)。通常情况下,由于所使用的随机序列不长或者对时间要求不高,并且出现极端情况的几率很小,所以遇上麻烦的情况很少,并且即使遇到问题也可以通过其他手段处理(比如:中止进程),因此,该问题通常情况被忽视。
基于空间搜索的唯一随机数序列的求取算法拟解决的问题是:在已知随机序列的数的上界和下界、随机序列的长度的情况下,能否找到一种算法,其空间复杂度为O(Max-Min),(Max:随机序列的上界,Min:随机序列的下界),时间复杂度尽可能小,并且不会出现理论上的无限循环。这样的算法应该尽可能简单(能为一般软件人员接受),但非常巧妙,因此可以为千千万万的软件所使用,因而变得十分有意义。
绝大多数的软件人员,或多或少都碰到过这个问题,但都忽视了该问题的极端情况。因此,大多数程序员容易忽略巧妙方法的存在;或者说难以提出问题,也就更不会深入思考了。
因此,有必要提供一种基于空间搜索的唯一随机数序列的求取算法解决以上技术问题。
发明内容
本发明的目的为了减少获取唯一随机序列的计算量,本算法通过构造一个一维的连续整数数组,通过随机检索该数组的元素,获得一个随机数序列。由于检索是随机的,所以确定该序列是随机的;由于是随机检索,当两次检索到同一个数时,需要考虑一个轮转机制,或者使用其他方法处理。
本发明提供一种基于空间搜索的唯一随机数序列的求取算法,将直接求取随机序列的过程转变为求取一个已知序列的随机地址指针的过程,主要包括下面步骤:
步骤1,变量赋值,定义随机序列的最大值Max,最小值Min,一个长度为Data[Max-Min]的数组和一个长度为Length的空数组Data1,其中Length为待求随机序列的长度;
步骤2,如果Max-Min<Length,转到步骤9;
步骤3,按照从小(Min)到大(Max),循环给Data赋值;
步骤4,定义一个循环变量i=0,如果i>=Length,转到步骤9;
步骤5,产生一个0<n<Max-Min的随机数,取Data[n];
步骤6,如果Data[n]=Invalid,n=(n+1)mod(Length),回到步骤6;
步骤7,Data1[i]=Data[n],Data[n]=Invalid,i=i+1转4;
步骤8,输出Data1;
步骤9,结束。
与相关技术相比,本发明提供的基于空间搜索的唯一随机数序列的求取算法对于需要频繁使用随机数序列的场合,如:计算机游戏、在线考试系统等应用场景,可以大幅缩减计算时间,提高软件的运行效率,并排除极端情况下出现的死循环。
附图说明
图1为本发明提供的基于空间搜索的唯一随机数序列的求取算法的流程图。图2为求取一个[0,10)以内的5个唯一随机正整数序列情况下,采用该算法运算的部分空间变化图。该图表示通过两次运算之后的搜索空间的变化情况,第一行为原始空间状态,左边10个圆表示Data数组,右边5个圆表示Data1,第二行、第三行是经过一轮搜索之后,空间变化情况,第四、五行表示第二次随机搜索之后的空间变化。
具体实施方式
以下将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。为叙述方便,下文中如出现“上”、“下”、“左”、“右”字样,仅表示与附图本身的上、下、左、右方向一致,并不对结构起限定作用。
阅读本例请参阅图1和图2(本发明提供的基于空间搜索的唯一随机数序列的求取算法的流程图和空间变化示意图)。
假设需要求取一个[0,10)以内的5个唯一随机正整数序列(实际情况可能比这个序列大得多),按照本发明提供的算法,这里Max=10,Min=0,Length=5,由于是正整数,取Invalid=-1;采用最简单的循环赋值方式为长度为10的一维连续整数数组赋值;采用向后顺序流转作为冲突消解策略。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于烟台职业学院,未经烟台职业学院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710252961.5/2.html,转载请声明来源钻瓜专利网。