CN108197313B - 通过16位Trie树实现空间优化的词典索引方法 - Google Patents
通过16位Trie树实现空间优化的词典索引方法 Download PDFInfo
- Publication number
- CN108197313B CN108197313B CN201810100608.XA CN201810100608A CN108197313B CN 108197313 B CN108197313 B CN 108197313B CN 201810100608 A CN201810100608 A CN 201810100608A CN 108197313 B CN108197313 B CN 108197313B
- Authority
- CN
- China
- Prior art keywords
- node
- bit
- dictionary
- root
- represented
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种通过16位Trie树实现空间优化的词典索引方法,该方法包括以下步骤:生成16位Trie树的词典索引;根据用户输入待操作关键字key;根据关键字key当前状态实现索引。在利用映射表结构下构建16位Trie树的词典数据,可对Trie树在空间上进行了优化的同时保证复杂度基本不变,提高了词典构建和索引以及修改删除的速度,并且能够快速检索到关键字key,另外,结合映射表实现16位Trie树的词典索引能够解决一般双数组Trie树词典索引构建起来比较复杂,并且无法随时修改字典,也无法遍历字典的问题。本字典算法可以随时对字典进行修改,遍历,同时在构建时就能够进行排序,经过特定优化后可以作为文件***或者图片影音的索引使用。
Description
技术领域
本发明属于数据结构和信息检索领域,尤其涉及一种通过16位Trie树实现空间优化的词典索引方法。
背景技术
近年来,随着互联网的快速发展和智能移动设备的大量普及,尤其是大数据时代的到来,越来越多的文本、照片、影音数据需要处理,尤其我们日常生活中会经常遇到越来越繁琐复杂的文本数据,如何对大规模文本数据进行高效地存储和索引成为一个新的挑战。文本索引中较简单的是字符串词典索引,其应用无所不在,如地理信息***、网络搜索引擎、信息检索***等。大数据时代的大规模的文本数据同样对字符串词典索引提出了新的挑战。其中Trie树作为一种数据结构经常被用在信息检索领域,帮助我们处理各种数据。传统的Trie树是一种高效的索引树,可以建立有效的数据检索组织结构,其核心思想是以空间换时间,利用字符串的公共前缀来降低查询时间以提高效率,最大限度地减少无谓的字符串比较。但是由于树的很多节点是空节点(稀疏现象严重),所以空间的利用率较低。
空间使用效率和查询效率是评判一个索引算法优劣与否的唯一标准,为了减少Trie树结构的空间浪费,同时又保证Trie树查询效率,有很多的学者对此提出了不同的改进策略。目前主流的Trie树算法主要是基于双数组实现的,虽然双数组Trie树算法有效的降低了Trie树结构的空间浪费但是仍然存在着一些问题,首先就是与动态检索方法相比***时间慢,不能处理频繁的更新。另外一个问题就是双数组的空间效率随着删除数量的增加而降低,因为它保留了删除产生的空元素。
发明内容
为了解决上述技术问题,本发明提供了一种通过16位Trie树实现空间优化的词典索引方法,本发明在结合映射表结构下构建了16位Trie树的词典数据,可对trie树在空间上进行了优化的同时保证复杂度不变,提高了词典构建和索引以及修改删除的速度,并且能够快速检索关键词key,另外,结合映射表实现16位Trie树的词典索引能够解决一般双数组Trie树词典数据索引构建起来比较复杂,并且无法随时修改字典,也无法遍历字典的问题。本字典算法可以随时对字典进行修改,遍历,同时在构建时就能够进行排序。经过特定优化后可以作为文件***或者图片影音的索引使用。
为此,本发明实施例公开了一种通过16位Trie树实现空间优化的词典索引方法。该方法包括以下步骤:生成16位Trie树的词典数据;根据用户输入待操作关键字key;根据关键字key当前状态实现索引。
优选地,所述的16位Trie树的词典数据中以类bitNode作为节点类,以类bitIndex作为索引类。
优选地,所述词典数据中的所有子节点信息的可能组合,用一65536×17大小的二维数组leafsInfoMap映射表来表示。
优选地,所述16位Trie树中的当前节点的叶子节点列表信息值用16位大小的leafsInfo表示。
优选地,所述16位Trie树中的节点值用nodeValue表示,该值从0到15,用于表示节点所代表的值。
优选地,所述16位Trie树中的节点当前存储的叶子节点指针以及数据指针的数组用leafs表示,其中叶子节点指针指向当前节点所对应的叶子节点,数据指针指向当前节点所对应的数据,当叶子节点不存在并且数据指针也不存在时,leafs元素个数为0,当叶子节点存在时,leafs元素个数为叶子节点数量+1(其中数据指针占用一个元素)。
优选地,所述16位Trie树中的节点是否为终端结点用endkey表示,0表示为非终端结点,1表示为终端结点。
优选地,所述16位Trie树的类bitIndex中用root来表示根节点,若用一个字节表示,则共有256个根节点,可表示为一维数组root[256](共256个元素);若用半个字节表示,则共有16个根节点,可表示为一维数组root[16](共16个元素)(根据不同的表示有不同的根节点,以下对该专利的介绍均采用256个根节点表示,即root[256])。
优选地,所述索引包括以下步骤:a.获取到关键字key的第一个字节的值key0,在根节点进行查询(即:root[key0]),若对应的根节点存在,获得该根节点,并执行下一步,否则返回null。
b.获取到关键字key的下一个字节的值,并获得该字节的高4位值high_4bits,在上一步骤获得的节点下,通过节点的leafsInfo和leafsInfoMap映射表查询该字节高4位节点(即:leafsInfoMap[leafsInfo][high_4bits]),若对应的根节点存在,获得该高4位节点,并继续以同样方法查询该字节低4位节点,否则返回null。
c.获得该字节的低4位值low_4bits,在上一步骤获得的高4位节点下,通过节点的leafsInfo和leafsInfoMap映射表查询该字节的低4位节点,若对应的根节点存在,获得该低4位节点,否则返回null。(这里16位trie树是以一个字节的高4位作为父节点,低4位作为子节点来构建,所以采用的是先查询一个字节的高4位节点,在高4位节点存在的情况下,对该节点的低4位节点进行查询的方法。若构建16位trie树的方法不同,则查询方法也有所不同,这里仅以所述的为例。)
d.根据关键字key的长度key_length(以字节为单位)重复b,c步骤,最终获得关键字key所对应的叶子节点。若该节点endkey为1,则该节点为终端结点,表示匹配到了关键字key,返回该节点所对应的value,否则返回null。
优选地,所述索引包括:根据关键字key的索引可以获得其对应的结果。
本发明实例提供的一种通过16位Trie树实现空间优化的词典索引方法能够对trie树在空间上进行了优化的同时保证复杂度基本不变,提高了词典构建和索引以及修改删除的速度,并且能够快速检索到关键字key,另外,结合映射表实现16bitTrie树的词典索引能够解决一般双数组Trie树词典索引构建起来比较复杂,并且无法随时修改字典,也无法遍历字典的问题。本字典算法可以随时对字典进行修改,遍历,同时在构建时就能够进行排序。经过特定优化后可以作为文件***或者图片影音的索引使用。
应当理解,以上总体说明和以下详细说明都是说明性和实例性的,旨在提供对所要求的本发明的进一步说明。
附图说明
图1是本发明实施例通过16位Trie树实现空间优化的词典索引方法的流程图。
图2是本发明实施例根据关键字key的当前状态实现索引的流程框架图。
图3是本发明实施例中词典数据Trie树的构造图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,一下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所述描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
本发明实施例提供的通过16位Trie树实现空间优化的词典索引方法。
如图1所示,是本发明实施例通过16位Trie树实现空间优化的词典索引方法的流程图。
步骤S110:生成16位Trie树的词典数据。
获取词典数据,要生成16位Trie的词典数据包括以下具体步骤:
步骤S111:构建类bitIndex的对象list,对象list中的数据成员root[256]是256个根节点指针的一维数组,以此为基础构建了list链表。
步骤S112:将词典数据中的所有词条和属性信息以key为中心按顺序生成相应的节点(即类bitNode的对象),根据key生成的节点最终可以组成一个森林树(即包含词典数据的完整链表list)。
例如:链表list中要存放如下表1中的这些关键字(key)数据:
aa | ca |
aaa | caaa |
ba | cab |
baa | cac |
baba | daa |
baca | db |
bada | dba |
表1
如图3所示,根据表1的词典数据,这些词之间存在着一些共同的前缀(即相同的父节点),按照这些前缀可以组成一个森林树,各棵树的结点做如下说明:
虚线圆代表树的终端结点(即该节点endkey=1);
实线圆代表树的非终端结点(即该节点endkey=0);
从树的根部节点到当前终端结点构成的词是词典中的一条完整词条;
从树的根部节点某一非终端结点构成的词是词典中某些词条的公共前缀。
由此可见构建的森林树即为list链表,其中节点是类bitNode的对象,通过list链表对节点进行管理。
每个节点最多有16个子节点,节点中的用16位的大小的leafsInfo来表示其子节点的信息,如leafsInfo值为0x0009(二进制为000000000001001),代表该节点其下只有有第0和第3节点。
节点中用nodeValue表示当前节点所代表的值,大小从0到15。
节点中用endkey表示当前节点是否为终端结点,0表示为非终端结点,1表示是终端结点。
节点中用leafs指针数组来表示其所存在的子节点及数据指针。相比于经典trie树的构建,Leafs指针数组采用动态构建,Leafs指针数组大小随着子节点数量改变而改变,最大元素为17。从根本上杜绝了经典trie树构建中子节点指针数量固定不变的空间上的浪费。
步骤S113:构建词典数据索引信息的所有情况的映射表leafsInfoMap。该表为一65536×17大小的二维数组,其中65536个数是16位leafsInfo的所有情况(即2的16次方)所确定的,不同的leafsInfo情况下里面分别是该情况下对应的16个子节点信息(用0-15来表示),最后一位16用来表示当前leafsInfo情况下的子节点数量。
例如:leafsInfoMap[leafsInfo][0],若leafsInfoMap[leafsInfo][0]值不为零(即当前节点存在值为0的子节点),那么其位置为leafs[leafsInfoMap[leafsInfo][0]-1],否则不存在。
该步骤伪代码如下:
步骤120:根据用户输入待操作关键字key。
16位空间优化过后的Trie树构建好之后,接下来就是查询用户输入的关键字是否存在,即是否是从根节点到叶子节点的一条完整路径。
步骤130:根据关键字key实现查询流程框架图,具体步骤如下:
步骤131:a.获取到关键字key的第一个字节的值key0,在根节点进行查询(即:root[key0]),若对应的根节点存在,获得该根节点,并执行下一步,否则返回null;
步骤132:b.获取到关键字key的下一个字节的值,并获得该字节的高4位值high_4bits,在上一步骤获得的节点下,通过节点的leafsInfo和leafsInfoMap映射表查询该字节高4位节点(即:leafsInfoMap[leafsInfo][high_4bits]),若对应的根节点存在,获得该高4位节点,并继续以同样方法查询该字节低4位节点,否则返回null。
步骤133:c.获得该字节的低4位值low_4bits,在上一步骤获得的高4位节点下,通过节点的leafsInfo和leafsInfoMap映射表查询该字节的低4位节点,若对应的根节点存在,获得该低4位节点,否则返回null。(这里16位trie树是以一个字节的高4位作为父节点,低4位作为子节点来构建,所以采用的是先查询一个字节的高4位节点,在高4位节点存在的情况下,对该节点的低4位节点进行查询的方法。若构建16位tri e树的方法不同,则查询方法也有所不同,这里仅以所述的为例。)
步骤134:d.根据关键字key的长度key_length(以字节为单位)重复b,c步骤,最终获得关键字key所对应的叶子节点。若该节点endkey为1,则该节点为终端结点,表示匹配到了关键字key,返回该节点所对应的value,否则返回null。
步骤130-133伪代码如下:
根据上述对本发明的实施例的具体描述,可以清楚地理解根据本发明的通过16位Trie树实现空间优化的词典索引方法能够对Trie树在空间上进行了优化的同时保证复杂度基本不变,提高了词典构建和索引以及修改删除的速度,并且能够快速检索到词条的所有前缀词,另外,结合映射表实现16位Trie树的词典索引能够解决一般双数组Tri e树词典数据索引构建起来比较复杂,并且无法随时修改字典,也无法遍历字典的问题。本字典算法可以随时对字典进行修改,遍历,同时在构建时就能够进行排序。经过特定优化后可以作为文件***或图片影音的索引使用。
Claims (8)
1.一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,该方法包括:
生成16位Trie树的词典数据;
根据用户输入待操作关键字key;
根据关键字key当前状态实现索引;
所述的16位Trie树的词典数据中以类bitNode作为节点类,以类bitIndex作为管理类;
类bitNode中公有数据成员包含节点的所有信息;其中主要数据信息有:
leafsInfo:叶子节点列表信息;
nodeValue:当前节点所代表的值;
endkey:当前节点是否为终端结点;
leafs:叶子节点以及数据指针;
所述词典数据中的所有子节点信息的可能组合,用一65536×17大小的二维数leafsInfoMap映射表来表示;其中65536个数是16位leafsInfoMap的所有情况,即2的16次方所确定的,不同的leafsInfoMap情况下里面是该情况下对应的16个子节点信息,用0-15来表示,最后一位16用来表示当leafsInfoMap情况下的子节点数量;
所述索引方法的16位Trie树是以一个字节的高4位作为父节点,低4位作为子节点来构建,采用的是先查询一个字节的高4位节点,在高4位节点存在的情况下,对该节点的低4位节点进行查询;
所述leafs指针数组采用动态构建。
2.根据权利要求1所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述16位Trie树中的当前节点的叶子节点列表信息值用16位大小的leafsInfo表示。
3.根据权利要求1所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述16位Trie树中的节点值用nodeValue表示,该值从0到15,用于表示节点所代表的值。
4.根据权利要求1所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述16位Trie树中的节点当前存储的叶子节点指针以及数据指针的数组用leafs表示,其中叶子节点指针指向当前节点所对应的叶子节点,数据指针指向当前节点所对应的数据,当叶子节点不存在并且数据指针也不存在时,leafs元素个数为0,当叶子节点存在时,leafs元素个数为叶子节点数量+1,所述数据指针占用一个元素。
5.根据权利要求1所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述节点是否为终端结点用endkey表示,0表示为非终端结点,1表示为终端结点。
6.根据权利要求1所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述类bitIndex中用root来表示根节点,若用一个字节表示,则共有256个根节点,可表示为一维数组root[256],共256个元素;若用半个字节表示,则共有16个根节点,可表示为一维数组root[16],共16个元素;根据不同的表示有不同的根节点,所述root均采用256个根节点表示,即root[256]。
7.根据权利要求1所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述索引方法包括:a.获取到关键字key的第一个字节的值key0,在根节点进行查询,即:root[key0],若对应的根节点存在,获得该根节点,并执行下一步,否则返回null;
b.获取到关键字key的下一个字节的值,并获得该字节的高4位值high_4bits,在上一步骤获得的节点下,通过节点的leafsInfo和leafsInfoMap映射表查询该字节高4位节点,即leafsInfoMap[leafsInfo][high_4bits],若对应的根节点存在,获得该高4位节点,并继续以同样方法查询该字节低4位节点,否则返回null;
c.获得该字节的低4位值low_4bits,在上一步骤获得的高4位节点下,通过节点的leafsInfo和leafsInfoMap映射表查询该字节的低4位节点,若对应的根节点存在,获得该低4位节点,否则返回null;
d.根据关键字key的长度key_length以字节为单位重复b,c步骤,最终获得关键字key所对应的叶子节点;若该节点endkey为1,则该节点为终端结点,表示匹配到了关键字key,返回该节点所对应的value,否则返回null。
8.根据权利要求1或7所述的一种通过16位Trie树实现空间优化的词典索引方法,其特征在于,所述索引方法包括:根据关键字key的索引可以获得其所对应的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810100608.XA CN108197313B (zh) | 2018-02-01 | 2018-02-01 | 通过16位Trie树实现空间优化的词典索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810100608.XA CN108197313B (zh) | 2018-02-01 | 2018-02-01 | 通过16位Trie树实现空间优化的词典索引方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108197313A CN108197313A (zh) | 2018-06-22 |
CN108197313B true CN108197313B (zh) | 2021-06-25 |
Family
ID=62592320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810100608.XA Active CN108197313B (zh) | 2018-02-01 | 2018-02-01 | 通过16位Trie树实现空间优化的词典索引方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108197313B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684438B (zh) * | 2018-12-26 | 2020-11-13 | 成都科来软件有限公司 | 一种具有父子层级结构检索数据的方法 |
CN111382323B (zh) * | 2018-12-29 | 2023-08-11 | 贵州白山云科技股份有限公司 | 一种数据检索优化方法、装置和计算机设备 |
CN112307266B (zh) * | 2019-07-31 | 2023-08-22 | 华为云计算技术有限公司 | 一种索引模型的构建方法及装置 |
CN110489516B (zh) * | 2019-08-15 | 2022-03-18 | 厦门铅笔头信息科技有限公司 | 一种快速为海量结构化数据建立前缀索引的方法 |
CN116069894B (zh) * | 2022-12-20 | 2024-01-26 | 上海云砺信息科技有限公司 | 一种基于组织隔离数据权限的数据存储、搜索方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5276868A (en) * | 1990-05-23 | 1994-01-04 | Digital Equipment Corp. | Method and apparatus for pointer compression in structured databases |
CN100476800C (zh) * | 2007-06-22 | 2009-04-08 | 腾讯科技(深圳)有限公司 | 一种切分索引分词的方法及*** |
CN101141389B (zh) * | 2007-09-29 | 2010-06-16 | 华为技术有限公司 | 增强多位Trie树查找方法和装置 |
CN101499094B (zh) * | 2009-03-10 | 2010-09-29 | 焦点科技股份有限公司 | 一种数据压缩存储并检索的方法及*** |
CN103365992B (zh) * | 2013-07-03 | 2017-02-15 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典检索方法 |
CN103699647B (zh) * | 2013-12-26 | 2017-02-15 | 苏州大学 | 一种字符串词典的索引方法及*** |
-
2018
- 2018-02-01 CN CN201810100608.XA patent/CN108197313B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108197313A (zh) | 2018-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108197313B (zh) | 通过16位Trie树实现空间优化的词典索引方法 | |
CN100444167C (zh) | 完美双数组trie树词典管理与检索方法 | |
US10055439B2 (en) | Fast, scalable dictionary construction and maintenance | |
JP5858432B2 (ja) | 分散連想メモリベースを提供する方法、システム、及びコンピュータプログラム製品 | |
CN107153647B (zh) | 进行数据压缩的方法、装置、***和计算机程序产品 | |
CN101576929B (zh) | 一种快速词条提示的实现方法 | |
CN102246172A (zh) | 用于电子内容的分布式索引搜索的***及方法 | |
CN102411580B (zh) | 可扩展标记语言文档的检索方法及装置 | |
CN101071420A (zh) | 一种切分索引分词的方法及*** | |
CN104268157A (zh) | 一种数据搜索中的纠错装置及其方法 | |
CN106874425B (zh) | 基于Storm的实时关键词近似搜索算法 | |
CN103051543A (zh) | 一种路由前缀的处理、查找、增加及删除方法 | |
CN108628907B (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
Almaslukh et al. | Evaluating spatial-keyword queries on streaming data | |
CN101398830B (zh) | 词库模糊查询方法及词库模糊查询*** | |
CN103365991A (zh) | 一种基于一维线性空间实现Trie树的词典存储管理方法 | |
US8493249B2 (en) | Compression match enumeration | |
CN108153907B (zh) | 通过16位Trie树实现空间优化的词典存储管理方法 | |
CN108984626A (zh) | 一种数据处理方法、装置及服务器 | |
CN108549679B (zh) | 用于url分析***的文件扩展名快速匹配方法和装置 | |
CN111159175B (zh) | 基于索引的非完整数据库Skyline查询方法 | |
CN110825747B (zh) | 一种信息存取方法、装置和介质 | |
Kniesburges et al. | Hashed Patricia Trie: Efficient longest prefix matching in peer-to-peer systems | |
CN109885840A (zh) | 通过16位Trie树实现空间优化的词典排序方法 | |
Bahrami et al. | A longest prefix matching method using Rectangular-Tree |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 310018, No. 258, source street, Xiasha Higher Education Park, Hangzhou, Zhejiang Applicant after: China Jiliang University Applicant after: Hangzhou code pigeon Intelligent Technology Co.,Ltd. Address before: 310018, No. 258, source street, Xiasha Higher Education Park, Hangzhou, Zhejiang Applicant before: China Jiliang University Applicant before: HANGZHOU DAIMAGE INTELLIGENT TECHNOLOGY Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |