java的流间隔问题_java – SuperMemo(SM-2)的间隔重复算法
SuperMemo算法
>重復(fù) – 這是用戶看到閃卡的次數(shù). 0表示他們尚未研究過,1表示這是他們的第一次,依此類推.在一些文檔中它也被稱為n.
>質(zhì)量 – 也稱為評估質(zhì)量.這是閃存卡的難度(由用戶定義).比例從0到5.
> easyiness – 這也稱為easyiness factor或EFactor或EF.它是乘數(shù),用于增加間隔重復(fù)的“空間”.范圍從1.3到2.5.
> interval – 這是重復(fù)之間的時間長度(以天為單位).它是間隔重復(fù)的“空間”.
> nextPractice – 這是閃卡隨后再次審核的date/time.
默認(rèn)值
int repetitions = 0;
int interval = 1;
float easiness = 2.5;
碼
private void calculateSuperMemo2Algorithm(FlashCard card, int quality) {
if (quality < 0 || quality > 5) {
// throw error here or ensure elsewhere that quality is always within 0-5
}
// retrieve the stored values (default values if new cards)
int repetitions = card.getRepetitions();
float easiness = card.getEasinessFactor();
int interval = card.getInterval();
// easiness factor
easiness = (float) Math.max(1.3, easiness + 0.1 - (5.0 - quality) * (0.08 + (5.0 - quality) * 0.02));
// repetitions
if (quality < 3) {
repetitions = 0;
} else {
repetitions += 1;
}
// interval
if (repetitions <= 1) {
interval = 1;
} else if (repetitions == 2) {
interval = 6;
} else {
interval = Math.round(interval * easiness);
}
// next practice
int secondsInDay = 60 * 60 * 24;
long now = System.currentTimeMillis();
long nextPracticeDate = now + secondsInDay*interval;
// Store the nextPracticeDate in the database
// ...
}
筆記
>上面的代碼沒有設(shè)置容易度的上限.應(yīng)該是2.5嗎?文檔和源代碼似乎互相矛盾.
>如果質(zhì)量評估小于3,文檔也聽起來似乎不應(yīng)該更新容易因素,但這似乎與源代碼相矛盾.在我看來,更新它更有意義(只要它保持在1.3以上).無論如何,我每次都在更新它.
> Anki源代碼是here.雖然這是一個很大的項目,但我還沒有深入挖掘它們的算法版本.
> This post討論了SM-2的一些問題以及這些問題的解決方案.
總結(jié)
以上是生活随笔為你收集整理的java的流间隔问题_java – SuperMemo(SM-2)的间隔重复算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python多线程抓取并验证代理(转)
- 下一篇: C语言实现输出九九乘法表