欢迎来到天天文库
浏览记录
ID:34102048
大小:57.41 KB
页数:7页
时间:2019-03-03
《基于双向循环链表分段随机组卷算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于双向循环链表分段随机组卷算法摘要:针对计算机组卷中试题被重复抽取造成的执行效率低问题,提出了一种分段随机组卷算法。采用双向循环链表结构表示随机数的生成区间,通过已生成的随机数和随机步长值确定下一个随机数的独立生成区间。初始生成区间利用保存试题编号的数组下标集合获得。实验结果表明了本算法的可行性。与传统随机组卷算法相比,该算法随机选题时不需要频繁访问题库,并具有较高的执行效率。关键词:分段随机;双向循环链表;随机数;组卷;生成区间中图分类号:TP391文献标识码:A文章编号:1009-3044(2012)33-8021
2、-05在课程自动化考核过程中,计算机自动组卷是其中的一个重要功能。自动组卷的实现多采用随机选取法并结合回溯试探的方法。随机选取法就是根据命题人提供的组卷指标由计算机程序从题库中随机选择一定数量的试题构成试卷。在这样的组卷过程中,由于试题的选取具有不确定性,通常利用回溯试探方法解决试题被重复抽取的问题。这种方法在题库中题量较多或组卷数量较大的情况下,耗费时间长,组卷成功率不高。采用分段随机抽选法[1]和集合随机抽选法[2-3]将题库空间分段,通过缩小试题搜索的匹配范围可提高组卷效率和成功率,但这些组卷方法依赖试题数据库结构
3、上的支持,尚未克服试题被重复抽取的缺陷。此外,基于遗传算法和模拟退火算法的组卷方法[4-5]对内存占用量大,运行时间长[6]。另有研究发现,虽然在题库中设置试题选中标识[7-8]可避免试题被重复抽取,但需长时间访问题库,增加了系统负担。针对上述问题,该文提出一种新的随机组卷算法。采用双向循环链表结构表示随机数的生成区间。通过动态界定随机生成区间从根本上解决试题被重复抽取的难题。整个组卷过程不需要频繁访问数据库。实验测试结果表明了该算法是可行的。1算法描述1.1传统随机组卷算法[3]传统随机组卷算法是利用随机函数在试题库中
4、抽取符合要求的试题组成试卷,其过程是:生成一个不重复的随机数之后,以该随机数为试题编号到题库中选取试题,如果试题库中不存在以该随机数为试题编号的题目,则需要重新生成一个随机数继续选取试题。如果仍然找不到新随机数所对应的题目则必须再生成新的随机数,而且每次尝试都必须通过访问数据库来确定是否成功,反复调用随机函数的时间、进行比较的时间以及多次访问数据库的时间等累加起来,使得程序的效率大为降低。1.2分段随机组卷算法为了解决传统随机组卷算法反复地回溯匹配的问题,需要考虑的是如何缩小搜寻匹配的范围以及随机数的非重复生成。任何组卷
5、方法都是从试题库中按照一定的组卷指标和规则选取出指定数量的试题构成试卷。基于这个思想,将计算机自动组卷分成两步:第一步依据组卷指标筛选出候选试题,这个操作可借助于SQL语句完成;第二步从候选试题中随机抽取指定数量的试题,这一步是本算法的重点。该文提出的分段随机组卷算法是在候选题库空间分段抽取试题,随机确定每一次抽题范围,且每次抽题范围相互独立;每段只随机选取一题,以便提高组卷效率。这里我们利用一个双向循环链表结构表示随机数的生成区间,并通过当前随机数和随机步长值随机确定下一个随机数的独立生成区间,使试题的重复抽取得以避免
6、。1.2.1随机数的生成候选题库的更新会影响试题编号的连续性,通过在试题库表中增加“随机数”字段可保证随机数产生区间的有效性[1-3]o这样做增加了数据库的存储及维护负担。该文用数组保存候选试题编号,并用数组下标集合作为随机数产生区间。随机数Rnd的生成公式:在公式(1)中,Random为系统内部的随机函数,可产生0至1之间的随机小数。Start和Last分别表示数组下标的起止边界值。[…]为遵循四舍五入规则的取整运算。显然,[Rnd^[Start,Last]]o1.2.2独立随机区间的生成根据公式(1)可知,随机数的产
7、生依赖于区间[[Start,Last]]。为了避免产生重复的随机数,根本的解决方法是为每个随机数提供独立的生成区间,即区间端点Start和Last的值在每个随机数生成之前应做相应的改变。这种改变与当前已生成的随机数Rnd相关,如公式(2)o[RndLast成立,不断移动Store指针指向其前驱结点,直到Store.numLast均不成立时为止。然后继续判断,如果Store.num-l>Store.front,num成立,修改随机区间的起止边界,即令起始结点指针Bm指向Store的前驱结点,终止结点指针Lm指向当前Stor
8、e结点;如果Store.num+l
此文档下载收益归作者所有