一种基于k2树和多值决策图的大规模图数据处理方法与流程

文档序号:12364340阅读:278来源:国知局

本发明涉及大规模图数据存储与操作技术领域,具体涉及一种基于k2树和多值决策图的大规模图数据处理方法。



背景技术:

随着移动互联网、物联网等技术的发展,众多新应用以前所未有的方式和速度产生并积累着大量数据。在众多类型的大数据中,图数据作为一种有效描述大数据的数据结构,扮演着越来越重要的角色。由于图数据的规模日益庞大,实现图数据的高效存储以及图数据的高效操作是当前面临的挑战。以社交网络为例,根据GlobalWebIndex统计,Facebook用户量已经超过11亿,平均每个人的好友超过100位,使用邻接表来存储所有用户的关系信息,需要接近1TB的存储空间。以互联网为例,根据中国互联网络信息中心(CNNIC)发布的《第37次中国互联网络发展状况统计报告》,截至2015年12月中国网页数量为2123亿个,超链接数据量估计超过1013,使用邻接表来存储网页直接的链接关系信息需要超过16TB的存储空间。随着用户量和信息量的快速增长,问题将会变得越来越严峻。

为了对图数据进行紧凑表示,在传统的邻接矩阵表示法的基础上,Brisaboa等于2009年提出了基于k2树(k2-tree)的方法,树中的每一层对应于邻接矩阵或分块子矩阵的分块子矩阵,节点对应于邻接矩阵的分块子矩阵,生成的k2树使用两个位向量T和L来存储,该方法不仅能够紧凑表示邻接矩阵,而且能实现邻接节点的正向或逆向高效查询操作。施佺等给出了k2树表示方法的两种优化技术:启发式深度优先节点重排序和自适应修正k,使得所表示的结构更为紧凑,节点得到明显的减少。

但是,不论是k2树还是施佺优化过的k2树,在对大规模图数据表示时仍具有一定的局限性,具体表现在:

1)当图的规模变大时,图内部本身就会存在大量的同构子图。同样的,当按照k2树的思想把邻接矩阵进行划分后,也存在大量的相同的子矩阵。这就造成了k2树内也存在大量的同构子树。

2)k2树仅对稀疏图有效,当图变的稠密时,由于邻接矩阵内可被压缩的0节点变少,因此k2树紧凑性也会变低。

3)k2树未涉及动态图(需要添加或删除顶点、边以及子图等的图)的表示与操作。

目前的k2树的图数据紧凑表示方法对上述图的结构特性尚缺乏必要的考虑,在紧凑性上仍有较大的改善空间。针对k2树目前存在的问题,有必要对其进行进一步的优化与改进,以得到一种更为紧凑并且适用面更广的图数据的表示方法。



技术实现要素:

本发明的目的是提供一种基于k2树和多值决策图的大规模图数据处理方法,包括对图数据的存储方法,以及相关的图的基本操作方法(如对边的增删改查等),以对包含亿万个顶点和边的图数据进行高效、紧凑地表示和操作。

多值决策图MDD(Multi-valued Decision Diagram)是一个具有多个终端节点的有向无环图,描述了一个带有n个变量的离散多值函数,f:D1×D2×…×Di×…×Dn→S,其中:

1)Di={1,2,…,ni}为多值变量xi的有限值域,不同变量其值域可能不同;S为多值函数f的有限值域,即MDD终端节点的取值集合,其可能为布尔值(真和假,或者0和1)、有限整数集合或者有限实数集合。

2)MDD的节点包括终端节点和非终端节点。

3)非终端节点用xi表示,包含ni个指向其他节点的指针,这些指针和函数f对应,形式化描述如公式(1)所示。

fxi=c=f(x1,x2,…,xi-1,c,xi+1,…,xn) (1)

多值变量x1到xn给定的一组取值,得到唯一的终端节点取值。

MDD的化简规则为以下三条:

