思路
我们可以使用 最大堆(或最小堆),来实时维护当前学习过程中最久未遗忘的汉字的记忆值。这样做的好处是:
- 每次学习汉字之前,我们可以通过堆来快速地找出哪些汉字已经遗忘(即记忆值为 0)。
- 使用优先队列可以避免在每次学习之前遍历所有汉字来衰减记忆值,提升效率。
算法步骤
- 汉字记忆衰减:在每次学习一个新汉字之前,检查堆顶元素(最大记忆值)是否为零,如果是零,则表示这个汉字已经遗忘,应该从堆中删除。然后将所有未遗忘的汉字的记忆衰减。
题目内容
wida 小朋友快到上学的年纪了,为了帮助他进行识字学习,Tk 设计了一套学习计划。
我们用整数 ai 表示汉字类别,相同的数字表示同一个汉字。
学习计划为一个长度为 n 的数组 {a1,a2,...,an},Tk 将按照数组顺序依次教给 wida 小朋友。由于 wida 会边学边回看先前学过的汉字记忆,过程具体如下:
- 当某个汉字 ai 是第 x 次学习这个汉字,且之前未学过或已遗忘,该次学习令其获得 x2 点学习记忆;