需求
假设某个时间段内输入历史为:
'ab', 'ac', 'aa', 'aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'aa'
现用户输入a
系统应自动提示下一个用户可能输入的字母a
、b
或者c
。
解决方案
这个问题可以简化成一个排序问题。对用户的每个输入历史进行权重计算,最后按权重排序,输出排序高的项。
关键在于怎么计算这个权重。
权重计算考虑的因素有以下几个:
- 因子的组成
- 因子的权重计算
- 各因子的权重如何组合成总权重
这里考虑3种因子:
- 出现的次数
- 出现的时间
- 是否连续出现
出现的次数
设为 occ_w
, occ_w=该项在统计的历史中出现的次数
出现的时间
设为 pos_w, pos_w=(该项在统计历史中出现的位置/总统计数量)^2
是否连续出现
设为 ctu_w, 如果上一个项跟本项相同,则ctu_w=上一项的总权重/2。否则ctu_w=0
设总权重为w, w = occ_w + pos_w + ctu_w
实现
参考以下python代码:
ps:没有跟其他方法进行效果对比,纯做着玩。