mini英汉字典 版本v1.0

刚上班,没有事情干,所有的环境没有准备好,Alias刚发下来,还要办理一些相关的手续...真是无聊,写了一个小英汉字典,将来准备长期做下去,开一个日志进行跟踪。希望可以提高自己的编程水平。不能挂附件,郁闷。

 

mini英汉字典 v1.0 http://m177.mail.qq.com/cgi-bin/readmail?sid=oJFTNeYJ7QPXb2wh&mailid=ZL2719-zP3B4zDXKccTNzR5_a9Be15&nocheckframe=true&t=attachments&select=1

英汉字典第一版本 by mingspy
===============================================================
[功能]
1、该字典只支持英文单词查询,输入因为单词,回车后显示汉语意思。目前只支持全英文字母的单词查询,原因在后面的实现介绍中会讲到。注意要把ForeignTrade.dic与Dictinary.exe放在同一目录下。在程序里面写死了字典文件。因为是基础版本,也没有必要把字典文件写入配置文件中,同样也不用支持多字典的查询。
2、该字典提供了一个模糊查询的功能,比如,输入ab, 如果不存在ab这个单词,则会提示是否使用模糊查询。如果使用的话会把ab开头的所有单纯查询出来。

[缺点]
1、使用trie树,占用内存太多。下一版本2.0改善trie树的结构。版本3.0使用hash表实现,同样都是把字典文件调入内存中。版本4.0开始使用索引,不再把字典文件全部调入内存,同时可以支持多字典文件查询。
2、模糊查询不彻底,没有支持字符的匹配,比如ab*c查询。
3、不支持非英文单词的查询,在版本2.0中进行改善。
4、字符界面,交互方式不灵活,在5.0开始使用UI.
5、单线程操作,功能太简单。在5.0之后开始使用多线程。

[实现]

主要使用了trie结构来把字典保存到内存中。trie的节点分为两类,分支节点和叶子节点(composite模式)。
分支主要作用是连接后续节点,其次在分支节点上也可以保存单词的解释,这样就造成了有的分支节点浪费了一个指针的空间,而这个节点没有相应的单词。改进方法是在2.0版本中把分支节点再细化,分成带有记录和不带记录的分支。同时,有的分支没有26个分支,却还要用26个指针,这浪费了大量的空间,应该是存储一个map,用于动态的去添加分支节点的子节点。缺点是效率会低一些。
叶子节点主要是用于存储单词。处理好叶子节点和分支节点的转换,可以提高插入算法的效率。对于一次插入,可以使用原有算法。如果是大量插入的话,可以增加一个load方法专门用于批量装入字典。批量的方法有两种,一是设定一个阀值,只有关键值得长度大于该阀值时,才把其生成为叶子节点,这样就能避免一些中间的元素被申请为叶子,然后又替换成分支节点。这样就需要在最后把一些误申请的分支节点转换成叶子节点。另一种方法是把要替换的分支阶段和叶子节点分别保存到两个队列里,当队列空时才去申请新节点。到底哪种方法比较快速,应该与数据有关。还是多实验下。当4.0版本以后不再使用全部调入内存,目前进行这样的改进主要用于练习算法,并验证一下算法的时间和空间的优劣。

----------------------------------------------------------------------------------------------------------------------

//MyMain.cpp

 

//Trie.h

//Dictrionary.h

//Trie.cpp

//Dictrionary.cpp

 

//ForeignTrade.dic 片段

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值