一种基于滑动窗口的Tango树构建方法及系统与流程

文档序号:21725521发布日期:2020-08-05 01:16阅读:228来源:国知局
一种基于滑动窗口的Tango树构建方法及系统与流程

本发明涉及tango树构建技术领域,尤其是涉及一种基于滑动窗口的tango树构建方法及系统。



背景技术:

现在动态数据结构的研究变得越来越重要,主要有两方面的原因,一是随着大数据和云计算的发展,信息存储系统中的数据规模越来越大,这些数据往往随着时间不断改变;另一方面,基于目前的发展状况,批量更新数据的需求正日益占据更为重要的地位。不重复的插入建立需要大量的查询操作,在现有的tango树中,逐个插入的策略已经越来越无法适应大规模插入数据的需求,原因在于,逐个插入,访问新节点频繁,根节点被读取的次数远远大于叶子结点,导致新建规模较大的tango树时耗时较长。



技术实现要素:

本发明的目的在于至少克服上述一种技术不足,提出一种基于滑动窗口的tango树构建方法。

一方面,本发明提供了一种基于滑动窗口的tango树构建方法,包括以下步骤:

步骤s1、创建排序窗口,将待排序数据连成队列,使所述待排序数据适应排序窗口滑动;

步骤s2、通过滑动排序窗口读入待排序数据,对待排序数据进行排序,得到有序数据,新建插入窗口,复制有序数据至插入窗口;

步骤s3、新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支;

步骤s4、进入对应分支后,针对对应分支,重复执行步骤s3,直至tango树构建结束。

进一步地,所述基于滑动窗口的tango树构建方法,还包括,在将有序数据复制至插入窗口后,对排序窗口执行清空操作。

进一步地,根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支,具体包括:

若节点值大于插入窗口的最大值,或节点值小于插入窗口的最小值,则确定新的头指针和尾指针,并截取插入窗口,进入对应分支;否则,向数据队列中部移动头指针或尾指针,直至插入窗口两端的最值与节点值不再相同,并进行未赋值指针的移动操作,进入对应分支。

进一步地,所述若节点值大于插入窗口的最大值,或节点值小于插入窗口的最小值,则确定新的头指针和尾指针,并截取插入窗口,进入对应分支,具体包括:

若节点值大于插入窗口的最大值,尾指针不变,将头指针c的值赋值给未赋值指针b,以赋值后的指针b作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入;

若节点值小于插入窗口的最小值,头指针不变,将尾指针的值赋值给未赋值指针a,以赋值后的指针a作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入。

进一步地,所述进行未赋值指针的移动操作,确定是否进入对应分支,具体包括;

使未赋值指针a指向有序数据队列头部,向有序数据队列尾部移动指针a,直至指针a所示值不大于当前节点,使未赋值指针b指向有序数据队列尾部,向有序数据队列头部移动指针b,直至指针b所示值不小于当前节点,头指针不变,以指针a作为新的尾指针,截取插入窗口,若指向有序数据队列对象的指针有效且数据队列不为空,进入对应分支,否则不进入。

另一方面,本发明提供了一种基于滑动窗口的tango树构建系统,包括待排序数据操作模块、有序数据形成及复制模块、插入操作及分支进入模块和分支重复生成模块;

所述待排序数据操作模块,用于创建排序窗口,将待排序数据连成队列,使所述待排序数据适应排序窗口滑动;

所述有序数据形成及复制模块,用于通过滑动排序窗口读入待排序数据,对待排序数据进行排序,得到有序数据,新建插入窗口,复制有序数据至插入窗口;

所述插入操作及分支进入模块,用于新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支;

所述分支重复生成模块,用于在进入对应分支后,针对对应分支,使所述插入操作及分支进入模块重复执行其功能,直至tango树构建结束。

进一步地,所述基于滑动窗口的tango树构建系统,还包括清空操作模块,所述清空操作模块,用于在将有序数据复制至插入窗口后,对排序窗口执行清空操作。

