Java中间隔重复算法的开源实现[已关闭]
我从事一个项目,其中间隔重复是必不可少的,但我不是这个主题的专家,我害怕重新发明方轮。我的研究为我指出了两个不同的系统,即Leitner系统和SM系列算法。
我还没有决定哪个系统最适合我的项目。如果我要采取SM方向,我想我会尝试实现类似于Anki使用的东西。
我最好的选择是使用现有的Java库。这可能很简单,我所需要的只是计算下一次重复的时间。
有没有人听说过这样的倡议?
我从事一个项目,其中间隔重复是必不可少的,但我不是这个主题的专家,我害怕重新发明方轮。我的研究为我指出了两个不同的系统,即Leitner系统和SM系列算法。
我还没有决定哪个系统最适合我的项目。如果我要采取SM方向,我想我会尝试实现类似于Anki使用的东西。
我最好的选择是使用现有的Java库。这可能很简单,我所需要的只是计算下一次重复的时间。
有没有人听说过这样的倡议?
我还没有看过Anki的实现,但你见过这个吗?quiz-me a SRS in Java.
基本上它是这样的
public static void calcuateInterval(Card card) {
if (card.getEFactor() < 3) {
card.setCount(1);
}
int count = card.getCount();
int interval = 1;
if (count == 2) {
interval = 6;
} else if (count > 2) {
interval = Math.round(card.getInterval() * card.getEFactor());
}
card.setInterval(interval);
}
如果你真的想要Anki的算法,请查看Github中Android中Anki的来源。虽然它是GPL,所以你可能需要购买许可证。
我确实在自己的抽认卡应用程序中重新发明了方形轮子。该算法非常简单:项目的权重是年龄组件,进度组件和努力组件的乘积。
年龄部分
公式为 A(x) = Cn^x,其中
例如,如果希望该值每五天翻一番,则 n = e^(ln(2/C)/5)。
进度组件
公式为 P(x) = Cn^-x,其中
例如,如果希望该值每连续五次成功减半,则 n = e^(ln(1/2)/-5)。
工作量组件
这采用以下两个值之一:
进度调整如下:
是的,值可以为负数。:)
该应用程序通过从所有项目中随机选择来选择要测试的下一个项目,选择的概率直接随项目的重量而变化。
算法中的特定数字是可调整的。我已经使用我目前的价值观大约一年了,在积累和保留西班牙语,德语和拉丁语的词汇方面取得了巨大成功。
(抱歉马铃薯质量的数学表达式。LaTeX在这里是不允许的。