规则1、合并相同终端节点:

同一属性的终端节点只保留一个,并删除其余相同属性的终端节点,原来指向这些已删除的终端节点的指针重定向到保留的终端节点上。

规则2、合并相同内部节点:

同一属性的内部节点,即非终端节点,只保留一个,并删除其余相同属性的内部节点,原来指向这些已删除的节点的指针重定向到保留的内部节点上。

规则3,删除冗余节点:

如果一个节点的所有指针都指向同一节点,那么该节点就是冗余节点,将其删除,并将指向该节点的指针指向删除节点的孩子节点。

本发明设计的一种基于k2树和多值决策图的大规模图数据处理方法,采用k2树的规则对邻接矩阵进行划分,然后使用多值决策图MDD存储图数据,生成的k2-MDD结构。不仅比k2树存储结构紧凑,图的相关基本操作转化为符号决策图的逻辑操作。

本发明的一种基于k2树和多值决策图的大规模图数据处理方法,所述原图为有向图G=(V,E),其顶点数|V|为大于等于1的整数,边数|E|为大于等于1的整数;

包括如下步骤:

步骤1、根据k2树的规则对图的顶点进行n位编码,其中,k是大于等于2的整数;

步骤2、依据步骤1所得顶点编码,对图的边进行编码;

步骤3、根据步骤2所确定的边编码,构造多值决策图结构,即MDD结构,所得为k2-MDD结构。k2-MDD结构是MDD结构的一种特殊情况,限定了它的变量个数和变量的取值范围,其变量个数每个变量的取值范围均为{1,2,…,k2}。故k2-MDD具有MDD的性质,适用MDD的化简规则;

k2-MDD结构为图的邻接矩阵用一个将原始矩阵进行递归的k2等分后构造的多值决策图结构,图的邻接矩阵中任一单元均对应于k2-MDD n个变量的唯一一组取值,根据该组取值得到的唯一函数值即终端节点的值,并且此值与原始矩阵中对应单元格的元素值相等。

本发明构造的含有n个变量的k2-MDD,令其n个变量的值等于边编码集合里的值,函数值为T,否则为F,所得k2-MDD与有向图G对应。

步骤4,根据步骤3所得的k2-MDD结构进行图的基本操作。

步骤3得到了原图的k2-MDD结构,由于其是基于多值决策图,采用符号决策图的逻辑操作进行图的相关基本操作:边查询、外邻查询及求顶点出度、内邻查询及求顶点入度、增加边及删除边等。

上述步骤1具体子步骤为:

步骤1.1、依据k2树对图的邻接矩阵划分的规则,即k2划分规则,确定图数据顶点的编码长度n为顶点个数以k为底的对数向上取整,即其中k是大于等于2的整数;

步骤1.2、使用k分方式,对原始图中某一编号为N的顶点进行编码,1≤N≤|V|。首先令k分的下界LT=1,上界HT=kn

步骤1.3、如果LT<HT,令L=LT,H=HT,将区间[L,H]进行k等分。假设N处在区间[L,H]等分为k个子区间中的第i个子区间,i从0开始计数,则编号为N的顶点得到一位编码记为i,同时将此第i个子区间记为[LT,HT];

步骤1.4、步骤1.3重复进行下去,直至LT≥HT,此时即得到该编号为N的顶点的n位编码,n位编码中每一位都是k种状态之一即(0,1,…,k-1)之一。

上述步骤2具体子步骤为:

步骤2.1、本发明中原图的有向边为顶点之间的关系,用顶点之间的特征函数描述。如顶点v0到顶点v1之间的边,用特征函数E(v0,v1)来描述。设X=(x1,…,xn),Y=(y1,…,yn)是图中顶点的编码向量,则顶点X到顶点Y的边的特征函数表示为:

E(X,Y):{0,1,…k-1}n×{0,1,…k-1}n→{1,2,…k2}n