进一步地,插入操作及分支进入模块,根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支,具体包括:

在节点值大于插入窗口的最大值时,或在节点值小于插入窗口的最小值时,确定新的头指针和尾指针,并截取插入窗口,进入对应分支;否则,向数据队列中部移动头指针或尾指针,直至插入窗口两端的最值与节点值不再相同,并进行未赋值指针的移动操作,进入对应分支。

进一步地,插入操作及分支进入模块在节点值大于插入窗口的最大值时,或在节点值小于插入窗口的最小值时,确定新的头指针和尾指针,并截取插入窗口,进入对应分支,具体包括:

在节点值大于插入窗口的最大值时,尾指针不变,将头指针c的值赋值给未赋值指针b,以赋值后的指针b作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入;

在节点值小于插入窗口的最小值时,头指针不变,将尾指针的值赋值给未赋值指针a,以赋值后的指针a作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入。

进一步地,插入操作及分支进入模块进行未赋值指针的移动操作,进入对应分支,具体包括,使未赋值指针a指向有序数据队列头部,向有序数据队列尾部移动指针a,直至指针a所示值不大于当前节点,使未赋值指针b指向有序数据队列尾部,向有序数据队列头部移动指针b,直至指针b所示值不小于当前节点,头指针不变,以指针a作为新的尾指针,截取插入窗口,若指向有序数据队列对象的指针有效且数据队列不为空,进入对应分支,否则不进入。

与现有技术相比,本发明的有益效果包括:通过创建排序窗口,将待排序数据连成队列,使所述待排序数据适应排序窗口滑动;通过滑动排序窗口读入待排序数据,对待排序数据进行排序,得到有序数据,新建插入窗口,复制有序数据至插入窗口;新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支;进入对应分支后,针对对应分支,重复执行上一步骤,直至tango树构建结束;提高了新建规模较大的tango树的速度。

附图说明

图1是本发明实施例1所述的基于滑动窗口的tango树构建方法流程示意图;

图2是本发明实施例1所述的步骤s1及步骤s2的流程示意图;

图3是本发明实施例1所述的步骤s3的流程示意图;

图4是本发明实施例1所述的滑动窗口在tango树中的插入操作流程图;

图5是本发明实施例1所述的插入操作中切分窗口的细化流程图;

图6是本发明实施例1所述的创建优先路径的流程图;

图7是本发明实施例1所述的创建孩子节点的流程图;

图8是本发明实施例1所述的测试结果示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例1

本发明实施例提供了一种基于滑动窗口的tango树构建方法,其流程示意图,如图1所示,包括以下步骤:

步骤s1、创建排序窗口,将待排序数据连成队列,使所述待排序数据适应排序窗口滑动;

步骤s2、通过滑动排序窗口读入待排序数据,对待排序数据进行排序,得到有序数据,新建插入窗口,复制有序数据至插入窗口;

步骤s3、新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支;

步骤s4、进入对应分支后,针对对应分支,重复执行步骤s3,直至tango树构建结束。

具体实施时,创建指针指向插入窗口中有效数据队列的两端,以避免可能出现的窗口未填满现象;新建指向插入窗口中数据队列对象的指针a、b、c和d,其中a和b不赋值,c和d分别指向插入窗口中数据队列的头部和尾部,读取当前节点值;若无节点值,则移动指针c,从窗口中数据队列头部依次执行插入操作;

一个具体实施例中,步骤s1及步骤s2的流程示意图,如图2所示;步骤s3的流程示意图,如图3所示;

优选的,所述基于滑动窗口的tango树构建方法,还包括,在将有序数据复制至插入窗口后,对排序窗口执行清空操作。

优选的,根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支,具体包括:

若节点值大于插入窗口的最大值,或节点值小于插入窗口的最小值,则确定新的头指针和尾指针,并截取插入窗口,进入对应分支;否则,向数据队列中部移动头指针或尾指针,直至插入窗口两端的最值与节点值不再相同,并进行未赋值指针的移动操作,进入对应分支。

