来自SuperMemo的间隔重复算法(SM-2)法典
为了在Android中制作一个词汇练习应用程序,我想在Java中实现SuperMemo(SM-2)算法。这是间隔重复软件的热门选择,Anki甚至采用了我的理解。这里给出的源代码示例(对我来说)很难遵循,因为缺乏代码格式,因为它是用Delphi编写的。
SuperMemo的作者指出:
- 将知识拆分为尽可能小的项目。
- 对于所有项目,E 因子的 E 因子等于 2.5。
- 使用以下间隔重复项目: I(1):=1
I(2):=6
表示 n>2: I(n):=I(n-1)*EF
其中:
I(n) - 第 n 次重复(以天为单位)之后的重复间隔,
EF - 给定项目的
E 因子 如果间隔是分数,则将其向上舍入为最接近的整数。- 每次重复后评估0-5年级的重复反应质量:5 - 完美反应
4 - 犹豫
后的正确反应 3 - 正确的反应,严重困难
地回忆2 - 不正确的反应;其中正确的一个似乎很容易回忆起
1 - 不正确的反应;正确的一个记住了
0 - 完全停电。- 每次重复后,根据公式修改最近重复项目的E因子:
EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02)),
其中:
EF' - E因子的新值,
EF - E因子的旧值,
q - 0-5等级等级中的响应质量。
如果 EF 小于 1.3,则让 EF 为 1.3。- 如果质量响应低于3,则从头开始重复项目而不更改E因子(即使用间隔I(1),I(2)等,就好像重新记住项目一样)。
- 在给定日期的每个重复会话之后,再次重复所有在质量评估中得分低于四的项目。继续重复,直到所有这些项目都至少获得四分。
以下是有关堆栈溢出的一些相关(但不同)问题:
你如何在Java中实现它?
(我最近一直在研究这个问题,我想我有一个答案,所以我把这个作为问答对提交,以帮助其他人做同样的事情。