有序树表分段遍历方法以及软件处理系统

2017-01-11 19:17

本发明提供一种在断点被删除的情况下,遍历时间复杂度更低的有序树表分段遍历方法,以及实现该方法的软件处理系统。有序树表分段遍历方法,每段遍历结束时记录断点键值,根据记录的键值查找断点,查找断点成功,当断点是上一段遍历的结束节点时,则将返回节点的后序节点作为下一段遍历的起始节点,当断点是上一段遍历的结束节点的后序节点时,则将返回节点作为下一段遍历的起始节点;查找断点失败,则将返回的节点作为下一段遍历起始节点;开始下一段遍历。当树表含有大量节点并需要分段遍历时,本发明极大提高断点删除情况下的处理效率,且不增加软件复杂度。

1.有序树表分段遍历方法,应用于网络操作系统中,每段遍历结束时记录断点键值,其特征在于,根据记录的键值查找断点,查找断点成功,当断点是上一段遍历的结束节点时,则将返回节点的后序节点作为下一段遍历的起始节点,当断点是上一段遍历的结束节点的后序节点时,则将返回节点作为下一段遍历的起始节点;查找断点失败,则将返回的节点作为下一段遍历起始节点;开始下一段遍历。

2.如权利要求1所述有序树表分段遍历方法,其特征在于,根据记录的键值查找断点的方法是,若查找成功,则返回和键值匹配的节点;否则,则返回和键值匹配的节点的后序节点。

3.如权利要求2所述有序树表分段遍历方法,其特征在于,根据记录的键值查找断点的方法是,从该断点的邻近前序节点开始查找,查找到该断点,则认为查找成功;当已查找到该断点的后序节点,都还未查找到该断点,则认为查找失败。

4.如权利要求1-3任一项所述有序树表分段遍历方法,其特征在于,当断点是上一段遍历的结束节点时,具体包括以下步骤:a、下一段遍历开始时,根据记录的断点键值查找断点,判断查找是否成功,如是,进入步骤b;如否,进入步骤c;b、查找成功,返回和键值匹配的节点即断点,取该断点的后序节点作为起始节点并开始下一段遍历;

c、查找失败,说明上一段遍历结束断点已被删除,返回的节点为断点的后序节点,取该返回节点作为起始节点并开始下一段遍历。

5.如权利要求1-3任一项所述有序树表分段遍历方法,其特征在于,当断点是上一段遍历的结束节点的后序节点时,具体包括以下步骤:a、新一轮分段遍历开始时,根据记录的断点键值查找断点,判断查找是否成功,如是,进入步骤b;如否,进入步骤c;b、查找成功,返回的节点为上轮遍历结束节点的后序节点即断点,取该返回的节点作为起始节点并开始下一段遍历;c、查找失败,说明记录的断点已被删除,返回节点为被删除节点的后序节点,取该返回的节点作为起始节点并开始下一段遍历。

6.有序树表分段遍历系统,适用于软件处理系统,所述软件处理系统包括树表存储区、节点寄存器、节点查找模块、遍历模块;所述树表存储区用于保存树表数据;所述节点寄存器用于保存用来确定当前分段遍历起始节点的断点键值;其特征在于,所述节点查找模块,用于在树表存储区中,根据节点寄存器保存的断点键值查找断点;查找成功时,返回断点,当断点是上一段遍历的结束节点时,将返回节点的后序节点作为下一段遍历的起始节点,当断点是上一段遍历的结束节点的后序节点时,将返回节点作为下一段遍历的起始节点;查找失败时,返回断点的后序节点;所述遍历模块,用于在树表存储区进行遍历。

7.如权利要求6所述有序树表分段遍历系统,其特征在于,节点查找模块还用于,根据记录的键值查找断点,从该断点的邻近前序节点开始查找,查找到该断点,则认为查找成功;当已查找到该断点的后序节点,都还未查找到该断点,则认为查找失败。

有序树表分段遍历方法及系统技术领域

本发明涉及网络操作系统,尤其涉及网络操作系统中有序树表分段遍历技术。

背景技术

