基于符号BDD的大规模图数据可达性索引构建方法与流程

文档序号:12667003阅读:237来源:国知局
基于符号BDD的大规模图数据可达性索引构建方法与流程

本发明涉及图数据操作技术领域,具体涉及一种基于符号BDD的大规模图数据可达性索引构建方法。



背景技术:

现今大数据发展过程中,在图数据上进行各项操作被广泛需求,其中可达性查询最重要操作之一。图数据可达性技术的研究具有重要意义,可达性查询技术已经被广泛运用于各个领域,例如生物网络中,两个基因之间是否具有间接控制关系等等。在社交网络中,用于查找两个用户之间是否具有某种间接关系等可达性查询操作。此外,可达性索引技术也可以运用到加速其他相关图数据算法操作,例如加快子图查询操作和最短路径查询技术[1-2]。在图形数据规模较小时,可以直接运用深度优先遍历直接查找到可达信息。但是随着现实数据集越来越大,可达性查询也越来越频繁,直接查找的方式逐渐被图数据索引代替。通过索引查找可达性问题可以大大加快查询效率。

迄今为止,已然有大量的可达性索引技术被相继提出。这些方法主要考察索引构建时间、索引的规模和利用索引的查询时间这三各方面的性能。最早先的方法主要是查找每个节点传递闭包,这种方法索引规模大,索引建立时间长,从而逐渐不被应用了。现今比较经典的可达性索引技术,根据数据规模可以把可达性索引技术分为中小规模数据和大型数据两种。针对图数据的可达性技术比较成熟,主要分为以下三类:

第一类基于链的索引方法,该方法首先将图转化为各个不相交的链,然后给每条链和每条链上的节点按顺序标上序号,这样每个节点就有了自身标签(链序号,节点序号),最后将每个节点可以到达其他链的链中节点序号最小的节点的标签作为可达标签,可达性索引就是为每个节点标上自身标签和可达标签两部分。可达性查询A节点是否可达B节点时,只需要判断A节点的可达标签中节点序号是否小于B节点自身标签的节点序号,肯定表示可达,否定表示不可达。

第二类基于hop技术的索引,该类方法为图中每个节点分配两个集合:in和out,分别包含通过跳数计算可以到达该节点的节点和该节点可到达的节点。在可达性判断A节点是否可达B节点时,A节点的out集合和B节点的in集合有交集时表示A可达B节点。

第三类基于树的索引方法,该类方法主要运用遍历把图生成树,在生成树上对节点进行区间编码,实现孩子节点的区间一定是包含在父节点的区间内。在可达性判断时,只需要判断两个节点的区间编码是否包含,如果区间是包含关系就表示可达。

由于上述方法都是使用显性存储图数据,即使用传统邻接表和邻接矩阵存储图数据,因而造成存储空间过大问题。此外,上述方法都是针对静态图数据的索引办法,很难拓展到动态数据。



技术实现要素:

本发明提供一种基于符号BDD的大规模图数据可达性索引构建方法,其能够有效提高可达性索引构建速度。

为解决上述问题,本发明是通过以下技术方案实现的:

基于符号BDD的大规模图数据可达性索引构建方法,包括如下步骤:

步骤A.根据给定的图数据即有向图生成初始的索引结构列表;

步骤B.依据给定的图数据构建BDD图,即使用BDD表示有向图;

步骤C.基于步骤B所表示的BDD图,使用符号步骤来完善步骤A中的索引结构列表,即填入每个节点的标识标签;

步骤D.针对步骤C生成的标识标签,使用符号步骤来为每个节点分配区间标签,完善步骤A中的索引结构列表;

步骤E.基于步骤D生成的区间标签,根据图数据具体情况为所有节点的区间标签进行更新操作,形成最终区间标签。这个最终的索引结构列表即可完成静态图数据上各个节点的可达性查询任务;

步骤F.基于步骤E生成的索引结构列表,可以完成可达性操作。

上述步骤A具体为:

步骤A1.根据有向图的节点个数n构建一个索引列表,逻辑上为三列n行列表。