需要说明的是,若插入窗口两端的最小值与节点值相同,则向数据队列中部移动尾指针,若插入窗口两端的最大值与节点值相同,则向数据队列中部移动头指针;

优选的,所述若节点值大于插入窗口的最大值,或节点值小于插入窗口的最小值,则确定新的头指针和尾指针,并截取插入窗口,进入对应分支,具体包括:

若节点值大于插入窗口的最大值,尾指针不变,将头指针c的值赋值给未赋值指针b,以赋值后的指针b作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入;

若节点值小于插入窗口的最小值,头指针不变,将尾指针的值赋值给未赋值指针a,以赋值后的指针a作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入。

优选的,所述进行未赋值指针的移动操作,确定是否进入对应分支,具体包括;

使未赋值指针a指向有序数据队列头部(即指向最大值),向有序数据队列尾部移动指针a,直至指针a所示值不大于当前节点,使未赋值指针b指向有序数据队列尾部(即指向最小值),向有序数据队列头部移动指针b,直至指针b所示值不小于当前节点,头指针不变,以指针a作为新的尾指针,截取插入窗口,若指向有序数据队列对象的指针有效且数据队列不为空,进入对应分支,否则不进入。

需要说明是,所述对应分支,为tango树的分支,进入分支后,重复进行新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支。

进入对应分支的方向以tango树的实际组织策略为准,例如在二叉结构下,定义右孩子(或优先路径)比当前节点大,左孩子(或优先路径)比当前节点小,那么,砸死节点值大于插入窗口的最大值时,尾指针不变,将头指针c的值赋值给未赋值指针b,以赋值后的指针b作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,此时的对应分支为左孩子;在节点值小于插入窗口的最小值时,头指针不变,将尾指针的值赋值给未赋值指针a,以赋值后的指针a作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,此时的对应分支为右孩子;

若遇到确定插入位置时需形成新的优先路径,则将新的路径链接到tango树,再开辟节点进行插入;若不必进入新路径,则可直接开辟节点,将节点连接到当前优先路径中,进行插入;滑动窗口在tango树中的插入操作流程图,如图4所示,插入操作具有递归的特征,递归出口是当前窗口执行插入完毕,递归入口在左侧插入和右侧插入模块中;插入操作中切分窗口的细化流程图,如图5所示,面对当前节点,首先排除滑动窗口中与当前节点元素值相同的部分,因为窗口有序,故这个相同的值如果存在窗口中,要么在两端,要么在中间。因此首先与首位比较,收缩窗口,排除前者,再通过不包含等于的比较,排除后者;

创建优先路径的流程图,如图6所示,创建孩子节点的流程图,如图7所示,开始插入时若当前窗口大于1,则应在对应位置插入第一个元素后,不断向左孩子节点进行插入,直到当前窗口中所有元素插入完毕,这个操作符合左侧插入的递归思想,实际执行中以循环控制较为方便,该循环需要受到tango树自平衡策略的约束;

为了验证本发明实施例所述的基于滑动窗口的tango树构建方法的行性和有效性,在真实环境下,通过对基于滑动窗口的tango树构建系统在构建过程中的时间开销进行测试来验证本发明实施例所述技术方案的效果,测试结果示意图,如图8所示;

采取在tango树构建开始和结束时取到时间计算构建时间开销,时间粒度精确到微秒(百万分之一秒),根据元数据节点数目不同,采用随机生成指定数量级的元数据节点作为运行条件分别进行十次以上的测试,取平均值;记录了元数据节点个数为万级、十万级、百万级和千万级的数量级时的创建tango树索引的时间开销;

