输入法核心数据结构及算法的设计

输入法核心数据结构及算法的设计

 

突然想到了去年腾讯招实习生时笔试的附加题目,就是让你给出一个输入法的设计方案,要求能够提供智能的输入提示,具体题目要求我不太记得了,简单岂见我们只考虑英文输入法~

问题的关键在于如何做到智能输入提示呢?由于很多单词是共享前缀的,才使得用户输入过程中,智能地提示可供选择的词组。因此,创建共享前缀树用于存储单词词条,并在用户输入过程中实时地查寻前缀相同的词条是一个非常好的思路。如果你学过数据结构的话,就知道这种结构叫“键树”。

输入法只需要实现三个非常重要的函数即可:

 

当然在考虑删除某个单词的时候,由于有很多单词共享相同的前缀,所以不能轻易删除,具体删除的情况可以分为三种:完全独立型、完全共享型、部分共享型。大家自己去思考吧,还是很简单的,我就不说了~

其中一种实现思路可以为每个单词节点设计一个计数器,delete的时候就把计数减1,当计数为0时就删除。但这种方法有个缺陷:即每个节点都要多设置一个计数的空间,节点当然不少,无形中对空间会造成比较大的浪费。而且对于输入法而言delete函数并不常用,为了一个极少使用的函数浪费这么多空间肯定是不合适的。特别是对于手机而言,本身内存就已经很少了,这样的设计肯定是bad smell。那么,我们采用另外一种方法去解决了这个问题~

废话我就不太多说了,我觉得用代码描述更为直观,大家有什么问题直接研究代码吧~

 

没有更多推荐了,返回首页