步骤A2.将各个节点填入第一列;

步骤A3.第二列定义为该节点的标识标签a,值暂时缺省之后步骤填入;

步骤A4.第三列定义为该行节点的区间标签[c,d],值暂时缺省之后步骤完善。

上述步骤B具体为:

步骤B1.图数据中节点个数为n,为每个节点分配位编码位;

步骤B2.根据二进制进位法为每个节点进行n位编码;

步骤B3.将有向图中的每条边作为一个BDD图中的一条指向“1”的路径,其中有向边的始点和终点使用不同变量表示,始点使用变量x,终点使用变量y。那么根据上一步骤的编码位数n可以得出始点用变量序表示为x1x2…xn,终点用变量序表示为y1y2…yn。其中如果上一步骤中的编码位的某位置q(q=1,2,…n)上的二进制数为0则使用变量的否定形式表示即xq’或yq’,如果上一步骤中的编码位的某位置q(q=1,2,…n)上的二进制数为1则使用变量的否定形式表示即xq或yq;

步骤B4.根据上一步骤即可得出BDD图中节点就是x1、x2…xn、y1、y2…yn,其中表示为xq’或yq’的节点在BDD图中该节点的到达路径用虚线表示,其中表示为xq或yq的节点在BDD图中该节点的到达路径用实现表示,根据边的始点和终点变量表示可以得出一条BDD路径,这条路径指向BDD图的叶子节点“1”。其他的否定边都指向BDD图的叶子节点“0”,此时就构成了有向图中的一条边的BDD图。

步骤B5.把有向图中的所有边的BDD图进行合取操作成为一个大的BDD图,进而得到了整个图数据的BDD图表示。其中指向“1”的路径则表示该条路径中变量转化回来的二进制编码所表示的两个节点之间有边,其中指向“0”的路径则表示该条路径中变量转化回来的二进制编码所表示的两个节点之间没有边。

上述步骤C中,具体为:

步骤C1.从有向图中任取一个没有入度节点,且该节点满足标识标签值为缺省值,为该节点赋值索引列表中的第二列标识标签为static a=1(其中a值是依次累加的,循环回来是累加值不是1,为了保证所有第二列的标识标签值不相同),并且提取出它的二进制编码,按照步骤B3中的方法按x变量序表示;

步骤C2.根据步骤B中最终生成的BDD图,找到其中所有满足上一步骤中的节点的x变量序的到达“1”的路径中的y变量所表示的二进制编码的有向图节点;

步骤C3.根据步骤C2得出的有向图节点,依次为每个节点赋值节点的标识标签,每给一个节点赋的值都是上一个节点的值加一,依次标签为2,3,……n(也就是a++),依次赋值给索引列表中各个节点的第二列值,并且索引列表中该值不再改变,也就是不会再第二次被赋值,即使下次循环再找到该节点直接跳过不再赋值;

步骤C4.将步骤C3中得出的节点的二进制编码使用x变量序表示。

步骤C5.根据步骤C4得出的x变量序,循环回到步骤C2操作,该循环直到找到有向图的叶子节点下面再没有孩子节点为止;

步骤C6.根据步骤C5的循环完成,此时如果索引列表第二列的标识标签值仍然有缺省值,则循环回到步骤C1;此时如果索引列表第二列的标识标签值都已经填满就停止循环。

上述步骤D中,具体为:

步骤D1.根据步骤C生成的标识标签,为索引列表初始化第三列区间标签值[c,d];

步骤D2.将c赋值为步骤C生成的该节点的标识标签值;

步骤D3.将d赋值为步骤C生成的该节点的标识标签值。

步骤D4.不断依次循环D1、D2、D3三个步骤,直到索引列表中的第三列所有区间标签值都已经初始化完成。

上述步骤E中,具体为:

步骤E1.从索引列表中依次取出有向图的节点,提取出它的二进制编码,按照步骤B3中的方法按x变量序表示;

