一种基于比特映射的压缩键树的单词检索方法
技术领域
本发明属于电子学习产品的技术领域,特别是涉及一种基于比特映射的压缩键树的单词检索方法。
背景技术
实用的电子词典单词量一般较大,通常需要使用索引改善词典结构,并使用相应的检索算法提高查找速度。
词典数据是一种与字符密切相关的数据,并且单词检索的过程可以看作一个树从根到叶子的路径,因此电子词典一般采用树的结构进行单词检索。
树结构的检索方式目前比较通用,如B树检索,B-树检索,B+树检索,hB*树检索,键树检索(也称TRIE索引树),PATRICIA树检索等。树结构检索方式,一般进行查找包含两种基本操作:(1)在树中查找结点;(2)在结点中查找关键字。
为了节省空间,一般采用压缩后的键树表示。键树的压缩方式有多种多样。为了最大限度的节省空间,完全压缩型的键树是如果存在度为1的子树,而因为度为1的子树的检索是唯一的,因此可以将一些度为1的子树进行压缩,使之成为单个结点。
树结构的单词检索,在一次查询过程中,不需预知待查询单词的长度,沿着树链逐字匹配即可;缺点是它的构造和维护比较复杂,在搜索的过程中也是需要进行单词比较,查询效率较低。而且每个结点一般都具备左右子树结点,浪费了一定的空间。
发明内容
本发明的目的在于克服现有键树检索技术的不足,提出一种非完全压缩型的键树表示,并在该非完全压缩型键树结构上采用了比特映射的单词检索方法,来提高电子词典中单词检索的效率,它可以在牺牲少量存储空间的基础上达到更加快速的查找单词的目的。
为了实现发明目的,采用的技术方案如下:
一种基于比特映射的压缩键树的单词检索方法,包括了以下步骤:
(1)根据单词分布生成非完全压缩的键树;
(2)在非完全压缩的键树上采用比特映射的数据结构;
(3)在基于比特映射关系的键树中进行单词检索。
上述的非完全压缩的键树的每一个结点都是定长的数据形式,其数据结构包括了:
(1)关键字:若关键字是数值,则结点中只包含一个数位,若关键字是单词,则结点中只包含一个文字或者一个字符;
(2)长子结点的指针:如果在单词词库中,根结点到其本身结点的路径所对应的单词前缀具有n个后继关键字,则该结点具有n个子结点;
(3)单词记录指针:如果根结点到其本身结点的路径所对应的字符串在词典中存储相应的单词对应,则存在单词记录指针指向对应单词的物理存储位置。
键树的非完全压缩是基于一定条件下进行的压缩,如果关键字为Value[i]的树结点TreePoint[i]和关键字为Value[k]的子结点TreePoint[k]可以进行非完全压缩合并,形成新的关键字为STRCAT(Value[i],Value[k])的子树结点TreePoint[i,k],我们定义其压缩规则如下:
(1)TreePoint[i]没有兄弟结点,即TreePoint[i]的父亲结点只有唯一的子结点;
(2)TreePoint[i]没有对应的单词,即根结点到TreePoint[i]的路径对应的字符串在词典中没有对应的单词存在,TreePoint[i]没有单词记录指针;
(3)TreePoint[k]没有兄弟结点,即TreePoint[i]只有唯一的儿子结点TreePoint[k]。
当遍历键树的时候,发现存在符合上述的压缩规则时,则可以进行键树的非完全压缩,压缩后的新结点TreePoint[i,k]的子结点的指针和单词记录指针是保存了压缩的两个结点中的子结点TreePoint[k]中的数据。键树的非完全压缩将关键字为单字符的键树的结点进行压缩,形成关键字为多字符的结点。没有压缩的树结点是定长的存储结构,压缩后的新结点TreePoint[i,k]是变长的存储结构。
鉴于基于Hash函数的检索方式在文件组织中越来越重要,Hash函数的快速定位在检索中的优越性,因此本发明采用了基于映射关系的压缩键树的检索方式。
在非完全压缩的键树中,如果某结点的子结点个数大于1,则该结点的所有子结点均为关键字为单字符的结点,即关键字为单字符的结点和关键字为多字符的结点不会为兄弟结点,因此我们在检索时只需要考虑关键字为单字符的结点的检索。
为了在压缩的键树上实现快速的映射方式,本发明在压缩后的键树上新建一个字段:比特映射码。比特映射码根据词典的字符个数而定,有多少个字符便有多少个比特,因此基于映射关系的压缩键树的检索方式一般只适合于单词中字符较少的词典,如英文词典中英文字符的个数为26个。
本发明采用了比特映射码的压缩键树,在单词检索的时候,可以根据键树中的比特映射码的比特流,不需要经过关键字的比较就能计算出需要检索的下一个结点的位置,因此能快速的进行单词检索的定位。
本发明的技术特点体现如下:
1、将电子词典中的单词进行键树的非完全压缩,节省了一定的存储空间,由于将结点进行压缩,键树结构的结点变得更少,因此在检索的时候同时也提高了检索的速度。
2、非完全压缩的键树中,关键字为单字符的结点和关键字为多字符的结点不会为兄弟结点,并且单字符关键字的结点都是定长的,因此可以采用比特映射码来实现单词的关键字为单字符的子结点的位置关系。
3、基于比特映射的单词检索方法,虽然占有了少量的存储空间,但是检索速度将可以大大的提高。
附图说明
图1为压缩后的键树表示图;
图2为基于映射关系的压缩键树示意图。
具体实施方式
下面结合附图对本发明进行进一步阐述:
图1中是单词的非完全压缩的键树表示图,左图为进行压缩前的键树表示,右图为压缩后的键树表示,其中的单框结构表示关键字为单字符的结点,双框结构表示关键字为多字符的结点。
图2为基于映射关系的压缩键树示意图,其中结点的数据结构分别包括了关键字,长子结点的指针,单词解释的记录指针和比特映射码。而单词的比特映射关系体现在比特码上。
本发明中的一种基于比特映射的压缩键树的单词检索方法,当单词检索到键树结点TreeNode[i](i从0开始)时,如果所要查找的单词的下一个字符为e(或者a~z),可以通过检测其比特映射码BITCODE[i],依次检测BITCODE[i]的比特流,看第5(对应1~26)个比特是否为1,如果该比特为1,则表示存在该结点存在关键字为e(或者为a~z)的后继子结点,否则,如果该比特为0,则表示没有该子结点,即单词的键树结构中,不存在所需要查找的单词,并返回。
由于键树的结点中都只有长子结点的指针,并且非完全压缩的键树中,关键字为单字符的结点和关键字为多字符的结点不会为兄弟结点,并且单字符关键字的结点都是定长的。因此我们检索多子结点的键树结构中,只需要考虑到关键字为单字符的结点的指针的定位关系。
通过查看键树结点TreeNode[i]的比特映射码BITCODE[i]的比特流,如果所查找的单词的下一个字符为e(或者a~z),我们可以计算出BITCODE[i]比特流中从开始到第5个比特(对应1~26)为止,值为1的比特个数Offset[i]个,并且TreeNode[i]的长子结点的指针为Position[i],关键字为单字符的键树结点的数据存储大小为NODESIZE,则第i+1个字符所对应键树结点的指针为Position[i]+Offset[i]*NODESIZE。
本发明中的一种基于比特映射的压缩键树的单词检索方法,其检索流程为:
(1)初始化输入单词的要对第i个字符进行匹配,i=0,键树开始检索结点为键树的根结点,进入(2);
(2)查看比特映射码,如果键树结点不存在关键字为输入单词第i个字符的结点,返回查无此词,退出,否则,进入(3);
(3)查看比特映射码,查找出键字为输入单词第i个字符的子结点的位置,进入该子结点进行下一步查找,进入(4);
(4)如果该子结点为所需要查找的单词,则找出该结点对应的单词记录指针,并查找到该记录显示出来,否则i+1,进入(2)。测试实例
算法的存储分析主要是针对普通的键树,完全压缩后的键树和非完全压缩的键树,其中的数据我们采用英英马词典EEM(总单词个数62852),并且在结点生成时采用忽略英文单词大小写和按单词名称升序排列的方式进行。
键树的存储情况统计对比如下表所示。
表1键树结构的存储情况对比表
|
普通键树 |
完全压缩的键树 |
非完全压缩键树 |
结点总数(个) |
311450 |
93789 |
148827 |
合并的结点个数(个) |
0 |
55038 |
40876 |
总存储空间大小(byte) |
3114500 |
1155551 |
1650893 |
存储空间比例 |
100% |
37.10% |
53.01% |
通过上表的比较,我们可以得出,压缩后的键树较没有压缩的普通键树存储空间更小,存储空间节省了将近46.99%-62.90%,压缩的显著效果在于:普通键树中有超过65.34%的结点进行了压缩合并,把接近20多万个单字符关键字的结点压缩成4-5万个多字符关键字的结点。
采用比特码映射关系的检索算法效率如下所示。
表2键树结构的存储和检索性能对比表
|
二分法的普通键树 |
顺序检索的完全压缩键树 |
比特映射的非完全压缩键树 |
总存储空间大小(byte) |
3425950 |
1155551 |
2082697 |
最坏检索次数(次) |
70 |
88 |
21 |
平均检索次数(次) |
23.55 |
37.02 |
8.04 |
存储*检索(MB*次) |
76.94 |
40.80 |
15.97 |
由表1和表2可得,完全压缩的键树比非完全压缩的键树多使用了将近50%的存储空间,完全压缩的键树在存储空间这方面具有巨大的优势。
此外,采用了比特映射关系的非完全压缩键树,在单词的检索过程中,检索性能非常明显,其平均检索次数8.04次更是远远低于其它键树20次左右的平均检索次数,并且采用比特映射关系的非完全压缩键树,其最坏检索次数也只有21次,可见其检索性能显著高于其他结构的键树检索。