前天晚上检查LAC代码,总觉得其使用的'记忆'算法有问题,调试很久,火起,重新实现了一个...
所谓'记忆'算法,最著名的应该是那个什么'艾宾浩斯记忆曲线'了,可惜咱数学不好,没看懂,只好自己弄个简单的了...
'记忆'算法由四个参数组合而成,很简单 -- 一个
时间间隔参数乘以由
前次分数,
本次分数以及
结果判定确定的三维坐标,即可获得
下次时间.
三维坐标系如下:
float rateTable[4][4] = {
{ 1.75f, 0.80f, 0.45f, 0.17f },
{ 1.50f, 1.25f, 0.55f, 0.20f },
{ 1.00f, 0.80f, 0.45f, 0.20f },
{ 0.80f, 0.50f, 0.30f, 0.17f }
};
int judgeTable[2][4] = {
{ 0, 1, 1, 2 },
{ 2, 2, 3, 3 }
};
计算方法简化如下:
check = judgeTable[judge][preScore];
next = ((last != 0) ? (updated - last) : 7) * rateTable[curScore][check] + updated + 1;
咱也不知道这个算法好不好,所有系数完全自己推倒杜撰的(该不该弄个专利去呢...),为了表达自己对'严谨科学态度'的敬意,做了如下测试,请看各位报表..
1. 假定某个单词从第一次就选择'认识',且判定为'正确'(意思是自己判定'认识'此单词的判断是正确的),那么此单词连续九次出现的时间以及两次间时间间隔趋势如下图所示: (X轴为单词出现是时间,Y轴为两次出现时间的间隔)
从图表中可以看出,一个'熟悉'的单词,出现的间隔会越来越长.这复合基本逻辑--熟悉的单词不用经常记忆.
2. 相反,假定某个单词起始为'熟悉',但在其后选择中,选择'没概念',且判定为'错误'(意思是自己确实对此单词'没概念',)(这里跟前面的解释一起理解时,有点乱...),那么此单词连续九次出现的 时间间隔趋势如下:
由上图可见,随着选择'没概念'的次数增加,单词出现的间隔不断变小,直至为1.
3. 下面趋势图显示了当一个单词每次都选择'熟悉',但判定依次为'正确'和'错误',连续九次出现后的时间间隔变化:
4. 最后一个则是单词每次选择'没概念'但判定依次为'正确'和'错误'的时间间隔趋势图:
'熟悉度'一共有4级,且有两个参数,加上'判定'参数的2级,三个参数组合起来的系数关系就是前面的两个数组,我是没敢测试每种组合的趋势,挑了上面四个最简单的可能,其他的大家有兴趣自己看吧...欢迎指点,欢迎拍砖,但不许打脸...
<---- 判定意思好混乱的分割线 ---->
刚才突然想起一个好方法,可以屏蔽'判定'概念,这就去改...