步骤E2.根据步骤B中最终生成的BDD图,找到其中所有满足上一步骤中得出的节点的x变量序的到达“1”的路径中的y变量所表示的二进制编码的有向图节点;

步骤E3.将步骤E2中找到的节点的标识标签值与步骤E1中找到的节点的区间标签c、d的值相互比较,将更大的值赋给d,将更小的值赋给c;

步骤E4.将步骤E2中得出的节点的二进制编码使用x变量序表示。

步骤E5.根据步骤E4得出的x变量序,循环回到步骤E2操作,直到没有到达“1”的路径,也就是循环直到找到有向图的叶子节点下面再没有孩子节点为止;

步骤E6.根据步骤E5的循环完成,此时如果索引列表中仍有节点未完成更新,则循环回到步骤E1;此时如果索引列表中所有节点都完成更新就停止循环。以上就完成生成索引列表过程,即静态图数据的可达性索引构建完成。

上述步骤F中,具体为:

步骤F1.如果一个始节点的区间标签包含一个终结点的区间标签,则表示始节点可达终结点;如果始节点的区间标签不包含或者交叉包含,则该始节点不可达终结点。

与现有技术相比,本发明具有如下特点:

1.引入符号技术可以隐式的表示图数据,通常这种运用符号技术的隐式存储表示小于显示的邻接矩阵或邻接表存储从而解决上述的存储过大问题;

2.使用符号技术构建索引结构,在为各个节点标签过程和更新区间标签上实现加速作用,可以缩短索引构建时间;

3.可以很好的拓展到动态图数据的可达性索引问题上去,BDD图对于需要增加删除节点和边的操作的动态图数据更容易拓展存储表示;BDD图比邻接矩阵或邻接表存储更容易实现存储的更新操作;

4.能灵活的完成可达性索引的相应更新,符号技术BDD可以更快速的完成动态图数据的索引更新。

附图说明

图1为本发明技术流程图。

图2为本发明的一个实施例的图数据。

图3是图2所示实施例的边AB的BDD图。

图4是图2所示实施例的图数据OBDD表示图。

具体实施方式

为了使本发明的技术方案更加清楚明白,结合附图及实施例,对本发明的一种基于符号BDD的大规模图数据可达性索引构建方法进一步详细说明。本发明使用BDD表示图数据,然后使用BDD符号步骤为该图数据生成可达性索引结构列表,应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

一种基于符号BDD的大规模图数据可达性索引构建方法,如图1所示,包括步骤如下:

步骤1.根据有向图生成初始的索引结构列表。

步骤11.根据图2中的图数据的节点个数n=7构建一个索引结构列表,该索引结构列表为7行3列;

步骤12.将各个节点填入第一列;

步骤13.第二列定义为该节点的标识标签a,值暂时缺省之后步骤填入;

步骤14.第三列定义为该行节点的区间标签[c,d],值暂时缺省之后步骤完善,构成索引结构列表,如表1所示:

表1初始索引结构列表

步骤2.依据给定的图数据构建BDD图,即使用BDD表示有向图。

步骤21.图数据中节点个数为7,为每个节点分配位编码位;

步骤22.根据二进制进位法为每个节点进行3位编码,分别A节点到H节点依次编码为000,001,010,011,100,101,110;

步骤23.将有向图中的每条边作为一个BDD图中的一条指向“1”的路径,其中有向边如始点A和终点B使用不同变量表示,始点使用变量x,终点使用变量y。如果上一步骤中的编码位的q位置上的二进制数为0则使用变量xq’或yq’表示,如果上一步骤中的编码位的q位置上的二进制数为1则使用xq或yq表示。那么根据上一步骤的A的编码为000,B的编码为001,可以得出始点A用变量序表示为x1’x2’x3’,终点B用变量序表示为y1’y2’y3;

步骤24.根据上一步骤即可得出BDD图中节点就是x1、x2、x3、y1、y2、y3,其中表示为xq’或yq’的节点在BDD图中该节点的到达路径用虚线表示,其中表示为xq或yq的节点在BDD图中该节点的到达路径用实现表示,根据边的始点和终点变量表示可以得出一条BDD路径,这条路径指向BDD图的叶子节点“1”。其他的否定边都指向BDD图的叶子节点“0”,此时就构成了有向图中边AB的BDD图,如图3;