即两个顶点编码的每一位上的k种状态组合得到k2种状态。因此,边的编码长度依然是n位,编码的每一位是k2种状态之一,即(1,2,…k2)状态之一;

根据步骤1得到的将要进行编码的某条边的起、止两个顶点的编码,将该边的两个顶点的某对应位编码状态进行组合,即得到该边的一位编码;n位编码状态依次对应组合,即得到该边的n位编码;

步骤2.2、重复步骤2.1,直至得到图中所有边的编码。

上述步骤3具体子步骤为:

步骤3.1、使用多终点和边值决策图库,即MEDDLY(Multi-terminal and Edge-Valued Decision Diagram Library),创建取值范围均为{1,2,…,k2}的n个变量。根据此n个变量,对于无权图,初始化一个布尔型MDD,其终点是真或者是假;对于加权图,初始化一个整数或者实数型MDD,其终点是整数或者实数;

MEDDLY库是为操控MDD提供的一个C/C++开源项目,由爱荷华州立大学在LINUX平台下开发,其中提供了丰富的MDD构造以及操作的函数。例如:使用createVariablesBottomUp()函数创建将要构造MDD的变量个数以及每个变量的取值范围;使用createEdge()函数根据给定的一组或多组变量的值生成一个MDD;使用apply()函数以及UNION运算符将两个MDD进行合并。

步骤3.2、假设原图中有m条边,根据步骤2得到其中某条边的编码,使用MEDDLY库中的createEdge()函数生成一个初始MDD,记为R;在其余边中再取一条边用相同方法生成MDD,记为T;

步骤3.3、使用MEDDLY库中提供的UNION运算符,对步骤3.2得到的R和T进行UNION运算,合并结果覆盖原来的R,仍记作R;

步骤3.4、继续在剩余的边中再取一条边用相同方法生成MDD,记为T,R和T进行UNION运算,合并结果仍记作R;

重复此步骤,直至所有边都生成MDD并合并到R中,最终得到的R即为原图的k2-MDD。

上述步骤4具体子步骤为:

步骤4.1、边查询

在步骤3所得的k2-MDD结构图上,根据某条边的起止顶点v1和v2的编码得到该条边的特征函数E(v1,v2),在步骤3所得原图的k2-MDD中检测E(v1,v2)的函数值。若值为T,则该边存在,否则不存在。

使用MEDDLY库中提供INTERSECTION运算符求两个MDD的交运算。将步骤3所得的原图的k2-MDD与根据该条边的特征函数E(v1,v2)生成的k2-MDD进行INTERSECTION运算,运算结果为T,则该边存在,否则不存在;

步骤4.2、外邻查询

在步骤3所得的k2-MDD结构图上进行的外邻查询操作包括求得顶点出度,根据步骤4.1中的边查询的结果,将要进行外邻查询的顶点赋值为v1,图中所有其它顶点依次赋值为v2,检测E(v1,v2)的函数值。若值为T,则当前v2是v1的一个外邻点,否则不是;通过统计v1外邻点的个数得到该顶点v1的出度;

步骤4.3、内邻查询

在步骤3所得的k2-MDD结构图上的内邻查询操作包括求得顶点入度,与步骤4.2外邻查询类似,将要进行外邻查询的顶点赋值为v2,图中所有其它顶点依次赋值为v1,检测E(v1,v2)的函数值。若值为T,则当前v1是v2的一个内邻点,否则不是;通过统计v2内邻点的个数得到该顶点v2的入度;

步骤4.4、增加边

在步骤3所得的k2-MDD结构图上,根据要增加边的起止顶点v1和v2的编码得到该条边的特征函数E(v1,v2),生成该条边的k2-MDD,然后与步骤3所得原图的k2-MDD进行UNION运算,运算结果即为增加了该边的新图的k2-MDD;

步骤4.5、删除边

