中文字典实现(一)

   中文单词不同于英文单词,区别在于中文单词组成元素是汉字,而英文单词的组成元素是英文字母,英文字母只有26个,而组成中文单词的常用汉字就多达8000多个。

   一般的,英文单词字典采用trie树数据结构。结合trie(单词查找树)的特性,我们了解到,trie树结点的每一个结点包含组成单词的所有的元素,相应的,一棵英文单词查找树(trie)的结点中包含26个孩子结点,孩子结点与字符[a-z]一一对应(hash),  trie树层的索引与某个英文单词的字母一一对应。利用trie树来实现英文单词的存储是一个很完美的选择,单词查询复杂度为O(单词平均长度),在线性时间内可以进行英文单词的查询,可以认为是最优的方案。

   试想,中文单词是否可以利用trie树数据结构实现呢?我们假设利用trie来实现,则当前结点的孩子结点要包含所有的中文单字,每一个结点将达到8000个结点,显然,这在内存耗费方面是不可取的,该方案否定。

   说不上什么理由,我总感觉到,在查找方面,树有着得天独厚的优势(树这种数据结构是学习的自然,这算不算IT界的仿生学呢?)。

   在此之前需要先介绍下,中文在计算机中是如何存储的?在win平台下,汉字默认是以GB2312存储,每一个汉字占用两个字节,高字节代表区,低字节代表位,称为区位码。在区位码中,01-09区为特殊字符,10-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。ASCII码的范围是0-255,从0-127,此范围内包含标点、大小写英文字符、数字、不可打印字符;128-255为不常用字符。为了不与ASCII常用字符冲突,gb2312编码占用了从128-255的区间,从而保证了计算机可以同时表示中英文字符。

   上一段说过,从10到87区全部存储的汉字,每一区中有94位(汉字),通过hash运算,可将此矩阵列表映射到一个线性空间上。一个中文单词的首汉字就可以存储在此线性表中的某一个元素里了。

  这样就完成了首字的映射,(二)将介绍如何存储剩下的汉字

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值