步骤25.把有向图中的所有边的BDD图进行合取操作成为一个大的BDD图,进而得到了整个图数据的BDD图表示,如图4显示的是图2图数据转化而来BDD图。其中指向“1”的路径则表示该条路径中变量转化回来的二进制编码所表示的两个节点之间有边,其中指向“0”的路径则表示该条路径中变量转化回来的二进制编码所表示的两个节点之间没有边。

步骤3.基于步骤2所表示的BDD图,使用符号步骤来完善步骤1中的索引结构列表,即填入每个节点的标识标签。

步骤31.从有向图中任取一个没有入度节点A,且该节点满足标识标签值为缺省值,为该节点赋值索引结构列表中的第二列标识标签为a=1(其中a值是依次累加的,循环回来是累加值不是1,为了保证所有第二列的标识标签值不相同),并且提取出它的二进制编码000,按照步骤23中的方法按x变量序表示为x1’x2’x3’;

步骤32.根据步骤2中最终生成的BDD图,找到其中所有满足上一步骤中的节点的A的变量x1’x2’x3’能到达“1”的路径中的y变量序有y1’y2’y3和y1’y2y3’所表示的二进制编码为001和010,这两个二进制编码分别表示图数据有向图中节点B和C;

步骤33.根据步骤32得出的有向图节点B和C,依次为每个节点赋值节点的标识标签值,每给一个节点赋的值都是上一个节点的值加一,依次赋值为2,3,依次赋值给索引结构列表中各个节点的第二列值,并且索引结构列表中该值不再改变,也就是不会再第二次被赋值,即使下次循环再找到该节点直接跳过不再赋值;

步骤34.将步骤23中得出的节点B和C的y1’y2’y3和y1’y2y3’变量序使用x变量变换表示为x1’x2’x3和x1’x2x3’;

步骤35.根据步骤34得出的x变量序x1’x2’x3和x1’x2x3’,循环回到步骤32操作,该循环直到找到有向图的叶子节点下面再没有孩子节点为止,依次找到节点D,E,F,然后根据D,E,F又循环找出G,至此为叶子节点结束该处循环;

步骤36.根据步骤35的循环完成,此时如果索引结构列表第二列的标识标签值仍然有缺省值,则循环回到步骤31;此时如果索引结构列表第二列的标识标签值都已经填满就停止循环,根据步骤35已经将所有节点的第二列标识标签填充完毕,该循环结束,最终生成更新后索引结构列表,如表2所示:

表2索引结构列表填充完成标识标签

步骤4.针对步骤3生成的标识标签,使用符号步骤来为每个节点分配区间标签,完善步骤1中的索引结构列表。

步骤41.根据步骤3生成的标识标签,为索引结构列表初始化第三列区间标签值[c,d];

步骤42.将c赋值为步骤3生成的该节点的标识标签值,如点A标识标签值a=1,则c=1;

步骤43.将d赋值为步骤3生成的该节点的标识标签值,如点A标识标签值a=1,则d=1;

步骤44.不断依次循环41、42、43三个步骤,直到索引结构列表中的第三列所有区间标签值都已经初始化完成,如表3所示:

表3索引结构列表初始化区间标签

步骤5.基于步骤4生成的区间标签,根据图数据具体情况为所有节点的区间标签进行更新操作,形成最终区间标签。这个最终的索引结构列表即可完成静态图数据上各个节点的可达性查询任务。

步骤51.从索引结构列表中依次取出有向图的节点,从表头开始是节点A;并且提取出它的二进制编码,按照步骤23中的方法按x变量序表示x1’x2’x3’;

步骤52.根据步骤2中最终生成的BDD图,找到A节点的x变量序x1’x2’x3’的到达“1”的路径中的y变量序,包括y1’y2’y3和y1’y2y3’,所表示的二进制编码001和010为有向图节点B和C;