软件系统中,通常用树表来保存大量数据。为了树表维护、查找方便,通常使用有序树表。在处理存储大量数据的有序树表时,为了保证树表数据本身能够及时更新、删除,以及避免遍历操作长时间独占CPU,一般有分段遍历树表的需求。分段遍历需要记录断点键值,一般断点为上一段遍历的结束节点或者结束节点的后序节点,作为获取下一段遍历起始点的依据。且树表节点在被删除时需要及时失效并从树表移除时,若被移除的节点恰好是分段遍历记录的断点,将导致无法直接获取下段遍历的起始点。

若分段遍历过程中,断点被删除,则常见方案是根据遍历来获取起始点,遍历是一种方法,但性能低。通过额外的控制逻辑也可实现,但这些逻辑的实现,增加了软件复杂度。

以平衡二叉树为例,假设存在平衡二叉树如下图1所示,以中根遍历的方式进行,遍历的顺序应为a->b->c->d->e->f->g->h->i:

步骤一:分段遍历,第一段遍历首先遍历前5个节点a->b->c->d->e;

步骤二:记录下次遍历起始节点,即f节点的键值;a、b、c、d、e节点都为f节点的前序节点;之后的g、h、i节点均为其后序节点;

如第一段遍历结束和第二段遍历开始之间,记录的断点即f节点被删除。新的平衡二叉树如图2所示。

步骤三:因为f节点已删除,使用标准查找法,查找记录的f节点键值将会失败。

再通过遍历方法,则需要遍历a->b->c->d->e->g才能重新确定第二段遍历起始节点为g节点。

使用引用计数技术保证断点不被删除也是一种常见方案,但某些时候,节点需要及时失效,若其不被删除,则需要特定状态标识,而针对特定状态的处理需要额外的投入。

例如通过拷贝断点,并在节点删除时,检查断点与被删除节点的关系,被删除节点是断点

(断点为下一段的起始点)或断点(断点为上一段的结束点)的下一个节点时,都需要更新记录点。类似这样的方案都需要在树表操作过程中添加特定的控制逻辑,增加了软件复杂度。

发明内容

本发明提供一种在断点被删除的情况下,遍历时间复杂度更低的有序树表分段遍历方法,以及实现该方法的软件处理系统。

有序树表分段遍历方法,应用于网络操作系统中,每段遍历结束时记录断点键值,根据记录的键值查找断点,查找断点成功,当断点是上一段遍历的结束节点时,则将返回节点的后序节点作为下一段遍历的起始节点,当断点是上一段遍历的结束节点的后序节点时,则将返回节点作为下一段遍历的起始节点;查找断点失败,则将返回的节点作为下一段

遍历起始节点;开始下一段遍历。

具体的,根据记录的键值查找断点的方法是,若查找成功,则返回和键值匹配的节点;否则,则返回和键值匹配的节点的后序节点。

可选的,当断点是上一段遍历的结束节点时,具体包括以下步骤:

a、下一段遍历开始时,根据记录的断点键值查找断点,判断查找是否成功,如是,进入步骤b;如否,进入步骤c;

b、查找成功,返回和键值匹配的节点即断点,取该断点的后序节点作为起始节点并开始下一段遍历;

c、查找失败,说明上一段遍历结束断点已被删除,返回的节点为断点的后序节点,取该返回节点作为起始节点并开始下一段遍历。

可选的,当断点是上一段遍历的结束节点的后序节点时,具体包括以下步骤:

a、新一轮分段遍历开始时,根据记录的断点键值查找断点,判断查找是否成功,如是,进入步骤b;如否,进入步骤c;

b、查找成功,返回的节点为上轮遍历结束节点的后序节点即断点,取该返回的节点作为起始节点并开始下一段遍历;

c、查找失败,说明记录的断点已被删除,返回节点为被删除节点的后序节点,取该返回的节点作为起始节点并开始下一段遍历。

软件处理系统,包括树表存储区、节点寄存器、节点查找模块、遍历模块;其特征在于,

树表存储区用于,保存树表数据;

节点寄存器用于,保存用来确定当前分段遍历起始节点的断点键值;

节点查找模块用于,在树表存储区中,根据节点寄存器保存的断点键值查找断点;查找成功时,返回断点;查找失败时,返回断点的后序节点;

遍历模块用于,在树表存储区进行遍历。

