sql – 间隔重复(SRS)用于学习

客户要求我为基于在线的学习网站添加一个简单的间隔重复算法(SRS).但是,在将自己投入其中之前,我想和社区进行讨论.

基本上,网站向用户询问一些问题(通过自动选择来自数据库的100个总问题中的10个),并且用户给出正确或不正确的答案.然后将用户结果存储在数据库中,例如:

userid  questionid  correctlyanswered  dateanswered
1       123         0 (no)             2010-01-01 10:00
1       124         1 (yes)            2010-01-01 11:00
1       125         1 (yes)            2010-01-01 12:00

现在,为了最大限度地提高用户学习所有答案的能力,我应该能够应用SRS算法,以便用户下一次接受测验时,会更经常地收到错误回答的问题;比问题回答正确.此外,以前未正确回答的问题,但最近经常正确回答的问题应该较少发生.

有没有人实现过这样的事情?任何提示或建议?

Theese是我找到的最好的链接

> http://en.wikipedia.org/wiki/Spaced_repetition
> http://www.mnemosyne-proj.org/principles.php
> http://www.supermemo.com/english/ol/sm2.htm

解决方法

你想要做的是为所有问题提供一个数字X_i.您可以对这些数字进行归一化(使其总和1)并做出优先选择.

如果N是不同问题的数量,M是每个问题平均回答的次数,那么你可以在M * N中找到X,如下所示:

>创建数组X [N]设置为0.
>运行数据,每次看到问题我回答错误时,通过f(t)增加N [i],其中t是应答时间,f是一个扩展函数.

因为f正在增加,一个问题早就回答错了,比昨天回答错误的影响还小.你可以尝试不同的f来获得一个很好的行为.

更聪明的方式
每次选择问题时,不会生成X [],而是将其保存在数据库表中.
您无法使用此解决方案f.相反,每次问题回答错误添加1,然后定期运行表 – 每半年说一遍,并将所有X [i]乘以一个常量 – 如0.9.

更新:实际上,您应该将数据置于正确的位置,而不是错误.否则问题长时间不回答既不真实也不虚假,获得选择的机会较小.应该是相反的

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...