本发明专利技术适用于计算机科学领域,提供了一种广义后缀树快速遍历的方法,包括:为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构;为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀树节点的数据结构;利用更改后的所述广义后缀树的数据结构以及更改后的所述广义后缀树节点的数据结构,通过自下而上的方式对广义后缀树的节点信息进行遍历统计。本发明专利技术还提供了一种广义后缀树快速遍历的系统。本发明专利技术所提供的广义后缀树快速遍历的方法及系统能极大降低遍历统计过程的时间复杂度,且不需要递归,进而大大提高了运行效率。
【技术实现步骤摘要】
一种广义后缀树快速遍历的方法及系统
本专利技术涉及计算机科学领域,尤其涉及一种广义后缀树快速遍历的方法及系统。
技术介绍
后缀树是一种广泛使用的数据结构,通常用于字符串的处理,能快速解决很多关于字符串的问题。当同时用于多个字符串,即是说把给定的N个源字符串的所有的后缀建成一颗树,这种数据结构叫做广义后缀树。目前,传统的广义后缀树遍历采用广度优先遍历的方法,不过当需要进行信息统计,比如统计根节点(Root)到每个节点的路径所代表的子字符串的时候,传统的方法会通过递归多次重复遍历底层节点,需要在遍历每个节点的时候递归调用方法来统计该节点子节点里叶子的个数和索引数,使得时间复杂度大大提高,并且递归嵌套过多程序容易发生堆栈溢出,而且运行效率降低很多。因此,亟需设计一种广义后缀树快速遍历的方法及系统,从而可以实现能极大降低遍历统计过程的时间复杂度,进而大大提高了运行效率。
技术实现思路
有鉴于此,本专利技术实施例的目的在于提供一种广义后缀树快速遍历的方法及系统,旨在解决现有技术中在采用广度优先遍历的方法时调用递归统计会造成底层节点的多次访问和底层堆栈负担的加大,进而影响运行效率的问题。本专利技术实施例是这样实现的,一种广义后缀树快速遍历的方法,包括:为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构;为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀树节点的数据结构;利用更改后的所述广义后缀树的数据结构以及更改后的所述广义后缀树节点的数据结构,通过自下而上的方式对广义后缀树的节点信息进行遍历统计。优选的,所述第一属性为循环链表,用于表示广义后缀树叶子的信息,其中,更后的所述广义后缀树的数据结构的属性包括类型、内容、树里节点、根节点、所述循环链表以及所有叶子循环链表。优选的,所述循环链表中的每一个节点的属性包括类型、内容、循环链表里的节点、树里的一个叶节点的引用、指针以及指针指向链表里的下一个节点。优选的,所述第二属性包括计数器计数、判断区号以及索引集合,其中,所述计数器计数用于计算对应节点的子节点里的索引数量之和,所述判断区号用于表示对应节点的子节点里已经完成统计遍历的个数,所述索引集合用于表示对应节点的子节点里的所有叶子的索引的集合。优选的,所述通过自下而上的方式对广义后缀树的节点信息进行遍历统计的步骤具体包括:对于所述所有叶子循环链表,设LNode代表链表里的每一个节点,对于每一个LNode依次遍历,遍历完一个节点后调用next指针遍历对应的下一个节点;重复上述第一步里对每一个节点的处理,直到循环链表里只有一个节点且其LNode为根节点。另一方面,本专利技术还提供一种广义后缀树快速遍历的系统,包括:第一更改模块,用于为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构;第二更改模块,用于为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀树节点的数据结构;遍历统计模块,用于利用更改后的所述广义后缀树的数据结构以及更改后的所述广义后缀树节点的数据结构,通过自下而上的方式对广义后缀树的节点信息进行遍历统计。优选的,所述第一属性为循环链表,用于表示广义后缀树叶子的信息,其中,更后的所述广义后缀树的数据结构的属性包括类型、内容、树里节点、根节点、所述循环链表以及所有叶子循环链表。优选的,所述循环链表中的每一个节点的属性包括类型、内容、循环链表里的节点、树里的一个叶节点的引用、指针以及指针指向链表里的下一个节点。优选的,所述第二属性包括计数器计数、判断区号以及索引集合,其中,所述计数器计数用于计算对应节点的子节点里的索引数量之和,所述判断区号用于表示对应节点的子节点里已经完成统计遍历的个数,所述索引集合用于表示对应节点的子节点里的所有叶子的索引的集合。优选的,所述遍历统计模块包括:遍历调用子模块,用于对于所述所有叶子循环链表,设LNode代表链表里的每一个节点,对于每一个LNode依次遍历,遍历完一个节点后调用next指针遍历对应的下一个节点;循环处理子模块,用于重复上述第一步里对每一个节点的处理,直到循环链表里只有一个节点且其LNode为根节点。在本专利技术实施例中,本专利技术提供的技术方案,通过更改广义后缀树的数据结构以及更改广义后缀树节点的数据结构,提出了一种自下而上的高效快速遍历统计方法,使得在遍历统计的过程中时间复杂度大大降低,而且不需要调用递归统计,极大的降低了计算机硬件负担,避免了程序堆栈溢出,进而大大提高了运行效率。【附图说明】图1为本专利技术一实施方式中广义后缀树快速遍历的方法流程图;图2为本专利技术一实施方式中新增属性的新型数据结构示例示意图;图3为本专利技术一实施方式中图1的步骤S13的具体方法流程图;图4为本专利技术一实施方式中假设的广义后缀树的初始状态图;图5为本专利技术一实施方式中假设的广义后缀树在完成第一次迭代后的状态图;图6为本专利技术一实施方式中广义后缀树快速遍历的系统的结构示意图;图7为本专利技术一实施方式中图6所示的遍历统计模块103的具体结构示意图。【具体实施方式】为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。本专利技术【具体实施方式】提供了一种广义后缀树快速遍历的方法,主要包括如下步骤:S11、为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构;S12、为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀树节点的数据结构;S13、利用更改后的所述广义后缀树的数据结构以及更改后的所述广义后缀树节点的数据结构,通过自下而上的方式对广义后缀树的节点信息进行遍历统计。本专利技术所提供的一种广义后缀树快速遍历的方法,通过更改广义后缀树的数据结构以及更改广义后缀树节点的数据结构,提出了一种自下而上的高效快速遍历统计方法,使得在遍历统计的过程中时间复杂度大大降低,而且不需要调用递归统计,极大的降低了计算机硬件负担,避免了程序堆栈溢出,进而大大提高了运行效率。以下将对本专利技术所提供的一种广义后缀树快速遍历的方法进行详细说明。请参阅图1,为本专利技术一实施方式中广义后缀树快速遍历的方法流程图。在步骤Sll中,为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构。在本实施方式中,后缀树是一种广泛使用的数据结构,通常用于字符串的处理,能快速解决很多关于字符串的问题,当同时用于多个字符串,即是说把给定的N个源字符串的所有的后缀建成一颗树,这种数据结构叫做广义后缀树。在本实施方式中,所述第一属性为循环链表(List),用于表示广义后缀树叶子的信息,其中,更后的所述广义后缀树的数据结构的属性包括类型、内容、树里节点(Node)、根节点(Root)、所述循环链表以及所有叶子循环链表。在本实施方式中,所述循环链表中的每一个节点的属性包括类型、内容、循环链表里的节点(LNode)、树里的一个叶节点的引用、指针(Next)以及指针指向链表里的下一个节点。在本实施方式中,在建立广义后缀树过程里每次新增一个叶节点,便将原始循环链表剪断,然后将末尾节点的next指针指向代表新叶子的节点。在步骤S12中,为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀本文档来自技高网...
【技术保护点】
一种广义后缀树快速遍历的方法,其特征在于,所述方法包括:为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构;为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀树节点的数据结构;利用更改后的所述广义后缀树的数据结构以及更改后的所述广义后缀树节点的数据结构,通过自下而上的方式对广义后缀树的节点信息进行遍历统计。
【技术特征摘要】
1.一种广义后缀树快速遍历的方法,其特征在于,所述方法包括: 为广义后缀树的数据结构添加第一属性,以更改所述广义后缀树的数据结构; 为广义后缀树节点的数据结构添加第二属性,以更改所述广义后缀树节点的数据结构; 利用更改后的所述广义后缀树的数据结构以及更改后的所述广义后缀树节点的数据结构,通过自下而上的方式对广义后缀树的节点信息进行遍历统计。2.如权利要求1所述的广义后缀树快速遍历的方法,其特征在于,所述第一属性为循环链表,用于表示广义后缀树叶子的信息,其中,更后的所述广义后缀树的数据结构的属性包括类型、内容、树里节点、根节点、所述循环链表以及所有叶子循环链表。3.如权利要求2所述的广义后缀树快速遍历的方法,其特征在于,所述循环链表中的每一个节点的属性包括类型、内容、循环链表里的节点、树里的一个叶节点的引用、指针以及指针指向链表里的下一个节点。4.如权利要求3所述的广义后缀树快速遍历的方法,其特征在于,所述第二属性包括计数器计数、判断区号以及索引集合,其中,所述计数器计数用于计算对应节点的子节点里的索引数量之和,所述判断区号用于表示对应节点的子节点里已经完成统计遍历的个数,所述索引集合用于表示对应节点的子节点里的所有叶子的索引的集合。5.如权利要求4所述的广义后缀树快速遍历的方法,其特征在于,所述通过自下而上的方式对广义后缀树的节点信息进行遍历统计的步骤具体包括: 对于所述所有叶子循环链表,设LNode代表链表里的每一个节点,对于每一个LNode依次遍历,遍历完一个节点后调用next指针遍历对应的下一个节点; 重复上述第一步里对每一个节点的处理,直到循环链表里只有一个节点且其LNode为根节点。6.一种广义后缀树快速...
【专利技术属性】
技术研发人员:黄鑫,罗军,
申请(专利权)人:中国科学院深圳先进技术研究院,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。