- Published on
间隔重复记忆之SM-4
- Authors
- Name
- 万码皆空
SM-4算法说明
将知识拆分长最小单元。
每一个知识点分配一个efactor,初始值为2.5。
使用重复次数和efactor制作一张表,叫做OI Matrix。
使用以下公式初始化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次重复后的最优重复间隔时间。
使用OI Mactrix来决定间隔时间:
I(n,EF):=OI(n,EF)
其中: ◦ I(n,EF) - 某知识点的第n次重复的间隔时间,按天计算。 ◦ OI(n,EF) - 重复次数和efactor对应OI Matrix中的值。
评估每次重复记忆的结果,得出记忆质量。具体见SM-2中介绍。
按照以下公式更新刚刚记忆的知识点对应的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。
更新OI Matrix 中相关的值.
示范公式如下(实际使用在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。
如果记忆质量小于3,则重置该知识点为初始状态(efactor不变),再次记忆该知识点。
如果记忆质量小于4,则再次记忆该知识点。
相关代码及使用示例
NPM
已经发布到了npm,可以直接安装使用:
npm install spaced-repetition.js
GITHUB
Github仓库地址:spaced-repetition.js