在步骤3所得的k2-MDD结构图上根据要删除边的起止顶点v1和v2的编码得到该条边的特征函数E(v1,v2),生成该条边的k2-MDD,然后将步骤3所得原图的k2-MDD与要删除边的k2-MDD进行DIFFERENCE运算,运算结果即为删除了该边的新图的k2-MDD。DIFFERENCE是MEDDLY库中提供的一个运算符,用来求两个MDD的差运算,DIFFERENCE(A,B)={x|x属于A且x不属于B}。

根据上述图的基本操作,可拓展完成图的复杂操作,比如图中顶点的添加与删除、子图的添加与删除、宽度优先搜索、求最短路、网络流等等。

与现有技术相比,本发明一种基于k2树和多值决策图的大规模图数据处理方法的优点为:1、采用k2树的规则对邻接矩阵进行划分,然后使用多值决策图存储图数据,使k2树划分邻接矩阵时产生的大量相同的子矩阵,即k2树中的同构子树,自然地被合并,最终生成的k2-MDD结构比k2树存储结构紧凑;2、由于k2-MDD中不论是0值还是1值的子矩阵,只要是同构的,都将被合并,在表示稠密图时,k2-MDD节点数会变少,结构更为紧凑;3、k2-MDD存储图数据后,图的相关基本操作可转化为符号决策图的逻辑操作,为动态图数据的高效操作创造了条件,使得基于k2-MDD图的查询操作要比基于k2树更为简洁;4、k2-MDD是基于多值决策图的结构,其本身结构比k2树更有利于子图查询、图同构、图/子图匹配以及多图匹配等。

具体实施方式

以下结合实施例对本发明做进一步详细的描述。

本基于k2树和多值决策图的大规模图数据处理方法实施例原图为有向图G=(V,E),其顶点数|V|为大于等于1的整数,边数|E|为大于等于1的整数;包括如下步骤:

步骤1、根据k2树的规则对有向图G=(V,E)的顶点进行n位编码,其中,本例k=2;对于编号为N的顶点,1≤N≤|V|,将顶点总数|V|以递归2分方式进行编码,在顶点的n位编码中每一位都是2种状态之一,0或1,

步骤1.1、依据k2树对有向图的邻接矩阵划分的规则,即k2划分规则,确定图数据顶点的编码长度n为顶点个数以2为底的对数向上取整,即

步骤1.2、本例k=2,使用二分方式对顶点进行编码。二分的下界LT=1,上界HT=2n;对于编号为N的顶点,1≤N≤|V|,对总数|V|的顶点按递归二分方式进行编码。根据原图中编号为N的顶点在所有顶点数中的所在位置,得到一个状态作为其一位编码,本例编号为N的顶点的n位编码中每一位都是2种状态之一,即0或1;

步骤1.3、若LT<HT,二分方式的中值等于上界与下界和的一半。若N小于或等于中值,得到编号为N的顶点的一位编码为“0”,同时将中值减1作为上界HT;否则,得到编号为N的顶点的一位编码为“1”,同时中值加1作为下界LT;

步骤1.4、步骤1.3重复进行,直至LT≥HT,此时便得到该编号为N的顶点的n位编码。

步骤2、依据步骤1所得顶点编码,对原图的边进行编码;

步骤2.1、本发明中图的有向边为顶点之间的关系,用顶点之间的特征函数描述。如顶点v0到顶点v1之间的边,用特征函数E(v0,v1)来描述。设X=(x1,…,xn),Y=(y1,…,yn)是图中顶点的编码向量,则顶点X到顶点Y的边的特征函数表示为:

E(X,Y):{0,1,…k-1}n×{0,1,…k-1}n→{1,2,…k2}n

即两个顶点编码的每一位上的k种状态组合得到k2种状态。因此,边的编码长度依然是n位,编码的每一位是k2种状态之一,本例边编码的每一位即1,2,3,4四种状态之一;

