一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种剔除重复路由的计算方法

2022-07-23 05:59:48 来源:中国专利 TAG:


1.本发明属于数据分析预处理技术领域,具体涉及一种剔除重复路由的计算方法。


背景技术:

2.数据量的爆炸增长对现有存储系统的容量、吞吐性能、可扩展性、可靠性、安全性、可维护性和能耗管理等各个方面都带来新的挑战,消除冗余信息、优化存储空间成为缓解存储容量瓶颈的重要手段。
3.现有消除信息冗余的主要技术包括数据压缩和数据去重。去重技术主要是重复数据删除技术,而重复数据主要包括相同数据和相似数据。相同数据重复数据删除技术主要有:相同文件重复数据删除技术、固定长度分块的重复数据删除技术、基于内容分块的重复数据删除技术、基于滑动块的重复数据删除技术和基于数据特征的重复数据消除算法等;相似数据检测技术主要有:shingle检测技术、bloom filter和模式匹配技术。虽然学术界针对重复数据多有讨论,然而随着输入量的大量增加,目前大多数算法复杂度会呈现快速增长的缺点,从而降低系统性能,造成资源的浪费和损失。
4.图论是数学的一个分支,以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。图g是一个有序二元组(v,e),其中v称为顶集,e称为边集,e与v不相交,它们亦可写成v(g)和e(g)。e的元素都是二元组,用(x,y)表示,其中x,y∈v。在图论中,图分为有向图和无向图,如果给图的每条边规定一个方向,那么得到的图称为有向图,相反,边没有方向的图称为无向图。对于图的遍历,有深度优先遍历和广度优先遍历两种方式,深度优先遍历指的是从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与v有路径相通的顶点都被访问完为止,而广度优先遍历则是从图中某个顶点v出发,在访问该顶点v之后,依次访问v的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。虽然图论对于描述事物的相互关系具有重要作用,但一直没有很好地运用到路由去重技术中去。


技术实现要素:

5.本发明的目的在于提供一种剔除重复路由的计算方法,解决现有技术中大多数判别路由重复的算法复杂度高的缺点,现有的路由去重方法需要将某段路由中的某节点与所有路由中别的所有节点进行逐一比对,存在去重时间长和空间效率低等技术问题。
6.为了解决上述技术问题,本发明采用如下技术方案实现:
7.一种剔除重复路由的计算方法,包括以下步骤:
8.步骤一、建立路由数据表,记录各条路由及其经过的节点,然后建立初始节点排序总表,按照节点标识进行排序,得到节点明细排序表;
9.所述初始节点排序总表和节点明细排序表均包括三列,分别为节点id、路由id和节点标识,其中,初始节点排序总表基于路由数据表按照路由id进行排序;节点明细排序表按照节点标识和路由id排序;
10.步骤二、针对步骤一中的所有节点,创建节点临时比对表和路由间关系临时表;
11.所述节点临时比对表包含路由id、计数、路由内节点总数和当前节点标识四列;
12.所述路由间关系临时表包含x和y;其中,x和y分别标识相关联的两个路由id;
13.步骤三、将节点明细排序表中的第一个节点对应的路由id、计数和路由内节点总数信息填入节点临时比对表的第一行中,第一行中对应的“计数”的数值为1,第一行中对应的“当前节点标识”为第一个节点;
14.将节点明细排序表中的第二个节点对应的路由id、计数和路由内节点总数信息填入节点临时比对表:
15.当第二次选中的节点的路由id与第一次选中节点的路由id相同,则将节点临时比对表的第一行中对应的“计数”的数值更新为2,第一行中对应的“当前节点标识”更新为第二个节点;
16.当第二次选中的节点的路由id与第一次选中节点的路由id不相同,则节点临时比对表的第一行中信息不变;将第二个节点对应的路由id、计数和路由内节点总数信息填入节点临时比对表的第二行中,第二行中对应的“计数”的数值为1,第二行对应的“当前节点标识”为第二个节点;此时若是第一次选中的节点标识与第二次选中的节点标识相同,则在路由间关系临时表中增加第一次选中节点标识与第二次选中节点标识所对应的两个路由id的关联关系;
17.依次,将节点明细排序表中剩余的节点按照顺序依次迭代到节点临时比对表中,并在路由间关系临时表中建立路由间关联关系;
18.将节点明细排序表中第j个节点对应的路由id、计数和路由内节点总数信息填入节点临时比对表,j为大于等3的自然数;
19.当第j次选中的节点的路由id与前(j-1)次中某一次选中节点的路由id相同,则在节点临时比对表中该路由id所对应行中的“计数”的数值在上加1,该路由id所对应行的“当前节点标识”更新为第j个节点;
20.当第j次选中的节点的路由id与前(j-1)个节点的路由id均不相同,则节点临时比对表中前(j-1)次迭代的信息不变,将第j个节点对应的路由id、计数和路由内节点总数信息填入节点临时比对表的下一行中,该行所对应“计数”的数值为1,该行对应的“当前节点标识”为第j个节点;若是前(j-1)个节点中存在有节点标识与第j个节点标识相同,则在路由间临时关系表中增加此相同节点标识所在的路由间的关联关系,若路由间的关联关系在路由间临时关系表中已存在,则不必重复建立;
21.步骤四、每次节点明细排序表中同一节点标识的节点均加入到节点临时比对表中比对后即检验一次;若是此时有两条在路由间关系临时表中已经建立关系的路由在节点临时比对表中的“当前节点标识”一列对应的节点不同,则删除路由间关系临时表中对应的这两段路由的关联关系;若是此时节点临时比对表中存在的节点路由“计数”的数值与“路由内节点总数”数值相同,说明该段路由内所有的节点均被检验过,若此时还存在其他路由的“路由内节点总数”、“计数”和“当前节点标识”均与此路由对应列的数值相同,且两条路由
在组间关系临时表中存在关联关系,则将这些路由判定为重复路由;
22.步骤五、创建路由排序临时表,所述路由排序临时表包含路由id、路由序号和路由内节点总数三列;将所有的路由信息填入路由排序临时表中,其中路由序号的排序与路由id排序顺序一致;
23.更新路由排序临时表,根据步骤四,比较判定为重复路由的“路由id”数值大小,将“路由id”数值较大的一个路由数据删除,并在路由间关系临时表中将该重复路由关联关系记录删除;
24.如此迭代,完成将所有待处理路由中重复的路由筛选剔除工作。
25.本发明通过对路由节点按照节点标识进行排序,同时基于图论的无向图以及广度优先遍历,将每一条路由抽象成图论中的顶点,然后将两条路由的关系看作图论中的边集,创造性地建立路由间关系临时表去记录路由之间的相互关系,从而规避传统路由去重方法中某条路由中的某节点需要与所有路由中所有节点进行逐一比对的做法,并对已使用过的多余记录进行删除,进一步提高路由去重的时间和空间效率,增强重复路由检测和删除技术在网络和存储系统中的实用性。
26.进一步优化,所述步骤一中,所述路由数据表中包含多段路由,一段路由包含1个、2个或多个节点。
27.进一步优化,所述步骤一中,初始节点排序总表按照路由id的数值从小到大或者从大到小进行排序。
28.本发明与现有技术相比,具有以下有益效果:
29.本发明所述重复路由的剔除方法为去重算法提供参考,降低算法复杂度,提高运算效率和节省时间;增加单位存储空间所能容纳的数据量以提高存储空间效率;减少维护单位数据量所需的设备资源和降低相应能耗。
附图说明
30.图1是本发明所述剔除重复路由的计算方法的总体流程图。
31.图2是本发明所述剔除重复路由的计算方法的主算法具体流程图。
具体实施方式
32.下面结合附图附表对本发明的技术方案做进一步的详细说明:
33.首先定义重复路由,经过的节点一样及节点总数目相同的路由称为节点重复路由。
34.在本实例中,有工作中采集到五段路由,如表1所示,路由序号分别为1、2、3、4、5,其中1号路由经过a、b、c、d四个节点;2号经过a、c、b、d四个节点;3号、4号和5号均经过两个节点。可以发现,4号和5号为两段重复路由。此外,对于1号和2号路由,即使节点的排列顺序不同,但节点的总数和节点本身,二者是一样的,这样的两组路由称为节点重复路由。所以,只要两段路由之间的节点相同(无关于顺序)以及节点的总数目相同,就能称之为节点重复路由。
35.表1五段路由经过节点表
[0036][0037]
此外,在此对本发明所述判别方法的算法做一个简单的说明。在图论中,为方便表示各顶点之间的连接关系,通常采用邻接矩阵a进行表达。假设有n个顶点,那么邻接矩阵可表示为:
[0038][0039]
邻接矩阵必然为n阶方阵,其中的元素为:
[0040][0041]
从(2)式可以知道,若两个顶点之间存在连通的边,邻接矩阵中的元素a
ij
=1,相反地,元素a
ij
=0。在本算法中,两段路由之间存在关联的首要条件是存在至少两段路由且两段路由中存在一个或若干个相同的节点。即两段路由中有一个或多个节点相同,则对应路由间关系在邻接矩阵中的元素表示为1。所以,在上例中,共有5段路由,则相当于有5个顶点,即集合v={v1,v2,v3,v4,v5};以含有相同节点为标准,则集合e={(v1,v2),(v1,v3),(v2,v3),(v3,v4),(v3,v5),(v4,v5)},那么,该算法的邻接矩阵可表示为
[0042][0043]
值得说明的是,这里采用的邻接矩阵,是无向图邻接矩阵。之所以以无向图作为算法的基础,是因为对于相互关联的路由来说,在去重的过程中应能够做到双向调用。简单地说,就是假设v1与v2相互关联,那么在路由间关系临时表就应出现v1指向v2的记录和v2指向v1的记录。
[0044]
另外一个采用无向图的原因,是因为其邻接矩阵一定是对称的,能够节省存储空间,提升运算速度。通常来说,用邻接矩阵来表示一个具有n个顶点的有向图时需要n2个单元来存储邻接矩阵;而对有n个顶点的无向图可以只存入上(下)三角阵,故只需1 2 ... (n-1)=n(n-1)/2个单元。也就是说,(3)中的矩阵,能够简化为:
[0045][0046]
所以整个算法关注的就是此时的邻接矩阵,且重点关注元素a
ij
=1的路由间的关系。也就是说,矩阵能够进一步简化为:
[0047][0048]
只要对矩阵中元素为1的两段路由进行对比,就能判断两段路由是否重复,总体算法流程图详见图1。
[0049]
在本实施例中,基于上述五段路由判别重复路由的方法,包括以下步骤:
[0050]
步骤1:明确路由的数据结构,创建节点临时比对表、路由排序临时表和路由间关系临时表,明白每个表格的功能和表格之间的相互关系。
[0051]
路由间关系临时表,记录的是两段路由之间的相互关系,其记录会随算法的循环不断增加或删减,是算法最后一步中改变不同路由序号的依据,如表2所示。这里的指向段和被指向段,与图论中的顶点v相类似,组间的关系记录会在算法迭代过程中成对出现。简单来说,只要两段路由存在相同的节点标识,那么在路由间关系临时表的记录里一定会出现(x,y)和(y,x),对于成对出现的记录,在后面路由间关系临时表的描述中会做出更详细具体的说明。
[0052]
表2路由间关系临时表数据类型表
[0053]
字段名字段类型说明常量指向段stringx
‑‑
被指向段stringy
‑‑
[0054]
步骤2:数据的准备,即对现有各段路由中的节点按照各自的节点标识进行排序并汇总,得到初始节点明细排序表。
[0055]
为更好的说明,现取表1的数据(以下说明均以表1数据为基础),初始的节点排序总表如表3所示。
[0056]
表3初始节点排序表
[0057]
节点id路由id节点标识y1x1ay2x1by3x1cy4x1dy5x2a
y6x2cy7x2by8x2dy9x3ay10x3ey11x4ey12x4fy13x5ey14x5f
[0058]
按照各自的节点标识进行排序,得到的即为按节点标识明细排序表,如表4所示。
[0059]
表4节点明细排序表
[0060]
节点id路由id节点标识y1x1ay5x2ay9x3ay2x1by7x2by3x1cy6x2cy4x1dy8x2dy10x3ey11x4ey13x5ey12x4fy14x5f
[0061]
步骤3:对节点临时比对表和路由排序临时表5进行初始化并定义变量。其中,变量包括当前节点的路由id、路由序号、计数、对应路由内节点总数和当前节点的标识。初始化得到的路由排序临时表5和节点临时比对表,如表6所示。其中需要注意的是,为执行后面的循环算法,需要根据节点明细排序表的第一条记录为节点临时比对表添加第一条记录。
[0062]
表5路由排序临时表
[0063]
路由id路由序号路由内节点总数x114x224x332x442x552
[0064]
表6新增第一条节点临时比对表
[0065]
路由id计数路由内节点总数当前节点标识x114a
[0066]
步骤4:将得到的节点明细排序表4与初始化的节点临时比对表6进行比对,按照路由间的节点标识以及节点总数相同时为节点重复路由的原则,对相互关联的路由进行标记和记录。主算法具体流程如图2所示,注意一点,所有记录都检验过后,即算法循环体结束以后,还需要执行图2虚线矩形方框中的内容一次。
[0067]
由步骤3可知,当前节点标识为a,根据节点明细排序表4的第二条记录,对比节点临时比对表6的记录,可以发现,二者元素相同,但节点临时比对表中仅有x1的路由id而没有表4中第二条记录的路由id,即x2,对此,节点临时比对表新加一条路由id,如表7所示。
[0068]
表7新增第二条数据的节点临时比对表
[0069]
路由id计数路由内节点总数当前节点标识x114ax214a
[0070]
同时,因为节点临时比对表中的当前节点标识与节点明细排序表的节点标识相同,且比对表中对应记录的循环计数为1,加上路由间关系临时表不存在两段路由的关联记录,需要往路由间关系临时表添加这两段路由的关系记录,如表8所示。
[0071]
表8新增第一个关系的路由间关系临时表
[0072]
xyx1x2x2x1
[0073]
之后,对比节点明细排序表4的第三条记录,可以得到的节点临时比对表和路由间关系临时表如表9和表10所示。
[0074]
表9新增第三条数据的临时比对表
[0075]
路由id计数路由内节点总数当前节点标识x114ax214ax312a
[0076]
表10新增第二个关系的路由间关系临时表
[0077]
xyx1x2x2x1x1x3x3x1x2x3x3x2
[0078]
然后,用节点明细排序表的第四条记录与当前的节点临时比对表进行比对,发现节点标识为b,与当前节点标识a不同,故将当前节点标识更改为b。另外,因为节点临时比对表的第一条记录中存在节点明细排序表4第四条记录的路由id,于是对当前节点临时比对
表的第一条记录做出更改,如表11所示。
[0079]
表11新增第四条数据的临时比对表
[0080]
路由id计数路由内节点总数当前节点标识x124bx214ax312a
[0081]
接着,检验节点明细排序表的第五条记录,节点临时比对表中有对应的路由id,所以循环计数加1,如表12所示。
[0082]
表12新增第五条数据的临时比对表
[0083]
路由id计数路由内节点总数当前节点标识x124bx224bx312a
[0084]
此时全部b节点标识均遍历完,路由x2与x3的当前节点标识不同,故在路由间关系临时表中删除两组的相关关系,如表13。
[0085]
表13新增第三个关系的路由间关系临时表
[0086]
xyx1x2x2x1x1x3x3x1
[0087]
之后,按照上述流程迭代循环,到节点明细排序表的第九条记录的时候,此时的节点临时比对表如表14所示。
[0088]
表14新增第九条数据的临时比对表
[0089]
路由id计数路由内节点总数当前节点标识x144dx244dx312a
[0090]
然后对比节点明细排序表的第十条记录,发现其节点标识和节点临时比对表的当前节点标识不一致,所以当前节点标识更改为e。同时,可以发现,此时的节点临时比对表第一条记录中的循环计数和节点总数一致,说明该段路由所有节点均已检验,需要根据路由id到路由间关系临时表中查询x对应为x1的记录,此时可以查询到一条记录,如表15所示,且通过路由id可查询到对应路由的节点总数为4。
[0091]
表15路由间关系临时表
[0092]
xyx1x2
[0093]
紧接着,根据y列的路由id到节点临时比对表中查询对应组别的节点总数,可以知道,路由id为x2的节点总数为4,与x1的节点总数相一致,同时可以根据路由id到节点临时
比对表中查询到第二条记录,发现其循环计数和节点总数也一致,说明该段路由所有节点也均已检验,此时,需要在路由排序临时表中更改路由id为x2的序号,将其序号更改为x1的序号,如表16所示,然后将路由id为x2的数据组剔除。
[0094]
表16路由排序临时表更新
[0095]
路由id路由序号路由内节点总数x114x214x332x442x552
[0096]
这里要说明的是,判断两段路由是否为节点重复路由,即判断路由序号是否改变,第一个要看节点临时比对表的各自记录中的循环计数和节点总数是否一致,这个是判断对应路由的所有节点是否都参与检验的依据,如果几条记录中的一条,存在循环计数和节点总数不一致,也就是说该段路由的节点还没完全检验,则不能更改序号,第二个要看两条记录的节点总数是否一致,两组数据的节点总数必须一致才能作为节点重复路由,另外,还要看两条记录的路由是否在路由间关系临时表中存在关联关系,这是保证在每次检验中两段路由的节点均相同。故判定两段路由的节点是否相同应在每次节点明细排序表中同一节点标识的节点均加入到节点临时比对表中比对,且在路由间关系表中建立或删减好路由间关系后,做一次检验。在检验中应首先判断该组计数是否与路由内节点总数相同,然后再判断两组节点总数是否相同、两组在路由间关系临时表中是否存在相关关系,满足以上条件的组则判定为重复节点路由。
[0097]
检索结束后,删除路由间关系临时表中的无用数据,即根据刚刚涉及到序号处理的路由id,将路由间关系临时表中的记录删除,此处应删除路由间关系临时表中x1和x2的记录。
[0098]
因为当前元素标识仍为e,该步算法还没有执行完毕,所以需要在节点临时比对表中更改对应记录,如表17所示。
[0099]
表17新增第十条数据的临时比对表
[0100]
路由id计数路由内节点总数当前节点标识x144dx244dx322e
[0101]
之后继续执行循环体,直到节点明细排序表的第十三条记录,节点标识再次发生更改,变为f。值得注意的是,虽然这里节点标识发生了改变,但不会对路由间关系临时表做出更改。具体情况如下:第十二条记录时,此时的节点临时比对表和路由间关系临时表如表18和表19所示。
[0102]
表18新增第十二条数据的临时比对表
[0103]
路由id计数路由内节点总数当前节点标识x144d
x244dx322ex412ex512e
[0104]
表19路由间关系临时表
[0105]
xyx3x4x4x3
[0106]
按照步骤,需要查询x3的xy记录,x1的节点总数与x3的不一致,不需要处理,而x4,虽然节点总数一致,但节点临时比对表中的循环计数和节点总数不同,所以也不能进行序号处理。
[0107]
继续迭代对比,直到节点明细排序表的第十四条记录,但是,循环结束之后,最后还需要遍历一遍数据比对表,重复xy关系删除与序号调整操作。
[0108]
步骤5:输出结果,即向用户展示最终的路由列表,如表20所示,序号相同的组别为节点重复路由。
[0109]
表20向用户展示的最终数据组表
[0110]
路由id路由序号路由内节点总数x114x214x332x442x542
[0111]
在本实施例中,剔除重复的路由:针对更新后的路由排序临时表中“路由序号”路由,留下路由id最小的一组,删除掉其余的。
[0112]
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替代,都应当视为属于本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献