步骤53.B和C节点的标识标签值分别为2和3,节点A的区间标签中c、d的值相互比较,将更大的值赋给A节点的d=3,将更小的值赋给c,更小的值仍为1,所以c值不变等于1;

步骤54.将步骤52中得出的y1’y2’y3和y1’y2y3’,所表示的二进制编码001和010为有向图节点B和C使用x变量序表示为x1’x2’x3和x1’x2x3’。

步骤55.根据步骤54得出的x变量序x1’x2’x3和x1’x2x3’,循环回到步骤52操作,找到节点D,E,F,然后节点D,E,F的标签表示a分别为6,4,5,拿这三个值与步骤53得出的A节点的c,d值进行比较,将更大的值赋给d=6,将更小的值赋给c,更小的值仍为1,所以c值不变等于1,然后再循环得出G,G的a值为7,将更大的值赋给d=7,将更小的值赋给c,更小的值仍为1,所以c值不变等于1,至此循环结束,得出节点的区间标签[c,d]=[1,7];

步骤56.根据步骤55的循环完成,此时如果索引结构列表中仍有节点未完成更新,则循环回到步骤51;此时如果索引结构列表中所有节点都完成更新就停止循环。以上生成索引结构列表,即静态图数据的可达性索引构建完成,如表4所示:

表7最终可达性查询索引结构列表

步骤6.基于步骤5生成的索引结构列表,可以完成可达性操作,如果一个始节点的区间标签包含一个终结点的区间标签,则表示始节点可达终结点;如果始节点的区间标签不包含或者交叉包含,则该始节点不可达终结点。

步骤61.根据有向图生成初始的索引结构列表查询节点A是否可达节点B,则调出A节点的区间标签[1,7],B节点的区间标签为[2,5];

步骤61.比较Ac和Bc,比较Ad和Bd,显然1小于2,7大于5,则表示A的节点区间标签包含B节点的区间标签,则节点A可达节点B。

本发明引入符号技术,依据给定的图数据构建BDD图,即使用BDD表示有向图;使用符号步骤来完善构建的空白索引结构列表,即填入每个节点的标识标签和区间标签。针对生成的标识标签的过程,使用符号步骤更快速的广度优先搜索出所有节点并分配标识标签。然后为每个节点生成的区间标签,根据符号步骤每个节点的可达节点都搜查出来,将这些可达节点的标识标签值的最大值赋给该节点的d,最小值赋给该节点的c,所有节点都完成该操作即形成最终区间标签。这个最终的索引结构列表即可完成静态图数据上各个节点的可达性查询任务。本发明构建的可达性索引结构列表可以完成可达性查询操作,具体评判标准如下:如果一个始节点的区间标签包含一个终结点的区间标签,则表示始节点可达终结点;如果始节点的区间标签不包含或者交叉包含,则该始节点不可达终结点。

本发明引入符号技术可以隐式的表示图数据,通常这种运用符号技术的隐式存储表示小于显示的邻接矩阵或邻接表存储从而解决上述的存储过大问题。能够解决索引只能针对应用于中小型图数据,当图数据规模变大,索引构建复杂度就会急剧增长,我们的符号技术表示可以减少存储;其次本发明结合符号技术存储既可以解决图数据存储问题又可以缩短索引构建时间,符号技术可以一次性查找到多个节点的可达节点,从而加快了索引区间标签的更新速度,能够更快的完成所有可达节点的查找;最后本发明可以很好的拓展到动态数据,对于需要增加删除节点和边的操作的动态图数据,符号技术BDD更有利于此类动态更新索引,对于增加节点操作也就是将多余的编码分配给新增加节点,增加边操作就是为BDD增加一条指向“1”的路径,删除边操作就是为BDD中这条边的路径从指向“1”改为指向“0”因此,本发明具有较高的时间和空间效率,并且更加具有拓展性。

通过结合附图对本发明具体实施例的描述,本发明的其他方面及特征对本领域的技术人员而言是显而易见的。

以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。

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