根据步骤1得到的将要进行编码的某条边的起、止两个顶点的编码,将该边的两个顶点的某对应位编码状态进行组合,即得到该边的一位编码;n位编码状态依次对应组合,即得到该边的n位编码;

步骤2.2、重复步骤2.1,直至得到图中所有边的编码。

步骤3、根据步骤2所确定的边编码,构造多值决策图结构,即MDD(Multi-valued Decision Diagram)结构;所得为k2-MDD结构;

步骤3.1、使用多终点和边值决策图库,即MEDDLY(Multi-terminal and Edge-Valued Decision Diagram Library),初始化一个含有n个变量的MDD,即顶点或边的编码长度n,其值域如步骤2.1所述为1~k2,本例为1~4。

对于无权图,使用布尔型MDD,其终点是真(T)或者是假(F);对于加权图,使用整数或者实数型MDD,其终点是整数或者实数;

步骤3.2、根据步骤2所得的一条边编码,使用MEDDLY库中的createEdge()函数生成一个初始MDD;用相同方法生成另一条边的MDD;

步骤3.3、使用MEDDLY库中提供的UNION运算符,对步骤3.2两条边生成的MDD进行UNION运算,合并结果保存在步骤3.1所得的初始MDD中;

步骤3.4、重复步骤3.2和3.3,直至所有边都生成MDD并合并到初始MDD中,最终得到的MDD即为原图的k2-MDD。

步骤4,根据步骤3所得的k2-MDD结构进行图的基本操作。

步骤4.1、边查询

在步骤3所得的k2-MDD结构图上,根据某条边的起止顶点v1和v2的编码得到该条边的特征函数E(v1,v2),在步骤3所得原图的k2-MDD中检测E(v1,v2)的函数值。若值为T,则该边存在,否则不存在。

使用MEDDLY库中提供INTERSECTION运算符求两个MDD的交运算。将步骤3所得原图的k2-MDD与根据该条边的特征函数E(v1,v2)生成的k2-MDD进行INTERSECTION运算,运算结果为T,则该边存在,否则不存在;

步骤4.2、外邻查询

在步骤3所得的k2-MDD结构图上进行的外邻查询操作包括求得顶点出度,根据步骤4.1中的边查询的结果,将要进行外邻查询的顶点赋值为v1,图中所有其它顶点依次赋值为v2,检测E(v1,v2)的函数值。若值为T,则当前v2是v1的一个外邻点,否则不是;通过统计v1外邻点的个数得到该顶点v1的出度;

步骤4.3、内邻查询

在步骤3所得的k2-MDD结构图上的内邻查询操作包括求得顶点入度,与步骤4.2外邻查询类似,将要进行外邻查询的顶点赋值为v2,图中所有其它顶点依次赋值为v1,检测E(v1,v2)的函数值。若值为T,则当前v1是v2的一个内邻点,否则不是;通过统计v2内邻点的个数得到该顶点v2的入度;

步骤4.4、增加边

在步骤3所得的k2-MDD结构图上,根据要增加边的起止顶点v1和v2的编码得到该条边的特征函数E(v1,v2),生成该条边的k2-MDD,然后与步骤3所得原图的k2-MDD进行UNION运算,运算结果即为增加了该边的新图的k2-MDD;

步骤4.5、删除边

在步骤3所得的k2-MDD结构图上根据要删除边的起止顶点v1和v2的编码得到该条边的特征函数E(v1,v2),生成该条边的k2-MDD,然后将步骤3所得原图的k2-MDD与要删除边的k2-MDD进行DIFFERENCE运算,运算结果即为删除了该边的新图的k2-MDD。DIFFERENCE是MEDDLY库中提供的一个运算符,用来求两个MDD的差运算,DIFFERENCE(A,B)={x|x属于A且x不属于B}。

上述实施例,仅为对本发明的目的、技术方案和有益效果进一步详细说明的具体个例,本发明并非限定于此。凡在本发明的公开的范围之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围之内。

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