我们通过将最大强连通分量替换为二部图,将边标记有向图转换为增广的DAG。我们还提出了一种类似Dijkstra的算法,通过重新定义路径的“距离”来计算路径标签传递闭包。与现有的解决方案相比,我们证明了我们的方法在搜索空间方面是最优的。此外,我们还提出了一个简单而有效的基于分区的框架(局部路径标签可传递闭包在线遍历)来回答大型图中的LCR查询。我们证明了寻找最优图划分以最小化查询处理成本是一个NP难问题。因此,我们提出了一个基于采样的解决方案来寻找次优分区。此外,我们解决了索引维护问题,以回答LCR对动态图的查询。大量的实验证实了我们方法的优越性。
为了回答可达性查询,我们总是通过将G中的每个强连通分量合并成一个顶点,将有向图G转换成有向无环图(DAG)。但是,这种方法不能在LCR查询中使用,因为每个强连接的组件都有不同的边标签。
3.2. Existing approaches
因此,我们可以用生成树T和部分传递闭包来重新构造完全传递闭包
显然,不同的生成树会导致不同的NT。为了最小化NT的大小,金等人为每个边e引入“权”w(e),表示如果边e在树中,可以从NT中移除的路径标签的数目。因此,他们建议使用g中的最大生成树。然而,分配精确的边权重w(e)是相当昂贵的。因此,他们提出了一种抽样方法。对于每个采样种子(顶点),他们计算单源传递闭包,在此基础上,他们提出一些启发式方法来定义边权重。
然而,他们的方法在[1 1]中有两个限制。首先,类似于传统可达性查询[21,14]中的对应物方法,单个生成树不能极大地压缩传递闭包,尤其是在稠密图中。因此,NT可能非常大。第二,为了找到最优生成树,J . I . n . T . a . l .【11】提出了一个算法来计算每个采样种子(顶点)的单源传递闭包。然而,就搜索空间而言,他们的算法中的搜索空间不是最小的,因为它在中间结果中包含大量冗余路径。冗余路径对性能影响很大。我们将很快详细分析这个缺点。以上两个问题(大索引大小和昂贵的索引构建过程)影响了[1 1]中方法的可伸缩性。
由于计算单源传递闭包也是我们方法的一个组成部分,我们证明了我们的方法在搜索空间方面是最优的。
算法1采用BFS策略,在每次迭代中向其邻居广播一个顶点的路径标签
给定一个冗余路径p,p的冗余pathlabel会感染它所有的超级路径。这种感染会对性能产生很大影响,尤其是在大而密集的图中。一个最优的算法应该能“神奇地”尽早阻止感染。
例如,一个神奇的方法可以在步骤3中从v1中移除顶点5。算法1中的一个关键问题是我们无法知道{ac}在步骤4之前,M(1,5)是多余的。所以冗余的感染是无法避免的。
在我们提出的方法(第4.1节)中,我们可以保证,如果一条路径p是冗余的,那么它的所有超级路径都将从搜索空间中删除。
4.Computing transitive closure
如前所述,与传统的传递闭包相比,计算路径标签传递闭包更具挑战性(定义3.8)。本节重点关注如何有效地计算路径标签传递闭包。我们首先提出了一个类Dijkstra算法来有效地计算单源传递闭包(第4.1节)。然而,从G中的每个顶点迭代单源传递闭包计算来计算MG是非常昂贵的。
augmented DAG(简称aDAG)通过将所有强连通分量表示为二部图。在4.2节中讨论了基于aDAG的计算传递闭包的方法。我们将在第4.3节讨论如何优化计算每个强连通分量的局部传递闭包。
4.1.Single-source transitive closure
本小节重点关注有效计算单源传递闭包。正如第3.2节所讨论的那样,[1 1]中的方法在搜索空间方面不是最优的。关键问题是,一些冗余路径在其对应的非冗余路径之前被访问。为了解决这个问题,我们提出了一种类似Dijkstra的算法。在Dijkstra算法的每一步中,我们总是访问一个离原点距离最小的未访问顶点。在我们的算法中,我们通过定义4.1中沿着路径的不同边缘标签的数量来重新定义路径的“距离”。
定义4.1。路径p的距离定义为p中不同边标签的数量
所有邻居三元组根据定义4.2中定义的总顺序进行排序。
4.2.Computing transitive closures
给定一个图G,我们可以从G中的每个顶点迭代算法2来计算MG。然而,这是一个低效的解决方案。直觉上,给定两个相邻的顶点u1和u2,它们共享了很多计算u1的步骤算法2。因此,一个有效的算法应该避免不必要的冗余计算。转换成一个DAG,但是这种方法不能用于LCR查询,因为它缺少一些边标签。相反,我们通过将所有强连通分量替换为二部图来提出一个增广的augmented DAG D。
在传统的可达性问题中,有向图G通过由单个顶点合并每个最大强连通分量而被转换成DAG。为了区分算法3生成的DAG和传统可达性问题生成的DAG,我们将算法3生成的DAG称为augmented DAG(简称aDAG)。
4.3. Optimization: computing local transitive closure in
strongly connected components
5.LCR query over large graphs
给定一个大的图G,计算路径标签传递闭包是非常昂贵的,尽管它能够回答LCR查询。如前所述,回答可达性查询的另一种极端方法是动态遍历G。我们的方法背后的直觉是:我们可以将两种极端的方法结合起来,在线下和在线成本之间找到一个很好的平衡点。
5.1. Query algorithm
5.2. Finding the optimal partition
如前所述,不同的分区会导致不同的查询性能。
例如,给定一个图G,G上有两种图划分,如图7所示。考虑查询。在图7(b)的第一个分区中,我们的查询算法可以回答基于局部传递闭包,因为路径(1,3,2)包含在一个块中。然而,给定第二个分区,我们必须访问另一个块来回答相同的查询。显然,前者比后者更快,因为后者导致更多的I/O成本。
最佳分区应该最小化整体查询工作负载。在这一小节中,我们将图划分问题形式化,并证明它是一个NP难问题,因为最小割图划分问题可以简化为这个优化问题。因此,我们采用一些启发式方法来寻找一个“好”的分区,以加速算法6。一般来说,我们把一个经典的最小割边加权图划分问题简化为我们的问题。我们的方法的主要贡献是如何在我们的问题中分配边权重。注意,在下面的讨论中,我们假设给定了分区号k。我们将在第5.3节讨论如何设置k。
给定路径P1;2;3;4;5;6;7;在图8中,由于有两条交叉边,p被分成五段,(1,2,3),(3,4),(4,5,6),(6,7)和(7,8),其中(1,2,3)和(4,5,6)和(7,8)是非交叉段,其余为交叉段。让我们回忆一下算法6。我们使用局部传递闭包来寻找非交叉段,其代价定义为α。
显然,给定一个图G,Eq的第一部分是常数。G上的不同划分导致了Eq第二部分的不同值。
Definition 5.5.图G上的划分是最优的,当且仅当它的代价(定义5.4)最小。
Theorem 5.1.给定一个图G和一个数k,寻找将G划分为k个不相交块的最优划分(定义5.5)是NP难的。
5.3. Setting k
现在,我们讨论如何设置分区号k。k值越大,每个块的大小Pj越小。另一方面,k越大意味着骨架图Gn中的块越多,导致算法6在线遍历时搜索空间越大。因此,为了优化查询性能,k应该尽可能小。但是k小导致线下成本更贵。在极端情况下,意味着计算整个图的传递闭包。实际上,我们可以调整k来获得离线和在线性能之间的良好平衡
6.LCR query over dynamic graphs
我们将图的更新建模为一系列的边插入和删除。在本节中,我们只讨论如何处理两个基本操作(边缘插入和删除)。
假设一个图G分解成k个块Pi,收集所有边界顶点和交叉边,形成骨架图Gn。索引维护包括对骨架图Gnand和局部传递闭包的更新。我们首先在第6.1节讨论我们方法的一般框架。关键问题是如何更新局部传递闭包,这将在6.2节中介绍。
6.2. Local transitive closure maintenance
6.2.1. Edge insertion
6.2.2. Edge deletion
如果u和uj在两个不同的块中,很容易知道P’中的所有最大强连通分量都与P中的相同。根据算法3,我们可以计算更新的aDAG,表示为D’。最后,我们通过再次调用算法4中的函数aDAG来重新计算局部传递闭包。实际上,计算过程可以通过以下定理进行优化。根据定理6.2,我们只需要从Cj开始传播。
如果ui和uj在同一个极大强连通分量C中,我们提出以下算法来处理更新。首先,我们识别更新图G’中的所有最大强连通分量。然后,根据第4节中的方法,我们将G′表示为一个新的aDAG D′。对于G′中的每个最大强连通分量C′,如果C′与G中的某个最大强连通分量相同,则不需要重新计算MC′。否则,我们需要重新计算MC’。因为我们只删除了一条边,所以大多数组件在G’中都没有改变。根据D′的逆拓扑顺序,我们找到局部传递闭包(即MC′)发生变化的最低分量C′。最后,我们从组件C′调用算法4中的函数aDAG来重新计算传递闭包。