万码皆空的博客
Published on

间隔重复记忆之SM-5

Authors
  • avatar
    Name
    万码皆空
    Twitter

SM-5算法说明

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

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

  3. 使用重复次数和efactor制作一张表,叫做OF Matrix,使用以下公式初始化:

    OF(1,EF):=4

    for n>1 OF(n,EF):=EF

    其中: ◦ OF(n,EF) - efactor和重复次数对应的最优因数。

  4. 使用OF Matrix来计算间隔时间:

    I(n,EF)=OF(n,EF)*I(n-1,EF)

    I(1,EF)=OF(1,EF)

    其中: ◦ I(n,EF) - 知识点efactor和重复次数对应的间隔时间。 ◦ OF(n,EF) - OF Matrix中对应重复次数和efactor的值。

  5. 评估知识点记忆结果,值为0-5。具体参见SM-2中说明。

  6. 每次重复后更新知识点相关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。

  7. 更新OF Matrix中相关值,示范公示如下:

    OF':=OF*(0.72+q*0.07)

    OF*:=(1-fraction)OF+fractionOF'*

    其中:

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

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

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

相关代码及使用示例

NPM

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

npm install spaced-repetition.js

GITHUB

Github仓库地址:spaced-repetition.js