在一万个节点的条件下,传统构建方法(即采用基于逐个插入节点的构建tango树的方法,如图8中灰色图例)消耗总时间15620微秒,采用基于滑动窗口的tango树构建方法(基于滑动窗口批量插入节点的构建方法),如图8中黑色图例,时间消耗为15600微秒,二者差距较小;在十万节点的条件下,传统构建方法消耗总时间为118104微秒,改进方法测得时间消耗为124800微秒。两者差距开始增大;在百万节点的条件下,传统构建方法消耗总时间为3.2秒,改进方法测得时间消耗为1.35秒。这个差距足够明显,此时已经可以明显看到,在大量插入的条件下,改进后方法所产生的显著效果;在千万节点的条件下,传统构建方法已经出现分钟级的等待,消耗总时间为267秒,改进方法测得时间消耗为27秒。基于滑动窗口的tango树构建方法比现有方法的性能提高了一个数量级。

实施例2

本发明实施例提供了一种基于滑动窗口的tango树构建系统,包括待排序数据操作模块、有序数据形成及复制模块、插入操作及分支进入模块和分支重复生成模块;

所述待排序数据操作模块,用于创建排序窗口,将待排序数据连成队列,使所述待排序数据适应排序窗口滑动;

所述有序数据形成及复制模块,用于通过滑动排序窗口读入待排序数据,对待排序数据进行排序,得到有序数据,新建插入窗口,复制有序数据至插入窗口;

所述插入操作及分支进入模块,用于新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支;

所述分支重复生成模块,用于在进入对应分支后,针对对应分支,使所述插入操作及分支进入模块重复执行其功能,直至tango树构建结束。

优选的,所述基于滑动窗口的tango树构建系统,还包括清空操作模块,所述清空操作模块,用于在将有序数据复制至插入窗口后,对排序窗口执行清空操作。

优选的,插入操作及分支进入模块,根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支,具体包括:

在节点值大于插入窗口的最大值时,或在节点值小于插入窗口的最小值时,确定新的头指针和尾指针,并截取插入窗口,进入对应分支;否则,向数据队列中部移动头指针或尾指针,直至插入窗口两端的最值与节点值不再相同,并进行未赋值指针的移动操作,进入对应分支。

优选的,插入操作及分支进入模块在节点值大于插入窗口的最大值时,或在节点值小于插入窗口的最小值时,确定新的头指针和尾指针,并截取插入窗口,进入对应分支,具体包括:

在节点值大于插入窗口的最大值时,尾指针不变,将头指针c的值赋值给未赋值指针b,以赋值后的指针b作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入;

在节点值小于插入窗口的最小值时,头指针不变,将尾指针的值赋值给未赋值指针a,以赋值后的指针a作为新的头指针,截取插入窗口,若指向有序数据队列对象的指针有效且队列不为空,进入对应分支,否则不进入。

优选的,插入操作及分支进入模块进行未赋值指针的移动操作,进入对应分支,具体包括,使未赋值指针a指向有序数据队列头部,向有序数据队列尾部移动指针a,直至指针a所示值不大于当前节点,使未赋值指针b指向有序数据队列尾部,向有序数据队列头部移动指针b,直至指针b所示值不小于当前节点,头指针不变,以指针a作为新的尾指针,截取插入窗口,若指向有序数据队列对象的指针有效且数据队列不为空,进入对应分支,否则不进入。

需要说明的是,实施例1和实施例2未重复描述之处可互相借鉴。

本发明一种基于滑动窗口的tango树构建方法及系统,公开了通过创建排序窗口,将待排序数据连成队列,使所述待排序数据适应排序窗口滑动;通过滑动排序窗口读入待排序数据,对待排序数据进行排序,得到有序数据,新建插入窗口,复制有序数据至插入窗口;新建指向插入窗口中有序数据队列对象的指针,读取当前节点,判断有无节点值,若无节点值,则移动指向插入窗口中有序数据队列头部的指针,并从插入窗口中有序数据队列头部依次执行插入操作,若有节点值,则根据所述节点值,确定新的头指针和尾指针,并确定是否进入对应分支,或进行移动指针操作,并确定是否进入对应分支;进入对应分支后,针对对应分支,重复执行上一步骤,直至tango树构建结束;充分利用了递归机制中压栈操作的特点,优化节点的访问次数,提高插入效率,从而提高了新建规模较大的tango树的速度。

以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1