具体的,节点查找模块还用于:查找断点成功,当断点是上一段遍历的结束节点时,将返回节点的后序节点作为下一段遍历的起始节点,当断点是上一段遍历的结束节点的后序节点时,将返回节点作为下一段遍历的起始节点。

本发明的有益效果是,当树表含有大量节点并需要分段遍历时,本发明极大提高断点删除情况下的处理效率,且不增加软件复杂度。

附图说明

图1为软件处理系统示意图;

图2为平衡二叉树示意图;

图3为在图2的基础上删除断点后的平衡二叉树示意图。

具体实施方式

如图1所示,软件处理系统包括树表存储区、节点寄存器、节点查找模块、遍历模块;

树表存储区用于,保存树表数据;

节点寄存器用于,保存用来确定当前分段遍历起始节点的断点键值;

节点查找模块用于,在树表存储区中,根据节点寄存器保存的断点键值查找断点;查找成功时,返回断点;查找失败时,返回断点的后序节点;

遍历模块用于,在树表存储区进行遍历。

具体的,节点查找模块用于:查找断点成功,当断点是上一段遍历的结束节点时,将返回节点的后序节点作为下一段遍历的起始节点,当断点是上一段遍历的结束节点的后序节点时,将返回节点作为下一段遍历的起始节点。

用来确定当前分段遍历起始节点的节点为断点。断点可以是上一段分段遍历结束点或当前分段遍历起始节点。节点查找模块查找用于确定下一段分段遍历起始节点的断点的方法是,从该断点的邻近前序节点开始查找,查找到该断点,则认为查找成功;当已查找到该断点的后序节点,都还未查找到该断点,则认为查找失败。

实施例

仍以图1所示平衡二叉树为例,分两段对该平衡二叉树进行遍历:

步骤一:遍历模块进行第一段遍历,首先遍历前5个节点:a->b->c->d->e;

步骤二:遍历模块将第一段遍历的结束节点的后序节点(断点)发送至节点寄存器保存,即保存f节点的键值;

步骤三(断点未被删除):在第二段遍历开始之前,如没有发生断点被删除,节点查找模块从f节点的邻近前序节点开始查找;邻近前序节点可以是第二邻近前序节点,即d节点,从d节点开始查找d->e->f,f节点查找成功,返回f节点至节点寄存器保存,遍历模块从节点寄存器提取f节点作为第二段遍历起始节点,进行第二段遍历,遍历的节点顺序为:f->g->h->i;

步骤三(断点被删除):如第一段遍历结束和第二段遍历开始之间,断点被删除。

在第二段遍历开始之前,节点查找模块从f节点开始查找d->g->e,f节点应为e节点的右子节点,当以查找到f节点的后序节点时,f节点还未被查找到,则认为f节点查找失败,则将g节点作为第二段遍历的起始节点,返回g节点,遍历模块将g节点作为第二段遍历起始节点开始进行第二段遍历,遍历的节点顺序为:g->h->i。

本发明仅以上一段遍历的结束节点的后序节点作为断点举例说明本发明方案,据此很容易想到以上一段遍历的结束节点作为断点的实施方案,再次不在赘述。

因为f节点已删除,若使用现有的标准查找算法,通过记录的f节点键值查找将会失败。再通过遍历方法,则需要遍历a->b->c->d->e->g才能确定第二段遍历的起始节点:g节点。对于含n个节点的二叉树,其时间复杂度为O(n),n表示树表中的节点总数。若本发明算法,则通过查找d->g->e节点即可确认f节点已不存在,查找失败,同时返回后序节点g,g节点即为二次遍历的起始点。即,才用本发明的遍历方法,假设NhNh表示深度为h的平衡树中含有的最少节点数,显然N0N0=0,N1N1=1,N2N2=2,且NhNh=NhNh-1+Nh-2+1。这个关系同斐波那契序列。利用归纳法可证明:当h≥≥0时,≥Nh=Fh+2-1Fh+2-1,而Fh+2-1Fh约等于(其中则NhNh约等于反之,含有n个节点的平衡树的最大深度为因此,在平衡树上进行查

找的时间复杂度为O(logn),采用本发明遍历方法的时间复杂度大大降低。

图1
图2
图3