一种拓扑网络的两级分块方法
【专利摘要】本发明涉及一种拓扑网络的两级分块方法,包括步骤如下:(1)生成拓扑数据:遍历图形中的网络节点,获取节点之间的关联信息;(2)执行分块操作:分块操作共分为一级分块和二级分块,一级分块是根据节点之间的连通性来划分,二级分块是根据设定的最大节点数来划分;(3)拓扑块信息的更新与维护:在动态网络中,节点是允许发生改变的,因此在编辑网络时要保证相应拓扑块信息的同步更新;(4)基于两级分块的拓扑分析。本发明利用了两级分块的算法有效的控制了拓扑遍历的数据量,避免了拓扑分析时对整个拓扑网络的遍历,也能很好地解决整个网络都是一个连通整体时的情况。
【专利说明】一种拓扑网络的两级分块方法
【技术领域】
[0001]本发明属于地理信息系统中海量拓扑数据的分块操作【技术领域】,特别是一种拓扑网络的两级分块方法。
【背景技术】
[0002]拓扑网络分析是地理信息系统领域一个重要的内容,一般的分析算法是对整个拓扑网络进行遍历分析,然而在实际生产应用环境中,拓扑网络往往比较复杂,遍历整个拓扑网络不仅占用内存大,而且分析效率低下,目前一种常用的拓扑网络优化方法是根据连通性对拓扑结构进行分块,建立一个个的孤岛来减少遍历的数据量,然而,如果整个网络都是一个连通的整体,这种分块方式就失去了优势。
【发明内容】
[0003]本发明的目的在于针对现有技术的不足,提供一种拓扑网络的两级分块方法。
[0004]本发明解决其技术问题是采取以下技术方案实现的:
[0005]一种拓扑网络的两级分块方法,包括步骤如下:
[0006](I)生成拓扑数据:遍历图形中的网络节点,获取节点之间的关联信息;
[0007](2)执行分块操作:分块操作共分为一级分块和二级分块,一级分块是根据节点之间的连通性来划分,二级分块是根据设定的最大节点数来划分;
[0008](3)拓扑块信息的更新与维护:在动态网络中,节点是允许发生改变的,因此在编辑网络时要保证相应拓扑块信息的同步更新;
[0009](4)基于两级分块的拓扑分析。
[0010]而且,所述步骤(I)生成拓扑数据的具体步骤如下:
[0011]①遍历整个网络,获取节点之间的双向关联关系;
[0012]②将节点之间的所有关系存储到内存数据结构节点关系表中,另外,为每一个节点创建状态标识信息并存储到数据结构节点状态表中,并设定初始值为:未检测状态;
[0013]③创建执行分块操作所需要的变量:
[0014]—级块号,初始值为1,
[0015]二级块号,初始值为I,
[0016]二级块节点数目,
[0017]执行分块操作所需要的变量:
[0018]二级块信息存储二级块号与二级块所包含的节点数目的对应关系信息;块边界关系存放二级块与块之间的边界信息;邻接块信息存放与当前二级块相连的其他二级块的块号及节点数目的对应关系;
[0019]④设置每个二级块最多包含节点的数目为最大块节点数目;
[0020]⑤判断节点状态表中是否存在状态为未检测状态的节点,若存在则以此节点为起点开始探测并对探测到的节点执行分块操作,,若不存在则表示所有的节点已经探测完成,此时将每个节点的块信息以及块与块之间的边界信息存储到数据库中。
[0021]而且,所述步骤(2)执行分块操作的具体步骤是:
[0022]①从节点状态表中获取到状态为未检测状态节点,然后将其加入到检测队列中,执行步骤②;
[0023]②判断检测队列是否为空,若不为空,执行步骤③,若为空,执行步骤④;
[0024]③取检测队列第一个元素,定为当前节点,并将其从队列中删除,执行步骤⑤;
[0025]④队列为空说明当前块划分完毕,比较二级块节点数目与最大块节点数目的一半的大小,若二级块节点数目小于最大块节点数目的一半,说明当前的二级块包含的节点的数目还不足设定的最大数量值的一半,为了防止产生零碎的小块,需要将当前的二级块与相邻的最小的二级块进行合并,然后使一、二级块号的值各自加1,此时保存当前二级块号及二级块节点数目到数据结构二级块信息中,返回继续判断节点状态表中是否有未检测状态的节点,若二级块节点数目大于最大块节点数目的一半,首先使一级块号,二级块号的值各自加1,此时保存当前二级块号及二级块节点数目到数据结构二级块信息,然后执行步骤①,继续判断节点状态表中是否有未检测状态的节点;
[0026]⑤在节点关系表中查找与当前节点直接相连节点数,执行步骤⑥;
[0027]⑥若直接相连节点数大于O,说明存在相连的节点,取出其中一个邻接节点并查看其状态,若为未检测状态,说明此节点尚未探测,执行步骤⑦?’若为已检测状态,说明此节点已经被探测过,执行步骤⑧,若直接相连节点数等于0,说明当前节点的相连节点已经处理完成或者不存在相连节点,设置当前节点的状态为已检测状态,设置当前节点的一级块号和二级块号分别为当前一级块号和二级块号的值,执行步骤②;
[0028]⑦比较二级块节点数目与最大块节点数目的大小;
[0029]A.若二级块节点数目小于最大块节点数目,说明当前的二级块没有达到个数限制,使直接相连节点数减1,并将当前节点加入队列中,执行步骤⑥;
[0030]B.若二级块节点数目大于最大块节点数目,说明当前二级块已经饱和,不能再加入新的节点元素,执行步骤⑧;
[0031]⑧判断邻接节点的二级块号是否与当前二级块号的值一致;
[0032]A.若不一致,存储邻接节点的二级块号到数据结构邻接块信息中,并存储边界信息存储到数据结构块边界关系中,合并当前节点当前节点与邻接节点的一级块号,使直接相连节点数减I,执行步骤⑥;
[0033]B.若一致,使二级块号加1,直接相连节点数减1,执行步骤⑥。
[0034]而且,所述步骤(3)拓扑块信息的更新与维护的具体步骤是:
[0035]①读取数据库中一级分块和二级分块的最大值,分别赋值给变量最大一级块号、最大二级块号,执行步骤②;
[0036]②若执行添加操作,则执行步骤③;若执行删除操作,则执行步骤⑧;若执行修改操作,则先执行步骤⑧再执行步骤③;
[0037]③添加一个新节点,从网络中查找与其直接相连节点数并获取数据库中相连节点的拓扑块信息,执行步骤④;
[0038]④判断直接相连节点数的值,若直接相连节点数为1,说明在原有的拓扑网络中与新加的节点直接相连的节点只有一个,执行步骤⑤,若直接相连节点数为0,说明新节点为孤立节点,使最大一级块号、最大二级块号的值各自加I并分别赋值给新节点的一、二级块号,然后保存相关信息,退出;若邻接块信息大于1,说明相连节点数目有多个,执行步骤⑥;
[0039]⑤设置新节点的一级块号为邻接节点的一级块号,读取邻接节点的二级块节点数目;若二级块节点数目大于1.5X最大块节点数目,说明相连节点所在的二级块不能再添加新的节点,此时要重新创建一个新的二级块,使最大二级块号的值加I并设置其为新二级块的块号;若二级块节点数目小于1.5X最大块节点数目,说明相连节点所在的二级块还可以接受新的节点,设置新节点的二级块为邻接节点的二级块号,最后保存到数据库中,退出;
[0040]⑥首先,判断与新节点相连的每个节点所在的一级块是否相同,若不相同,则合并一级块并统一一级块号为之前最大的一级块的块号,然后进一步判断是否需要合并二级分块,若需要则直接合并,若不需要则存储两个二级块之间的边界信息到块边界关系,并将相关信息保存到数据库中;退出,若相同,则直接执行步骤⑦;
[0041]⑦判断与新节点相连的每个节点所在的二级块是否相同,若不相同,则获取所有相邻节点的二级块中最小块的二级块号,并将其设为新节点的二级块号,同时,增加若干条由于新节点导致的块与块之间的边界信息,最后保存到数据库中,退出;若相同,则执行步骤④;
[0042]⑧删除一个旧节点,首先,读取旧节点的拓扑信息,删除旧节点到其他相邻节点的单向关系信息,然后,查看与旧节点直接相连的所有节点邻接节点的直接相连节点数,并从数据库中读取每个相连节点的拓扑信息,若直接相连节点数为0,则直接退出;若直接相连节点数为1,则更新相邻节点到的单向关联关系,然后退出,若直接相连节点数大于1,执行步骤⑨;
[0043]⑨判断旧节点与所有直接相连的邻接节点是否处在相同二级块内,若是,由于删除掉节点可能导致原来的二级块不再是一个连通的整体,所以需要加载此二级块的数据进行重新进行探测,重新探测二级块,若原来的块仍然是一个连通的整体,则直接退出,若原来的块不再是一个连通的整体,则需要进一步探测所在的一级块是否是一个连通的整体,执行步骤⑩,若不是,则删除掉用旧节点来标识的二级块边界信息,执行步骤⑩;
[0044]⑩加载当前一级块数据,并重新探测当前一级块是否仍然是一个连通的整体,若是,则直接退出,若不是,则需要对当前一级块单独执行分块操作来重新划分块。
[0045]而且,所述步骤(4)基于两级分块的拓扑分析的具体步骤是:
[0046]①确定分析类型,若基于单节点分析,则执行步骤②;若基于多节点分析,则执行步骤③;
[0047]②输入待分析节点单节点的信息,查询数据库读取单节点的一级块号和二级块号,然后加载整个一级块或者二级块的数据进行分析;
[0048]③输入多个节点的信息,分别获取它们的一级块号和二级块号,首先,判断一级块号是否相同,若不相同,则节点之间肯定不存在拓扑关系,若相同,则继续判断一级块号是否相同,若相同,则加载二级块号的块数据进行分析或者直接加载一级块的数据进行分析,若不相同,则需要分别加载每个节点所在的二级块数据,以及当前一级块内的所有二级块之间的边界信息进行拓扑分析或者直接加载一级块的数据进行分析。[0049]本发明的优点和积极效果是
[0050]本发明利用了两级分块的算法,通过连通性建立网络孤岛,对每个网络孤岛又执行了进一步的划分。该方法有效的控制了拓扑遍历的数据量,避免了拓扑分析时对整个拓扑网络的遍历,也能很好地解决整个网络都是一个连通整体时的情况。
【专利附图】
【附图说明】
[0051 ]图1是根据网络生成拓扑的流程图;
[0052]图2是拓扑分块的流程图;
[0053]图3是动态拓扑网络中实时维护拓扑块信息的流程图;
[0054]图4基于两级分块的拓扑网络分析流程图;
[0055]图5是分块操作实例图;
[0056]图6删除一个节点的实例图;
[0057]图7添加一个节点的实例图。
【具体实施方式】
[0058]以下结合附图对本发明实施例做进一步详述,以下实施例只是描述性的,不是限定性的,不能以此限定本发明的保护范围。
[0059]一种拓扑网络的两级分块方法,如图1所示,包括步骤如下:
[0060](I)生成拓扑数据:拓扑数据是根据图形数据来生成的,需要遍历图形中的网络节点来获取节点之间的关联信息,具体步骤如下:
[0061]①遍历整个网络,获取节点之间的双向关联关系;比如:节点A与节点B直接相连,关系表示为:A, B, info (A) ; B, A, info (B);
[0062]②将节点之间的所有关系存储到内存数据结构节点关系表RelationTable中,另夕卜,为每一个节点创建状态标识信息并存储到数据结构节点状态表StateTable中,并设定初始值为:未检测状态Unchecked。
[0063]③创建执行分块操作所需要的变量:
[0064]一级块号SectionOneID,初始值为I
[0065]二级块号 SectionTwoID,初始值为 I,
[0066]二级块节点数目 SectionTwoSize,
[0067]执行分块操作所需要的变量:
[0068]二级块信息SectionInfo存储二级块号与二级块所包含的节点数目的对应关系信息;块边界关系BoundaryRelation存放二级块与块之间的边界信息;邻接块信息AbutSection存放与当前二级块相连的其他二级块的块号及节点数目SectionTwoSize的对应关系;
[0069]④为了限制拓扑分析时加载的数据量,提高拓扑分析效率,设置每个二级块最多包含节点的数目为最大块节点数目MaxSectionSize。
[0070]⑤接下来判断节点状态表StateTable中是否存在状态为未检测状态Unchecked的节点,若存在则以此节点为起点开始探测并对探测到的节点执行分块操作,如图2所示,若不存在则表示所有的节点已经探测完成,此时将每个节点的块信息以及块与块之间的边界信息存储到数据库中;
[0071](2)执行分块操作;分块操作共分为一级分块和二级分块,一级分块是根据节点之间的连通性来划分,二级分块是根据设定的最大节点数来划分,整个分块过程如图2所示,此部分承接自图1中的“执行拓扑分块操作”,具体步骤如下:
[0072]①从节点状态表StateTable中获取到状态为未检测状态Unchecked节点,然后将其加入到检测队列CheckingQueue中,等待进一步的处理,执行步骤②。
[0073]②判断检测队列CheckingQueue是否为空,若不为空,执行步骤③,若为空,执行步骤④;
[0074]③取检测队列CheckingQueue第一个元素,赋值给当前节点TempJoint,并将其从队列中删除,执行步骤⑤;
[0075]④队列为空说明当前块划分完毕,比较二级块节点数目SectionTwoSize与最大块节点数目的一半MaxSectionSize/2的大小,若二级块节点数目SectionTwoSize〈最大块节点数目的一半MaxSectionSize/2,说明当前的二级块包含的节点的数目还不足设定的最大数量值的一半,为了防止产生零碎的小块,需要将当前的二级块与相邻的最小的二级块进行合并,然后使一级块号SectionOneID, 二级块号SectionTwoID的值各自加I,此时保存当前二级块号SectionTwoID及二级块节点数目SectionTwoSize到数据结构二级块信息SectionInfo中,返回继续判断节点状态表StateTable中是否有未检测状态Unchecked的节点,如图1所示,若二级块节点数目SectionTwoSize〉最大块节点数目的一半MaxSectionSize/2,首先使一级块号SectionOneID, 二级块号SectionTwoID的值各自加I,此时保存当前二级块号SectionTwoID及二级块节点数目SectionTwoSize到数据结构二级块信息SectionInfo,然后执行步骤①,继续判断节点状态表StateTable中是否有未检测状态Unchecked的节点;
[0076]⑤在节点关系表RelationTable中查找与当前节点TempJoint直接相连节点数AbutJointNum,执行步骤⑥;
[0077]⑥若直接相连节点数AbutJointNum>0,说明存在相连的节点,取出其中一个邻接节点AbutJoint并查看其状态,若为未检测状态Unchecked,说明此节点尚未探测,执行步骤⑦;若为已检测状态Checked,说明此节点已经被探测过,执行步骤⑧,若直接相连节点数AbutJointNum=O,说明当前节点TempJoint的相连节点已经处理完成或者不存在相连节点,设置当前节点TempJoint的状态为已检测状态Checked,当前节点TempJoint的一级块号和二级块号分别为当前一级块号SectionOneID和二级块号SectionTwoID的值,执行步骤②;
[0078]⑦比较二级块节点数目SectionTwoSize与最大块节点数目MaxSectionSize的大小:
[0079]A.若二级块节点数目SectionTwoSize〈最大块节点数目MaxSectionSize,说明当前的二级块没有达到个数限制,使直接相连节点数AbutJointNum-1,并将当前节点加入队列中,执行步骤⑥;
[0080]B.若二级块节点数目SectionTwoSize〉最大块节点数目MaxSectionSize,说明当前二级块已经饱和,不能再加入新的节点元素,执行步骤⑧。
[0081]⑧判断邻接节点AbutJoint的二级块号是否与当前二级块号SectionTwoID的值一致;
[0082]A.若不一致,存储邻接节点AbutJoint的二级块号SectionTwoID到数据结构邻接块信息AbutSection中,并存储边界信息存储到数据结构块边界关系BoundaryRelation中,合并当前节点当前节点TempJoint与邻接节点AbutJoint的一级块号SectionOneID,使直接相连节点数AbutJointNum-1,执行步骤⑥;
[0083]B.若一致,使二级块号SectionTwoID+1,直接相连节点数AbutJointNum-l,执行
步骤⑥;
[0084](3)拓扑块信息的更新与维护;在动态网络中,节点是允许发生改变的,因此在编辑网络的时候要保证相应的拓扑块信息的同步更新,如图3所示,其中修改操作,相当于先执行删除,然后再执行添加;具体步骤如下:
[0085]①读取数据库中一级分块和二级分块的最大值,分别赋值给变量最大一级块号MaxSectionOnelD、最大二级块号 MaxSectionTwoID,执行步骤②;
[0086]②若执行“添加”操作,则执行步骤③;若执行“删除”操作,则执行步骤⑧;若执行“修改”操作,则先执行⑧再执行步骤③。
[0087]③添加一个新节点NewJoint,从网络中查找与其直接相连节点数AbutJointNum并获取数据库中相连节点的拓扑块信息,执行步骤④;
[0088]④判断直接相连节点数AbutJointNum的值,若直接相连节点数AbutJointNum=I,说明在原有的拓扑网络中与新加的节点直接相连的节点只有一个,执行步骤⑤,若直接相连节点数AbutJointNum=O,说明新节点NewJoint为孤立节点,使最大一级块号MaxSectionOnelD、最大二级块号MaxSectionTwoID的值各自加I并分别赋值给新节点NewJoint的一二级块号,然后保存相关信息,退出,若邻接块信息AbutSectionNum>l,说明相连节点数目有多个,执行步骤⑥;
[0089]⑤设置新节点NewJoint的一级块号为邻接节点AbutJoint的一级块号SectionOneID,读取邻接节点AbutJoint的二级块节点数目SectionTwoSize ;若二级块节点数目SectionTwoSize>l.5X最大块节点数目MaxSectionSize,说明相连节点所在的二级块不能再添加新的节点,此时要重新创建一个新的二级块,使最大二级块号MaxSectionTwoID的值加I并设置其为新二级块的块号;若二级块节点数目SectionTwoSize<l.5X最大块节点数目MaxSectionSize,说明相连节点所在的二级块还可以接受新的节点,设置新节点NewJoint的二级块ID为邻接节点AbutJoint的二级块ID,最后保存到数据库中,退出;
[0090]⑥首先,判断与新节点NewJoint相连的每个节点所在的一级块是否相同,若不相同,则合并一级块并统一一级块号为之前最大的一级块的块号,然后进一步判断是否需要合并二级分块,若需要则直接合并,若不需要则存储两个二级块之间的边界信息到块边界关系BoundaryRelation,并将相关信息保存到数据库中,退出,若相同,则直接执行步骤⑦。
[0091]⑦判断与新节点NewJoint相连的每个节点所在的二级块是否相同,若不相同,则获取所有相邻节点的二级块中最小块的二级块号SectionTwoID,并将其设为新节点NewJoint的二级块号,同时,增加若干条由于新节点NewJoint导致的块与块之间的边界信息,最后保存到数据库中,退出,若相同,则执行步骤④;
[0092]⑧删除一个旧节点OldJoint,首先,读取旧节点OldJoint的拓扑信息,删除旧节点OldJoint到其他相邻节点的单向关系信息,然后,查看与旧节点OldJoint直接相连的所有节点邻接节点AbutJoint的直接相连节点数AbutJointNum,并从数据库中读取每个相连节点的拓扑信息,若直接相连节点数AbutJointNum=O,则直接退出;若直接相连节点数AbutJointNum=I,则更新相邻节点到OldJoint的单向关联关系,然后退出,若直接相连节点数AbutJointNum>l,执行步骤⑨;
[0093]⑨判断旧节点OldJoint与所有直接相连的邻接节点AbutJoint是否处在相同二级块内,若是,由于删除掉节点可能导致原来的二级块不再是一个连通的整体,所以需要加载此二级块的数据进行重新进行探测,重新探测二级块,若原来的块仍然是一个连通的整体,则直接退出,若原来的块不再是一个连通的整体,则需要进一步探测所在的一级块是否是一个连通的整体,执行步骤⑩,若不是,则删除掉用旧节点OldJoint来标识的二级块边界信息,执行步骤⑩;
[0094]⑩加载当前一级块数据,并重新探测当前一级块是否仍然是一个连通的整体,若是,则直接退出,若不是,则需要对当前一级块单独执行分块操作来重新划分块;
[0095](4)基于两级分块的拓扑分析;两级分块使得拓扑分析变得更加方便和快捷,在一定程度上,不仅节省了内存而且提高了分析效率,具体步骤为:
[0096]①确定分析类型,若基于单节点分析,则执行步骤②;若基于多节点分析,则执行步骤③;
[0097]②输入待分析节点单节点SingleJoint的信息,查询数据库读取单节点SingleJoint的一级块号SectionOneID和二级块号SectionTwoID,然后根据需求加载整个一级块或者二级块的数据进行分析;
[0098]③输入多个节点的信息,分别获取它们的一级块号SectionOneID和二级块号SectionTwoID,首先,判断一级块号SecionOneID是否相同,若不相同,贝U节点之间肯定不存在拓扑关系,若相同,则继续判断一级块号SectionTwoID是否相同,若相同,则加载二级块号SectionTwoID的块数据进行分析或者根据不同的需求直接加载一级块的数据进行分析,若不相同,则需要分别加载每个节点所在的二级块数据,以及当前一级块内的所有二级块之间的边界信息进行拓扑分析或者根据不同的需求直接加载一级块的数据进行分析。
[0099]实例
[0100]为了清晰描述本发明的内容,选取一个简单的拓扑网络来详细说明执行步骤,如图5所示,网络中总共有16个节点,
[0101](I)生成拓扑数据;
[0102]①获取网络中节点之间的双向关联关系,假设从Jl开始遍历,依次获取每个节点之间的双向关联关系,存储到节点关系表RelationTable中,如表1,同时为每一个节点创建状态信息存储到节点状态表StateTable ;
[0103]表1从网络中获取的节点关系表RelationTable表
[0104]
【权利要求】
1.一种拓扑网络的两级分块方法,其特征在于:包括步骤如下: (1)生成拓扑数据:遍历图形中的网络节点,获取节点之间的关联信息; (2)执行分块操作:分块操作共分为一级分块和二级分块,一级分块是根据节点之间的连通性来划分,二级分块是根据设定的最大节点数来划分; (3)拓扑块信息的更新与维护:在动态网络中,节点是允许发生改变的,因此在编辑网络时要保证相应拓扑块信息的同步更新; (4)基于两级分块的拓扑分析。
2.根据权利要求1所述的拓扑网络的两级分块方法,其特征在于:所述步骤(1)生成拓扑数据的具体步骤如下: ①遍历整个网络,获取节点之间的双向关联关系; ②将节点之间的所有关系存储到内存数据结构节点关系表中,另外,为每一个节点创建状态标识信息并存储到数据结构节点状态表中,并设定初始值为:未检测状态; ③创建执行分块操作所需要的变量: 一级块号,初始值为1, 二级块号,初始值为1, 二级块节点数目, 执行分块操作所需要的变量:` 二级块信息存储二级块号与二级块所包含的节点数目的对应关系信息;块边界关系存放二级块与块之间的边界信息;邻接块信息存放与当前二级块相连的其他二级块的块号及节点数目的对应关系; ④设置每个二级块最多包含节点的数目为最大块节点数目; ⑤判断节点状态表中是否存在状态为未检测状态的节点,若存在则以此节点为起点开始探测并对探测到的节点执行分块操作,,若不存在则表示所有的节点已经探测完成,此时将每个节点的块信息以及块与块之间的边界信息存储到数据库中。
3.根据权利要求1所述的拓扑网络的两级分块方法,其特征在于:所述步骤(2)执行分块操作的具体步骤是: ①从节点状态表中获取到状态为未检测状态节点,然后将其加入到检测队列中,执行步骤②; ②判断检测队列是否为空,若不为空,执行步骤③,若为空,执行步骤④; ③取检测队列第一个元素,定为当前节点,并将其从队列中删除,执行步骤⑤; ④队列为空说明当前块划分完毕,比较二级块节点数目与最大块节点数目的一半的大小,若二级块节点数目小于最大块节点数目的一半,说明当前的二级块包含的节点的数目还不足设定的最大数量值的一半,为了防止产生零碎的小块,需要将当前的二级块与相邻的最小的二级块进行合并,然后使一、二级块号的值各自加1,此时保存当前二级块号及二级块节点数目到数据结构二级块信息中,返回继续判断节点状态表中是否有未检测状态的节点,若二级块节点数目大于最大块节点数目的一半,首先使一级块号,二级块号的值各自加1,此时保存当前二级块号及二级块节点数目到数据结构二级块信息,然后执行步骤①,继续判断节点状态表中是否有未检测状态的节点; ⑤在节点关系表中查找与当前节点直接相连节点数,执行步骤⑥;⑥若直接相连节点数大于O,说明存在相连的节点,取出其中一个邻接节点并查看其状态,若为未检测状态,说明此节点尚未探测,执行步骤⑦?’若为已检测状态,说明此节点已经被探测过,执行步骤⑧,若直接相连节点数等于O,说明当前节点的相连节点已经处理完成或者不存在相连节点,设置当前节点的状态为已检测状态,设置当前节点的一级块号和二级块号分别为当前一级块号和二级块号的值,执行步骤②; ⑦比较二级块节点数目与最大块节点数目的大小; A.若二级块节点数目小于最大块节点数目,说明当前的二级块没有达到个数限制,使直接相连节点数减1,并将当前节点加入队列中,执行步骤⑥; B.若二级块节点数目大于最大块节点数目,说明当前二级块已经饱和,不能再加入新的节点元素,执行步骤⑧; ⑧判断邻接节点的二级块号是否与当前二级块号的值一致; A.若不一致,存储邻接节点的二级块号到数据结构邻接块信息中,并存储边界信息存储到数据结构块边界关系中,合并当前节点当前节点与邻接节点的一级块号,使直接相连节点数减I,执行步骤⑥; B.若一致,使二级块号加1,直接相连节点数减1,执行步骤⑥。
4.根据权利要求1所述的拓扑网络的两级分块方法,其特征在于:所述步骤(3)拓扑块信息的更新与维护的具体步骤是: ①读取数据库中一级分块和二级分块的最大值,分别赋值给变量最大一级块号、最大二级块号,执行步 骤②; ②若执行添加操作,则执行步骤③;若执行删除操作,则执行步骤⑧;若执行修改操作,则先执行步骤⑧再执行步骤③; ③添加一个新节点,从网络中查找与其直接相连节点数并获取数据库中相连节点的拓扑块信息,执行步骤④; ④判断直接相连节点数的值,若直接相连节点数为1,说明在原有的拓扑网络中与新加的节点直接相连的节点只有一个,执行步骤⑤,若直接相连节点数为O,说明新节点为孤立节点,使最大一级块号、最大二级块号的值各自加I并分别赋值给新节点的一、二级块号,然后保存相关信息,退出;若邻接块信息大于1,说明相连节点数目有多个,执行步骤⑥; ⑤设置新节点的一级块号为邻接节点的一级块号,读取邻接节点的二级块节点数目;若二级块节点数目大于1.5X最大块节点数目,说明相连节点所在的二级块不能再添加新的节点,此时要重新创建一个新的二级块,使最大二级块号的值加I并设置其为新二级块的块号;若二级块节点数目小于1.5 X最大块节点数目,说明相连节点所在的二级块还可以接受新的节点,设置新节点的二级块为邻接节点的二级块号,最后保存到数据库中,退出; ⑥首先,判断与新节点相连的每个节点所在的一级块是否相同,若不相同,则合并一级块并统一一级块号为之前最大的一级块的块号,然后进一步判断是否需要合并二级分块,若需要则直接合并,若不需要则存储两个二级块之间的边界信息到块边界关系,并将相关信息保存到数据库中;退出,若相同,则直接执行步骤⑦; ⑦判断与新节点相连的每个节点所在的二级块是否相同,若不相同,则获取所有相邻节点的二级块中最小块的二级块号,并将其设为新节点的二级块号,同时,增加若干条由于新节点导致的块与块之间的边界信息,最后保存到数据库中,退出;若相同,则执行步骤④; ⑧删除一个旧节点,首先,读取旧节点的拓扑信息,删除旧节点到其他相邻节点的单向关系信息,然后,查看与旧节点直接相连的所有节点邻接节点的直接相连节点数,并从数据库中读取每个相连节点的拓扑信息,若直接相连节点数为O,则直接退出;若直接相连节点数为1,则更新相邻节点到的单向关联关系,然后退出,若直接相连节点数大于1,执行步骤⑨; ⑨判断旧节点与所有直接相连的邻接节点是否处在相同二级块内,若是,由于删除掉节点可能导致原来的二级块不再是一个连通的整体,所以需要加载此二级块的数据进行重新进行探测,重新探测二级块,若原来的块仍然是一个连通的整体,则直接退出,若原来的块不再是一个连通的整体,则需要进一步探测所在的一级块是否是一个连通的整体,执行步骤⑩,若不是,则删除掉用旧节点来标识的二级块边界信息,执行步骤⑩; ⑩加载当前一级块数据,并重新探测当前一级块是否仍然是一个连通的整体,若是,则直接退出,若不是,则需要对当前一级块单独执行分块操作来重新划分块。
5.根据权利要求1所述的拓扑网络的两级分块方法,其特征在于:所述步骤(4)基于两级分块的拓扑分析的具体步骤是: ①确定分析类型,若基于单节点分析,则执行步骤②;若基于多节点分析,则执行步骤③; ②输入待分析节点单节点的信息,查询数据库读取单节点的一级块号和二级块号,然后加载整个一级块或者二级块的数据进行分析; ③输入多个节点的信息,分别获取它们的一级块号和二级块号,首先,判断一级块号是否相同,若不相同,则节点之间肯定不存在拓扑关系,若相同,则继续判断一级块号是否相同,若相同,则加载二级块号的块数据进行分析或者直接加载一级块的数据进行分析,若不相同,则需要分别加载每个节点所在的二级块数据,以及当前一级块内的所有二级块之间的边界信息进行拓扑分析或者直接加载一级块的数据进行分析。
【文档编号】H04L12/28GK103684942SQ201310648160
【公开日】2014年3月26日 申请日期:2013年12月3日 优先权日:2013年12月3日
【发明者】李宽荣, 韩双立, 高勇, 赵光俊, 刘哲甫, 陆通 申请人:天津市普迅电力信息技术有限公司