CN101788990A - Trie树双数组的全局优化构造方法及系统 - Google Patents
Trie树双数组的全局优化构造方法及系统 Download PDFInfo
- Publication number
- CN101788990A CN101788990A CN200910077848A CN200910077848A CN101788990A CN 101788990 A CN101788990 A CN 101788990A CN 200910077848 A CN200910077848 A CN 200910077848A CN 200910077848 A CN200910077848 A CN 200910077848A CN 101788990 A CN101788990 A CN 101788990A
- Authority
- CN
- China
- Prior art keywords
- node
- even numbers
- trie tree
- numbers group
- module
- 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.)
- Pending
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种TRIE树双数组的全局优化构造方法,包括如下步骤:步骤1:用二进制位串来表示TRIE树结构中的每个结点,其中每个所述二进制位串中从左到右的每一位都一一对应每个结点中的每一个子结点,1表示含有子结点,0表示不含子结点,然后将每个所述二进制位串右移,直到第0位为1,并分别记录移位后的二进制表示和移位位数;步骤2:将TRIE树中的所有结点按照结点的二进制表示映射到相应的类;步骤3:确定TRIE树中各个结点在双数组中存放的先后顺序,并记录每个结点在双数组中的转移基值;以及步骤4:依据存储在每个结点中的所述转移基值、TRIE树中各个结点间的父子关系、以及每个子结点所对应的转移步长,设置check和base数组。
Description
技术领域
本发明涉及TRIE树双数组的构造,更具体地涉及TRIE树双数组的全局优化构造方法和系统。
背景技术
TRIE树是词典、大规模关键字的一种重要索引结构,在自然语言处理、信息检索、电子词典管理等领域有着广泛应用,其查找效率很高。在TRIE树中查找一个关键字的时间与关键字自身组成、自身长度以及树的深度都有关,其最快速度为O(1),最差为TRIE树的层数。虽然TRIE树查找效率高,但由于在多数情况下TRIE树的分支较少(甚至为1),造成了存储空间的巨大浪费。一些研究者依据Johnson提出的确定性有限自动机可用四元组表示这一理论,将TRIE树用三元组来表示,提高了TRIE树的存储效率。之后,Aoel提出了将TRIE树用双数组来表示,这样既能进一步提高存储效率,又能保证查询效率。TRIE双数组结构由两个整型数组组成,如图1所示,其中一个为base数组,一个为check数组,二者中的元素一一对应。Base数组中的每一个元素相当于TRIE树中的一个结点,存储转移到其子结点的基值,check数组用于检查该子结点对应的父结点是哪一个结点,用于判断状态转移的正确性。在双数组中,从父结点s转移到子结点t,须满足如下约束条件:
Base[s]+c=t;
Check[t]=s,其中c为输入变量。
TRIE树双数组的构造主要采用反复探测的方法,即:对一个结点S要向子节点转移的过程中,如果存在B1,B2,...,Bn种转移,则需要求取k使得base[k+c1],base[k+c2],...,base[k+cn]空间均未被占用,这时设结点S对应的base[i]=k;
同时,check[k+c1]=check[k+c2]=...=check[k+cn]=i。
其中c1,c2,...,cn为B1,B2,...,Bn的对应值。这样,把k称之为转移基值,c1,c2,...,cn称为转移步长,i则为结点位置。
双数组结构与算法有效的降低了TRIE存储结构的空间浪费,但是利用此方法仍然存在很大的数据稀疏问题。相关技术中提出了在构造数组中加入一种优化排序策略,即在某个局部范围内优先处理分支较多的结点,此方法进一步改善了双数组的数据稀疏问题,但是由于这种优化策略是一种局部优化策略,多数情况下不一定能实现非常好的优化效果。而且,在上述方法中每个结点的子节点逐一探测,增加了构造时间。
发明内容
为了解决上述技术问题,本发明提供了一种TRIE树双数组的全局优化构造方法,包括如下步骤:步骤1:用二进制位串来表示TRIE树结构中的每个结点,其中每个所述二进制位串中从左到右的每一位都一一对应每个结点中的每一个子结点,1表示含有子结点,0表示不含子结点,然后将每个所述二进制位串右移,直到第0位为1,并分别记录移位后的二进制表示和移位位数;步骤2:将TRIE树中的所有结点按照结点的二进制表示映射到相应的类;步骤3:确定TRIE树中各个结点在双数组中存放的先后顺序,并记录每个结点在双数组中的转移基值;以及步骤4:依据存储在每个结点中的所述转移基值、TRIE树中各个结点间的父子关系、以及每个子结点所对应的转移步长,设置check和base数组。
根据本发明的一个实施例,在所述步骤2中,对于每个结点的移位后二进制表示,如果存在一个k,使得第k位及其右侧的所有比特位都为1,而第k位左侧的比特位均为0,则令其属于class 1类,否则属于class 2类。对于Class 1中的每个结点,按照其二进制位串中比特位为1的个数进行继续分类,此时最大分类数为M,其中M为词典中构成词的基本元素数。对于class2中的每个结点,将其二进制位串右移一位后,从第0位开始取N位,依据其值分别映射到0~2N-1个桶中,以将class 2中结点分为2N个类。
根据本发明的一个实施例,在所述步骤3中,把TRIE树中的所有结点的二进制位串进行按位与运算以使所有结点的子结点在线性空间内相互交叠,而不发生空间占用冲突,其中所述与运算的结果为0表示不发生冲突,以及进行按位或运算来表示最后空间的占用情况。
根据本发明的一个实施例,在所述步骤3中还包括:从左到右采用启发式贪婪算法、利用当前双数组中空间的占用情况,逐步计算TRIE树双数组中当前应存放的下一个最优结点。所述步骤3还包括:设计了一个待优化结构waitForOptimatic,用来暂存TRIE树双数组中当前需要优化的部分,用一个第0位为0的二进制位串来表示,其中每一位二进制数表示一个存放位置,对应于每一个子结点,1表示此位置已经存放了一个结点,0表示此位置到目前为止还没有被占用,只对比特位为0的位置进行优化,并用一个变量记录当前待优化结构在TRIE树双数组中对应的起始位置pos。如果waitForOptimatic为0,则优先选择所述class 2类中分支最多的结点T作为当前最优结点,并令waitForOptimatic=BT,以及将waitForOptimatic右移k位,使得waitForOptimatic的第0位为0;如果waitForOptimatic不为0,则在waitForOptimatic&BT=0的结点中选择分支最多的结点作为最优选择结点,其中BT表示结点的二进制位串以及&表示按位与。
在所述步骤3中,还包括利用waitForOptimatic的第1位到第N+I位来确定最优结点所属的类别,并在此类别中确定最优结点,当此类别为空则向前类别号低的方向寻找。
根据本发明的一个实施例,在所述步骤4中利用下面公式:base[father·pos+ci]=Bi·pos,check[Bi·pos+j]=father·pos+ci来计算出base和check数组中对应的值,其中Bi为father的子结点,pos为存储在相应结点的转移基值,father·pos+ci为父结点father中子结点Bi在两个数组中对应的位置,其中ci为Bi对应的值,即转移步长,j表示Bi的某一子结点的转移步长。
本发明还提供了一种TRIE树双数组的全局优化构造系统,包括:TRIE树构造模块,连接至词典文件,用于从所述词典文件中逐条读取词条,建立TRIE树结构;结点二进制表示模块,连接到所述TRIE树构造模块,用于将TRIE树中每一个结点用二进制位串来表示,其中每个所述二进制位串中从左到右的每一位都一一对应每个结点中的每一个子结点,以及将每个所述二进制位串右移,直到第0位为1,并分别记录移位后的二进制表示和移位位数;TRIE树结点分类模块,连接到所述结点二进制表示模块,用于将所述TRIE树中的所有结点依据由所述结点二进制表示模块处理后的所述移位后二进制表示映射到相应的类中;结点启发式排序模块,连接到所述TRIE树结点分类模块,用于确定所述TRIE树中的所有结点在双数组中存放的先后顺序,并记录每个结点在所述双数组中的转移基值;以及双数组生成模块,连接到所述结点启发式排序模块,用于依据由所述结点启发式排序模块在排序过程中记录的每个结点在所述双数组中的所述转移基值、结点间的父子关系、以及每个子结点所对应的转移步长,分别设置base和check数组。
根据本发明的一个实施例,结点启发式排序模块包括:初始化模块,用于初始化待优化结构以及当前优化位置;最优结点选择模块,连接到所述初始化模块,用于依据当前优化结构选择最优结点所属类别,并在所述所属类别中逐一比较选择最优结点;结点转移基值设置模块,连接到所述最优结点选择模块,用于当选择所述最优结点成功时,设置所述最优结点在所述双数组中的状态转移基值;以及当前优化状态变更模块,连接到所述结点转移基值设置模块,用于依据所述当前最优结点修改所述待优化结构和所述当前优化位置,并将所述最优结点从相应所属类别中删除。
其中,双数组的第0位置记录着转移到根结点的转移基值。
根据本发明,通过对TRIE树中所有结点在双数组中的存储顺序进行优化,更好的避免双数组存储空间的浪费,同时利用一种结点分类方法来降低搜索空间,使得整个构造过程保持高效的构建速度。
附图说明
通过下面结合附图的具体描述可以更清楚地理解本发明的上述和其他方面、特征以及其他优点。
图1是现有技术的双数组存储方法的示意图;
图2是根据本发明的一个实施例的TRIE树双数组的全局优化构造方法的流程图;
图3是结点在线性空间内相互交叠计算的示意图;
图4是根据本发明的TRIE树双数组的全局优化构造系统的结构图;
图5是根据本发明的一个实施例的启发式排序模块结构图;
图6是根据本发明的结点的二进制表示的示意图;
图7是根据本发明的TRIE树中结点的启发式排序过程的流程图;以及
图8是根据本发明的双数组生成示意图。
具体实施方式
下面将参考附图具体描述本发明的示例性实施例。
图2是根据本发明的一个实施例的TRIE树双数组的全局优化构造方法的流程图。参考图2,该TRIE树双数组的全局优化构造方法包括:步骤S202,将TRIE树结构中的每个结点用一个二进制位串来表示,每一个位串从左到右每一位都一一对应结点中的每一个子结点,1表示含有子结点,0表示不含子结点。然后将每个二进制位串右移,直到第0位为1,并分别记录下移位位数;步骤S204:将TRIE树中的所有结点按照结点的二进制表示进行如下分类:对于结点的移位后二进制表示,如果存在一个k,使得第k位右侧(包括k)所有比特位都为1,而第k位左侧的比特位均为0,则令其属于class 1类,否则属于class 2类,其中对于Class 1中的结点,按照其二进制表示中比特位为1的个数进行继续分类,此时最大分类数为M(M为词典中构成词的基本元素数),对于class2中的每个结点,将其二进制表示右移一位后,从第0位开始取N位,依据其值可以分别映射到0~2N-1个桶中,从而将class 2中结点分为2N个类;步骤S206,确定TRIE树中结点在双数组中存放的先后顺序,并记录每个结点在双数组中的转移基值;以及步骤S208,依据步骤S206中存储在每个结点中的转移基值、TRIE树中结点间的父子关系、以及每个子结点所对应的转移步长,通过一次遍历TRIE树来设置check和base数组。
在步骤S206中,把TRIE树中的所有结点按照一定顺序排序,使所有结点的子结点在线性空间内相互交叠,而不发生空间占用冲突(如图3所示)且占用最小空间。利用这一原理,在结点之间,对其二进制表示进行按位与运算,为0表示不发生冲突,进行按位或运算表示最后空间的占用情况。这种运算同样适用下文提到的最优结点选择运算。
在步骤S206中,还包括从左到右采用启发式贪婪算法、利用当前双数组中空间的占用情况,逐步计算双数组中当前应存放的下一个最优结点。为此,设计了一个待优化结构waitForOptimatic,用来暂存双数组中当前需要优化的部分,用一个第0位为0的二进制位串来表示,其中每一位二进制数表示一个存放位置,也就是说对应于一个子结点,1表示此位置已经存放了一个结点,0表示此位置到目前为止还没有被占用。这样,只有为0的位置才应该去优化,而为1的位置不再需要被优化。用一个变量记录当前待优化结构在双数组中对应的起始位置pos。
在步骤S206中,如果waitForOptimatic为0,则优先选择class2类中分支最多的结点T作为当前最优结点,并将waitForOptimatic=BT;并将waitForOptimatic右移k位,使得waitForOptimatic的第0位为0;如果waitForOptimatic不为0,则在waitForOptimatic&BT=0的结点中选择分支最多的结点作为最优选择结点,其中BT表示结点的二进制表示,以及&表示按位与。
在步骤3中,利用waitForOptimatic的第1位到第N+1位来确定最优结点所属的类别,并在此类别中确定最优结点,当此类别为空则向前类别号低的方向寻找。
步骤S208中,利用公式:
base[father·pos+ci]=Bi·pos;
check[Bi·pos+j]=father·pos+ci
计算出base和check数组中对应的值。其中Bi为father的子结点,pos为存储在相应结点的转移基值,father·pos+ci为父结点father中子结点Bi在双数组中对应的位置,其中ci为Bi对应的值,即转移步长,j表示Bi的某一子结点的转移步长。
图4是根据本发明的TRIE树双数组的全局优化构造系统的结构图。如图4所示,一种TRIE树双数组的全局优化构造系统包括:TRIE树构造模块、结点二进制表示模块、TRIE树结点分类模块、结点启发式排序模块和双数组生成模块。
TRIE树构造模块402,连接至词典文件,用于从所述词典文件中逐条读取词条,建立TRIE树结构;
结点二进制表示模块404,连接到所述TRIE树构造模块402,用于将TRIE树中每一个结点用二进制位串来表示,其中每个所述二进制位串中从左到右的每一位都一一对应每个结点中的每一个子结点,以及将每个所述二进制位串右移,直到第0位为1,并分别记录移位后的二进制表示和移位位数;
TRIE树结点分类模块406,连接到所述结点二进制表示模块404,用于将所述TRIE树中的所有结点依据由所述结点二进制表示模块处理后的所述移位后二进制表示映射到相应的类中;
结点启发式排序模块408,连接到所述TRIE树结点分类模块406,用于确定所述TRIE树中的所有结点在双数组中存放的先后顺序,并记录每个结点在所述双数组中的转移基值;以及
双数组生成模块410,连接到所述结点启发式排序模块408,用于依据由所述结点启发式排序模块在排序过程中记录的每个结点在所述双数组中的所述转移基值、结点间的父子关系、以及每个子结点所对应的转移步长,分别设置base和check数组。
如图5所示,结点启发式排序模块408包括:初始化模块502,用于初始化待优化结构以及当前优化位置;最优结点选择模块504,连接到所述初始化模块502,用于依据当前优化结构选择最优结点所属类别,并在所述所属类别中逐一比较选择最优结点;结点转移基值设置模块506,连接到所述最优结点选择模块504,用于当选择所述最优结点成功时,设置所述最优结点在所述双数组中的状态转移基值;以及当前优化状态变更模块508,连接到所述结点转移基值设置模块506,用于依据所述当前最优结点修改所述待优化结构和所述当前优化位置,并将所述最优结点从相应所属类别中删除。
在该实施例中,TRIE树构造模块402基于构成词典的基本元素数目,读取词典中的词条建立合理的TRIE树。对于基本元素较少的词典或关键字集合,直接采用TRIE树作为存储结构空间浪费处于可接受范围内。对于像汉语这类的电子词典,基本字符在6763个以上(其中GB2312收录简体汉字6763个,GBK收录20912个汉字,最新的GB18030收录27533个汉字,BIG5码收录13053个汉字),这种词典的TRIE树结构中指针空间占用过于浪费。这时,将TRIE树中结点内的子结点之间用链表或可变长数组来表示会大大降低空间占用。在结点二进制表示模块404中,再将每个结点转化为二进制表示,不会影响整个TRIE树双数组的全局优化构造。
结点二进制示模块404用于广度或深度遍历TRIE树,将每个结点都用一个二进制串表示,其实现方法如下:对于每一个子结点用一个二进制位来表示,1表示结点的相应位置上含有子结点,0表示结点的相应位置上不含有子结点,从而每个结点形成一个二进制串;将然后将二进制位串右移位,直到第0位为0,并分别记录移位位数,并将每个二进制表示暂存于本结点中。结点的二进制表示方法如图6所示。
结点分类模块406用于广度或深度遍历TRIE树,对TRIE树中的每个结点依据结点二进制示模块402中给出的二进制表示按照如下步骤进行分类,并将其放入相应的类存储桶中。
第一步:对于移位后的结点二进制表示,如果存在一个k,使得第k位右侧(包括k)所有比特位都为1,而第k位左侧的比特位均为0,则令其属于class 1类并转入第二步,否则属于class 2类,转入第三步;
第二步:对于Class 1中的结点,按照其二进制表示中比特位为1的个数进行继续分类,并存储在对应的桶中。此时最大分类数为M(M为构成词典的基本元素数);以及
第三步:对于class2中的每个结点,将其二进制表示右移一位后,从第0位开始取N位,依据其值可以分别放入到0~2N-1个桶中。
结点启发式排序模块408用于确定TRIE树中结点在双数组中存放的先后顺序,并记录每个结点在双数组中的转移基值。其过程如图7所示。
步骤S702:初始化一个待优化结构waitForOptimatic为0和当前处理的双数组位置pos为1。二者的具体解释如下:
waitForOptimatic:存放当前要优化部分,用一个二进制位串来表示,其中每一位二进制数表示一个存放位置,也就是说对应于一个结点,1表示此位置已经存放了一个结点,0表示此位置到目前为止还没有被占用。这样,只有为0的位置才应该去优化,而为1的位置不再需要被优化。当第k位向右都为1时,则将waitForOptimatic右移k位,即选择下一结点进行优化前保证waitForOptimatic的第0位为0以方便计算。
pos:存放当前优化位置在双数组中的位置。初始化为1,因为双数组0位置处已经预定要存放根结点的转移基值。在对所有结点的启发式排序过程中,不断依据pos值计算当前的转移基值pos。
在步骤S704,当未处理结点数为大于0时,则转入步骤S706,否则进行到搜索结束。
在步骤S706中,按照选择结点的优先顺序选择结点t。如果寻找结点t成功(步骤S708,是),则进行到步骤S710,将t结点的转移基值设为当前pos减去此结点的位移数,同时令waitForOptimatic=waitForOptimatic与t结点移位后二进制表示的按位或。如果未能寻找到合适的结点t(步骤S708,否),则进行到步骤S712,将waitForOptimatic右移1位,当前pos加1。
在步骤S714中,寻找k,使得waitForOptimatic第k位为0且第k位向右比特位均为1,然后waitForOptimatic右移k位,pos(positon)加k,然后返回到步骤S704继续执行。
在步骤S706中,选择结点的优先顺序进一步分解如下:
如果待优化结构waitForOptimatic为0,则在Class 2中选择分支最多的结点,其次选择Class 1中的任意结点;
如果待优化结构waitForOptimatic不为0,则优先选择在Class 2中与待优化结构按位与为0,且分支最多的结点;其次,在Class 1中选择与待优化存储空间按位与为0,且分支最多的结点。
当待优化结构waitForOptimatic不为0时,在class2中选择结点的具体步骤如下:
第一步:首先按照class 2的二进制分类位数N,从waitForOptimatic第0位开始取N+l位为m,将m右移1位后按位取反;
第二步:然后在Class2的第m桶中计算获取waitForOptimatic与结点移位后表示按位与为0,且分支最多的结点,如果找到,则返回最优结点;如果在此桶中未找到这样的结点,且m=0,则返回未找到标志,否则将m二进制表示中比特位为1的最高位设为0后,继续重复执行第二步。
当待优化结构waitForOptimatic不为0时,在class 1中选择结点的具体操作方法是:计算waitForOptimatic第0位开始比特位一直为0的位数k,然后将k减1,然后在class 1的k~0桶中选择分支最多的结点。
双数组生成模块410由于在结点启发式排序阶段,已经在每个结点中暂存了本结点的转移基值pos。这时,利用TRIE树中结点的父子关系,分别设置base和check数组。如图7所示,设father·pos+ci为父结点(father)中子结点Bi在两个数组中对应的位置,其中ci为Bi对应的值,即转移步长。则:
base[father·pos+ci]=Bi·pos;
check[Bi·pos+j]=father·pos+ci;其中j表示Bi的某一子结点的转移步长。
根据上述对本发明的实施例的具体描述,可以清楚地理解根据本发明的TRIE树双数组的全局优化构造方法及系统,克服了现有TRIE树双数组构造方法的不足,保持原有的查询效率的同时,提高了TRIE树双数组空间的利用率,使得大规模词典或关键字也适合于利用TRIE双数组来存储和访问。
尽管已经描述了本发明的不同实施例,但是对于本领域技术人员来说,在本发明的范围内可能存在更多的实施例和实现方式。根据发明的任何变化和改变均落入权利要求的保护范围。
Claims (13)
1.一种TRIE树双数组的全局优化构造方法,其特征在于,包括:
步骤1:用二进制位串来表示TRIE树结构中的每个结点,其中每个所述二进制位串中从左到右的每一位都一一对应每个结点中的每一个子结点,1表示含有子结点,0表示不含子结点,然后将每个所述二进制位串右移,直到第0位为1,并分别记录移位后的二进制表示和移位位数;
步骤2:将TRIE树中的所有结点按照结点的二进制表示映射到相应的类;
步骤3:确定TRIE树中各个结点在双数组中存放的先后顺序,并记录每个结点在双数组中的转移基值;以及
步骤4:依据存储在每个结点中的所述转移基值、TRIE树中各个结点间的父子关系、以及每个子结点所对应的转移步长,设置check和base数组。
2.根据权利要求1所述的TRIE树双数组的全局优化构造方法,其特征在于,在所述步骤2中,对于每个结点的移位后二进制表示,如果存在一个k,使得第k位及其右侧的所有比特位都为1,而第k位左侧的比特位均为0,则令其属于class 1类,否则属于class 2类。
3.根据权利要求2所述的TRIE树双数组的全局优化构造方法,其特征在于,还包括:对于Class 1中的每个结点,按照其二进制位串中比特位为1的个数进行继续分类,此时最大分类数为M,其中M为词典中构成词的基本元素数。
4.根据权利要求2所述的TRIE树双数组的全局优化构造方法,其特征在于,还包括:对于class2中的每个结点,将其二进制位串右移一位后,从第0位开始取N位,依据其值分别映射到0~2N-1个桶中,以将class 2中结点分为2N个类。
5.根据权利要求1至4中任一项所述的TRIE树双数组的全局优化构造方法,其特征在于,在所述步骤3中,把TRIE树中的所有结点的二进制位串进行按位与运算以使所有结点的子结点在线性空间内相互交叠,而不发生空间占用冲突,其中所述与运算的结果为0表示不发生冲突,以及进行按位或运算来表示最后空间的占用情况。
6.根据权利要求5所述的TRIE树双数组的全局优化构造方法,其特征在于,在所述步骤3中还包括:从左到右采用启发式贪婪算法、利用当前双数组中空间的占用情况,逐步计算TRIE树双数组中当前应存放的下一个最优结点。
7.根据权利要求6所述的TRIE树双数组的全局优化构造方法,其特征在于,所述步骤3还包括:设计了一个待优化结构waitForOptimatic,用来暂存TRIE树双数组中当前需要优化的部分,用一个第0位为0的二进制位串来表示,其中每一位二进制数表示一个存放位置,对应于每一个子结点,1表示此位置已经存放了一个结点,0表示此位置到目前为止还没有被占用,只对比特位为0的位置进行优化,并用一个变量记录当前待优化结构在TRIE树双数组中对应的起始位置pos。
8.根据权利要求7所述的TRIE树双数组的全局优化构造方法,其特征在于,所述步骤3还包括:如果waitForOptimatic为0,则优先选择所述class 2类中分支最多的结点T作为当前最优结点,并令waitForOptimatic=BT,以及将waitForOptimatic右移k位,使得waitForOptimatic的第0位为0;如果waitForOptimatic不为0,则在waitForOptimatic&BT=0的结点中选择分支最多的结点作为最优选择结点,其中BT表示结点的二进制位串以及&表示按位与。
9.根据权利要求8所述的TRIE树双数组的全局优化构造方法,其特征在于,所述步骤3中还包括,利用waitForOptimatic的第1位到第N+1位来确定最优结点所属的类别,并在此类别中确定最优结点,当此类别为空则向前类别号低的方向寻找。
10.根据权利要求1所述的TRIE树双数组的全局优化构造方法,其特征在于,在所述步骤4中利用下面公式:
base[father.pos+ci]=Bi.pos
check[Bi.pos+j]=father.pos+ci来计算出base和check数组中对应的值,
其中Bi为father的子结点,pos为存储在相应结点的转移基值,father.pos+ci为父结点father中子结点Bi在两个数组中对应的位置,其中ci为Bi对应的值,即转移步长,j表示Bi的某一子结点的转移步长。
11.一种TRIE树双数组的全局优化构造系统,其特征在于,包括:
TRIE树构造模块,连接至词典文件,用于从所述词典文件中逐条读取词条,建立TRIE树结构;
结点二进制表示模块,连接到所述TRIE树构造模块,用于将TRIE树中每一个结点用二进制位串来表示,其中每个所述二进制位串中从左到右的每一位都一一对应每个结点中的每一个子结点,以及将每个所述二进制位串右移,直到第0位为1,并分别记录移位后的二进制表示和移位位数;
TRIE树结点分类模块,连接到所述结点二进制表示模块,用于将所述TRIE树中的所有结点依据由所述结点二进制表示模块处理后的所述移位后二进制表示映射到相应的类中;
结点启发式排序模块,连接到所述TRIE树结点分类模块,用于确定所述TRIE树中的所有结点在双数组中存放的先后顺序,并记录每个结点在所述双数组中的转移基值;以及
双数组生成模块,连接到所述结点启发式排序模块,用于依据由所述结点启发式排序模块在排序过程中记录的每个结点在所述双数组中的所述转移基值、结点间的父子关系、以及每个子结点所对应的转移步长,分别设置base和check数组。
12.根据权利要求11所述的TRIE树双数组的全局优化构造系统,其特征在于,所述结点启发式排序模块包括:
初始化模块,用于初始化待优化结构以及当前优化位置;
最优结点选择模块,连接到所述初始化模块,用于依据当前优化结构选择最优结点所属类别,并在所述所属类别中逐一比较选择最优结点;
结点转移基值设置模块,连接到所述最优结点选择模块,用于当选择所述最优结点成功时,设置所述最优结点在所述双数组中的状态转移基值;以及
当前优化状态变更模块,连接到所述结点转移基值设置模块,用于依据所述当前最优结点修改所述待优化结构和所述当前优化位置,并将所述最优结点从相应所属类别中删除。
13.根据权利要求12所述的TRIE树双数组的全局优化构造系统,其特征在于,所述双数组的第0位置记录着转移到根结点的转移基值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910077848A CN101788990A (zh) | 2009-01-23 | 2009-01-23 | Trie树双数组的全局优化构造方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910077848A CN101788990A (zh) | 2009-01-23 | 2009-01-23 | Trie树双数组的全局优化构造方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101788990A true CN101788990A (zh) | 2010-07-28 |
Family
ID=42532206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910077848A Pending CN101788990A (zh) | 2009-01-23 | 2009-01-23 | Trie树双数组的全局优化构造方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101788990A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365992A (zh) * | 2013-07-03 | 2013-10-23 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典检索方法 |
CN103365991A (zh) * | 2013-07-03 | 2013-10-23 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典存储管理方法 |
CN106528647A (zh) * | 2016-10-15 | 2017-03-22 | 北京语联炉火信息技术有限公司 | 一种基于cedar双数组字典树算法进行术语匹配的方法 |
CN107239549A (zh) * | 2017-06-07 | 2017-10-10 | 传神语联网网络科技股份有限公司 | 数据库术语检索的方法、装置及终端 |
CN108153907A (zh) * | 2018-01-18 | 2018-06-12 | 中国计量大学 | 通过16位Trie树实现空间优化的存储管理方法 |
CN108399152A (zh) * | 2018-02-06 | 2018-08-14 | 中国科学院信息工程研究所 | 数字查找树的压缩表示方法、系统、存储介质及规则匹配装置 |
CN108628907A (zh) * | 2017-03-24 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 |
WO2020083062A1 (zh) * | 2018-10-25 | 2020-04-30 | 长沙新弘软件有限公司 | 一种基于二分边界值计算的非平衡二叉树构造方法 |
-
2009
- 2009-01-23 CN CN200910077848A patent/CN101788990A/zh active Pending
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365992A (zh) * | 2013-07-03 | 2013-10-23 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典检索方法 |
CN103365991A (zh) * | 2013-07-03 | 2013-10-23 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典存储管理方法 |
WO2015010508A1 (zh) * | 2013-07-03 | 2015-01-29 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典存储管理方法 |
CN103365992B (zh) * | 2013-07-03 | 2017-02-15 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典检索方法 |
CN103365991B (zh) * | 2013-07-03 | 2017-03-08 | 深圳市华傲数据技术有限公司 | 一种基于一维线性空间实现Trie树的词典存储管理方法 |
CN106528647A (zh) * | 2016-10-15 | 2017-03-22 | 北京语联炉火信息技术有限公司 | 一种基于cedar双数组字典树算法进行术语匹配的方法 |
CN106528647B (zh) * | 2016-10-15 | 2019-07-23 | 传神语联网网络科技股份有限公司 | 一种基于cedar双数组字典树算法进行术语匹配的方法 |
CN108628907A (zh) * | 2017-03-24 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 |
CN107239549A (zh) * | 2017-06-07 | 2017-10-10 | 传神语联网网络科技股份有限公司 | 数据库术语检索的方法、装置及终端 |
CN108153907A (zh) * | 2018-01-18 | 2018-06-12 | 中国计量大学 | 通过16位Trie树实现空间优化的存储管理方法 |
CN108153907B (zh) * | 2018-01-18 | 2021-01-22 | 中国计量大学 | 通过16位Trie树实现空间优化的词典存储管理方法 |
CN108399152A (zh) * | 2018-02-06 | 2018-08-14 | 中国科学院信息工程研究所 | 数字查找树的压缩表示方法、系统、存储介质及规则匹配装置 |
CN108399152B (zh) * | 2018-02-06 | 2021-05-07 | 中国科学院信息工程研究所 | 数字查找树的压缩表示方法、系统、存储介质及规则匹配装置 |
WO2020083062A1 (zh) * | 2018-10-25 | 2020-04-30 | 长沙新弘软件有限公司 | 一种基于二分边界值计算的非平衡二叉树构造方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101788990A (zh) | Trie树双数组的全局优化构造方法及系统 | |
US10062188B2 (en) | Customizable route planning using graphics processing unit | |
Bauer et al. | SHARC: Fast and robust unidirectional routing | |
US5848416A (en) | Method and apparatus for storing and retrieving data and a memory arrangement | |
CN102890722B (zh) | 应用于时序历史数据库的索引方法 | |
US8224861B2 (en) | Coupled node tree splitting/conjoining method and program | |
US20130231862A1 (en) | Customizable route planning | |
CN102799679B (zh) | 基于Hadoop的海量空间数据索引更新系统及方法 | |
WO2008004335A1 (fr) | dispositif de recherche de séquence de bits, procédé de recherche et programme | |
CN103488710B (zh) | 大数据页中高效存储非定长数据方法 | |
CN102609490B (zh) | 一种面向列存储dwms的b+树索引方法 | |
JP2008287533A (ja) | カップルドノードツリーの最長一致/最短一致検索方法及びプログラム | |
US20230281182A1 (en) | R-tree index merging and updating method and apparatus based on hilbert curve, and medium | |
CN103678519A (zh) | 一种支持Hive DML增强的混合存储系统及其方法 | |
CN104462063A (zh) | 基于语义位置模型的位置信息结构化提取方法及系统 | |
CN102567419B (zh) | 基于树结构的海量数据存储装置及方法 | |
CN112181991A (zh) | 基于快速构建kd树的地球模拟系统网格重映射方法 | |
CN102591958B (zh) | 基于tcam的确定性有穷状态自动机的匹配方法和装置 | |
Brodal et al. | Cache-oblivious string dictionaries | |
CN101944086A (zh) | 全字索引词典 | |
CN117034051B (zh) | 基于birch算法的水利信息聚合方法、装置及介质 | |
Roumelis et al. | Bulk-loading and bulk-insertion algorithms for xBR^+-trees xBR+-trees in Solid State Drives | |
KR102006283B1 (ko) | 패스트맵을 이용한 데이터셋의 m-트리 적재방법 | |
US8166043B2 (en) | Bit strings search apparatus, search method, and program | |
CN105005627A (zh) | 基于Spark分布式系统的最短路径关键点查询方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20100728 |