高手给点建议,如果将电子词典应用的代码优化或者有什么好的算法

Holinan 2008-01-23 01:45:31
最近自己写了一个电子词典的应用,由于是自己写应用练手,所以没有专门的词库,自己将一些单词用txt保存,然后从中查找

现在应用的查找功能已经实现,但存在一个问题,就是应用刚启动的时候,将单词load到ram中的时候消耗的时间较长,如何优化

设计思路如下,大牛们看看有哪里能改进:
1.定义链表,从文件中将每个单词load到ram中,(如果直接从文件查找,单词多了查询每个单词都很慢,所以先将单词存到buffer中),如果单词稍多,现在有6000个,这个load的过程耗时较长
2.将输入的单词与ram中的单词进行查找匹配,再根据查到单词对应的文件中的位置找出相应的解释,查找的过程有优化,很快

所以现在最大的问题是单词多了,全部load占有的buffer空间较大,耗时较多.有没有做过类似应用的,给点建议啊~~
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Holinan 2008-01-24
  • 打赏
  • 举报
回复
了解了其它的一些做电子词典的确实需要词库和引擎来实现

多谢楼上的几位大虾给的建议
北极猩猩 2008-01-23
  • 打赏
  • 举报
回复
置于存储,可以直接将这个数据结构序列化到文件当中去,然后一口气load进来就可以了。

如果,单词太多(比如10万以上),可以想一些,在内存和硬盘间进行置换的方法
北极猩猩 2008-01-23
  • 打赏
  • 举报
回复
字符串索引的一个常用数据结构是TRIE树,就是设计一个每个节点有26个children的树,每个树对应一个英文字母,这样,查找任意一个单词所需的时间之和只与这个单词的长度相关,时间复杂度为O(1)(查找长度为9的单词需要9步)

举例,对于一下3个词at, bye, buy结构如下
<root>
|
| |
a b
| |
| | |
t u y
| |
y e
Holinan 2008-01-23
  • 打赏
  • 举报
回复
我觉得4楼说的词库估计也就是一个大表,单词在一列,查找到单词后再根据主键去匹配解释.这样做应该能比较快,也不用load到ram中,关键建这个表费时间啊.
Holinan 2008-01-23
  • 打赏
  • 举报
回复
保存单词的文件只是简单的奇数行是单词,偶数行是解释.
本来觉得应该用一个表来保存,这样查找起来也能比较快,关键做表太费时间了,所以只能用链表在ram中建了个表.
有没有什么好方案啊?
nihonglei 2008-01-23
  • 打赏
  • 举报
回复
之前有关注输入法查找的,感觉输入法里面有个搜索引擎,那个应该没有将整个字库存到buf中,而是用搜索引擎直接从字库中匹配.所以最好你能找一个专业词库,类似字库,里面实现了引擎.直接通过引擎去查找,这样效率高,而且占内存也不多.引擎怎么实现就不太清楚了
mLee79 2008-01-23
  • 打赏
  • 举报
回复
看来是你的文件格式问题很大...
Holinan 2008-01-23
  • 打赏
  • 举报
回复
如果只是简单的load6000个单词那应该不是很满,因为是保存在文件里面,load的时候先要计算每个单词和解释的长度,读出来,然后再memcpy到ram中,所以可能就耗时较多了
mLee79 2008-01-23
  • 打赏
  • 举报
回复
6000个不多吧, 咋会慢啊 ...

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