万码皆空的博客
Published on

间隔重复记忆之SM-4

Authors
  • avatar
    Name
    万码皆空
    Twitter

SM-4算法说明

  1. 将知识拆分长最小单元。

  2. 每一个知识点分配一个efactor,初始值为2.5。

  3. 使用重复次数和efactor制作一张表,叫做OI Matrix。

  4. 使用以下公式初始化OI Matrix:

    OI(1,EF):=1

    OI(2,EF):=6

    for n>2 OI(n,EF):=OI(n-1,EF)*EF

    其中: ◦ OI(n,EF) - 第n次重复后的最优重复间隔时间。

  5. 使用OI Mactrix来决定间隔时间:

    I(n,EF):=OI(n,EF)

    其中: ◦ I(n,EF) - 某知识点的第n次重复的间隔时间,按天计算。 ◦ OI(n,EF) - 重复次数和efactor对应OI Matrix中的值。

  6. 评估每次重复记忆的结果,得出记忆质量。具体见SM-2中介绍。

  7. 按照以下公式更新刚刚记忆的知识点对应的efactor值:

    EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))

    其中: ◦ EF' - 新的efactor值, ◦ EF - 旧的efactor值, ◦ q - 记忆质量,值为0,1,2,3,4,5。

    如果计算后的efactor小于1.3,则赋值为1.3。

  8. 更新OI Matrix 中相关的值.

  9. 示范公式如下(实际使用在SuperMemo4中的要更复杂一些):

    OI':=interval+interval*(1-1/EF)/2*(0.25*q-1)

    OI*:=(1-fraction)OI+fractionOI'*

    其中: ◦ OI - 新值 ◦ OI' - 临时辅助 ◦ OI - 旧值, ◦ interval - 之前的间隔时间, ◦ fraction - 用来调整矩阵收敛速度的系数,0-1之间,1为最快。 ◦ EF - 知识点相关efactor, ◦ q - 知识点记忆质量,0-5。

  10. 如果记忆质量小于3,则重置该知识点为初始状态(efactor不变),再次记忆该知识点。

  11. 如果记忆质量小于4,则再次记忆该知识点。

相关代码及使用示例

NPM

已经发布到了npm,可以直接安装使用:

npm install spaced-repetition.js

GITHUB

Github仓库地址:spaced-repetition.js