注:本文仅提供一种生成论坛注册考题算法的思路,具体实现仍然有很多细节需要进一步确定。
我们假设注册考试需要回答10道题,答对8道题为合格,即期望的通过率为80%(这个期望通过率可以根据实际情况随时调整)。
首先,题库中的每一道考题都需要统计其正确率。为了避免机器人用户捣乱,只有答题正确率达到60%,即答对6题以上的用户,才统计其每一道题的回答(同样,答题正确率可以和期望通过率挂钩浮动)。
10道题的总分为100,每题10分。如果设定的期望通过率为80%,那么就意味着,在题库中随机抽取题目时,将每道题的正确率乘以每题分数(10分),并算出总和,如果高于80分的话就可以生成一套比较合理的试卷。当然,为了设计方便,实际中可以上下浮动5%,即总和在75-85这个区间就可以视作是合理的结果。
如果随机抽取出的题目难度过大,分数过低,那么就删去正确率最低的题目,换成正确率较高的题目,循环直到生成出符合标准的试卷为止,反之亦然。
以上是基本的思路。然而这里还有一个问题需要完善:对于答题人数过少,无法统计正确率的新题,该如何处理?
因此以下改进这个算法:
改进的思路是,在10题中,插入若干道新考题。当然,插入的新考题越多,对试卷难度造成不可预期的波动就会越大。这里建议插入1-2题比较合理。
假设每道考题有且仅有四个选项,那么在即使瞎猜的情况下,也会有至少25%的正确率。那么,插入2道新题,这2题的得分期望值就在5-20分之间。由于新题的难度无法预计,我们就按照最坏的情况进行处理,即认为这2题的总期望值为5分。如果通过考试的期望值为80分的话,那么就意味着剩下8题的总期望值就应为75分。
进一步地说,如果某题的正确率在40%以下,可以认为是比较难的题目。如果低于25%,属于过难,就可以删除出题库。(25%这条线同样可以适当上浮)
总结一下,算法可以概括为:
在题库中随机抽取8道已有题+2道新题
得分期望值 = SUM(每道已有题的正确率 * 10) + 25% * 10 * 新题的数量 // 25% * 10为每道新题的最小期望
while(得分期望值 < 期望分数线 * 95% || 得分期望值 > 期望分数线 * 105%)
if (得分期望值 < 期望分数线 * 95%)
(更换正确率最低的试题)
else if (得分期望值 > 期望分数线 * 105%)
(更换正确率最高的试题)
相关数学知识: