现在应用的查找功能已经实现,但存在一个问题,就是应用刚启动的时候,将单词load到ram中的时候消耗的时间较长,如何优化
设计思路如下,大牛们看看有哪里能改进:
1.定义链表,从文件中将每个单词load到ram中,(如果直接从文件查找,单词多了查询每个单词都很慢,所以先将单词存到buffer中),如果单词稍多,现在有6000个,这个load的过程耗时较长
2.将输入的单词与ram中的单词进行查找匹配,再根据查到单词对应的文件中的位置找出相应的解释,查找的过程有优化,很快
所以现在最大的问题是单词多了,全部load占有的buffer空间较大,耗时较多.有没有做过类似应用的,给点建议啊~~
9 个解决方案
#1
6000个不多吧, 咋会慢啊 ...
#2
如果只是简单的load6000个单词那应该不是很满,因为是保存在文件里面,load的时候先要计算每个单词和解释的长度,读出来,然后再memcpy到ram中,所以可能就耗时较多了
#3
看来是你的文件格式问题很大...
#4
之前有关注输入法查找的,感觉输入法里面有个搜索引擎,那个应该没有将整个字库存到buf中,而是用搜索引擎直接从字库中匹配.所以最好你能找一个专业词库,类似字库,里面实现了引擎.直接通过引擎去查找,这样效率高,而且占内存也不多.引擎怎么实现就不太清楚了
#5
保存单词的文件只是简单的奇数行是单词,偶数行是解释.
本来觉得应该用一个表来保存,这样查找起来也能比较快,关键做表太费时间了,所以只能用链表在ram中建了个表.
有没有什么好方案啊?
本来觉得应该用一个表来保存,这样查找起来也能比较快,关键做表太费时间了,所以只能用链表在ram中建了个表.
有没有什么好方案啊?
#6
我觉得4楼说的词库估计也就是一个大表,单词在一列,查找到单词后再根据主键去匹配解释.这样做应该能比较快,也不用load到ram中,关键建这个表费时间啊.
#7
字符串索引的一个常用数据结构是TRIE树,就是设计一个每个节点有26个children的树,每个树对应一个英文字母,这样,查找任意一个单词所需的时间之和只与这个单词的长度相关,时间复杂度为O(1)(查找长度为9的单词需要9步)
举例,对于一下3个词at, bye, buy结构如下
<root>
|
| |
a b
| |
| | |
t u y
| |
y e
举例,对于一下3个词at, bye, buy结构如下
<root>
|
| |
a b
| |
| | |
t u y
| |
y e
#8
置于存储,可以直接将这个数据结构序列化到文件当中去,然后一口气load进来就可以了。
如果,单词太多(比如10万以上),可以想一些,在内存和硬盘间进行置换的方法
如果,单词太多(比如10万以上),可以想一些,在内存和硬盘间进行置换的方法
#9
了解了其它的一些做电子词典的确实需要词库和引擎来实现
多谢楼上的几位大虾给的建议
多谢楼上的几位大虾给的建议
#1
6000个不多吧, 咋会慢啊 ...
#2
如果只是简单的load6000个单词那应该不是很满,因为是保存在文件里面,load的时候先要计算每个单词和解释的长度,读出来,然后再memcpy到ram中,所以可能就耗时较多了
#3
看来是你的文件格式问题很大...
#4
之前有关注输入法查找的,感觉输入法里面有个搜索引擎,那个应该没有将整个字库存到buf中,而是用搜索引擎直接从字库中匹配.所以最好你能找一个专业词库,类似字库,里面实现了引擎.直接通过引擎去查找,这样效率高,而且占内存也不多.引擎怎么实现就不太清楚了
#5
保存单词的文件只是简单的奇数行是单词,偶数行是解释.
本来觉得应该用一个表来保存,这样查找起来也能比较快,关键做表太费时间了,所以只能用链表在ram中建了个表.
有没有什么好方案啊?
本来觉得应该用一个表来保存,这样查找起来也能比较快,关键做表太费时间了,所以只能用链表在ram中建了个表.
有没有什么好方案啊?
#6
我觉得4楼说的词库估计也就是一个大表,单词在一列,查找到单词后再根据主键去匹配解释.这样做应该能比较快,也不用load到ram中,关键建这个表费时间啊.
#7
字符串索引的一个常用数据结构是TRIE树,就是设计一个每个节点有26个children的树,每个树对应一个英文字母,这样,查找任意一个单词所需的时间之和只与这个单词的长度相关,时间复杂度为O(1)(查找长度为9的单词需要9步)
举例,对于一下3个词at, bye, buy结构如下
<root>
|
| |
a b
| |
| | |
t u y
| |
y e
举例,对于一下3个词at, bye, buy结构如下
<root>
|
| |
a b
| |
| | |
t u y
| |
y e
#8
置于存储,可以直接将这个数据结构序列化到文件当中去,然后一口气load进来就可以了。
如果,单词太多(比如10万以上),可以想一些,在内存和硬盘间进行置换的方法
如果,单词太多(比如10万以上),可以想一些,在内存和硬盘间进行置换的方法
#9
了解了其它的一些做电子词典的确实需要词库和引擎来实现
多谢楼上的几位大虾给的建议
多谢楼上的几位大虾给的建议